简介
我正在使用 Cassandra 1.2 集群(7 个节点,复制因子 3)在 Python 中编写应用程序,并且我正在使用 cql 库 (CQL 3.0) 从 Python 访问 Cassandra。
问题
应用程序的构建方式是,当尝试针对未配置的列族运行 cql 语句时,它会自动创建表并重试 cql 语句。例如,如果我尝试运行这个:
SELECT * FROM table1
并且 table1 不存在,那么应用程序将为 table1 运行相应的 CREATE TABLE,并将重试之前的选择。问题是,在创建表后,SELECT(重试)失败并出现此错误:
Request did not complete within rpc_timeout
问题
我假设集群需要一些时间来传播表的创建或类似的东西?如果我在创建表和重试 select 语句之间等待几秒钟,一切正常,但我想确切地知道为什么以及是否有更好的方法。也许让创建表在返回之前等待更改传播?有没有办法做到这一点?
提前致谢
最佳答案
我假设您正在使用 cqlsh。 cqlsh 的默认一致性级别是一个意味着它将在第一个节点完成后返回,但不一定在所有节点完成之前返回。如果您阅读,则不能保证从具有完整表格的节点读取。您可以通过打开跟踪来检查这一点,但这会影响性能。
您可以执行 consistency这应该让创建等到表在所有节点上创建。
CREATE TABLE ... USING CONSISTENCY ALL
关于Python + Cassandra 1.2 自动建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16821674/