简介
我正在用一个cassandra1.2集群(7个节点,复制因子3)用python编写一个应用程序,并使用cql库(cql3.0)从python访问cassandra。
问题
应用程序的构建方式是,在尝试对未配置的列族运行cql语句时,它会自动创建表并重试cql语句。例如,如果我尝试运行以下命令:
SELECT * FROM table1
并且table1不存在,那么应用程序将为table1运行相应的create table并重试上一次选择。问题是,在创建表之后,select(重试)失败,并出现以下错误:
Request did not complete within rpc_timeout
问题
我假设集群需要一些时间来传播表的创建或者类似的东西?如果我在创建表和重试select语句之间等待几秒钟,一切都正常,但我想知道确切的原因以及是否有更好的方法。也许让create表在返回之前等待更改的传播,有没有办法呢?
提前谢谢
1条答案
按热度按时间p8ekf7hl1#
我假设你用的是cqlsh。cqlsh的默认一致性级别是指它将在第一个节点完成后返回,但不一定在所有节点完成之前返回。如果读取,则不能保证从包含已完成表的节点读取。您可以通过打开跟踪来检查这一点,但这会影响性能。
您可以强制执行一致性,该一致性应使创建等待,直到在所有节点上创建表为止。