Python + Cassandra 1.2 自动建表

标签 python cassandra cql cql3

简介

我正在使用 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/

相关文章:

go - 需要使用 golang 从 CQL 映射中删除,但要避免 CQL 注入(inject)

Cassandra 根据条件更新多行

python - 文本分析-无法将Python程序的输出写入csv或xls文件

python - 按组重新索引 Pandas 时间序列

cassandra - Vnodes 在 Cassandra 中的意义

spring-boot - 如何使用 spring data cassandra 创建一组用户定义类型?

Cassandra CLUSTERING ORDER BY 不起作用并显示正确的结果

Python argparse 重复子解析器

python - 提取 keras 模型的最后一层作为子模型

php - 如何获取 cassandra(php) 中主键的最后一个值?