加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python Cassandra 1.2自动创建表

发布时间:2020-12-20 13:34:48 所属栏目:Python 来源:网络整理
导读:介绍 我正在使用Cassandra 1.2集群(7个节点,复制因子3)在Python中编写应用程序,并且我正在使用cql库(CQL 3.0)从Python访问Cassandra. 问题 应用程序的构建方式是,当尝试针对未配置的列族运行cql语句时,它会自动创建表并重试cql语句.例如,如果我尝试运行此:
介绍

我正在使用Cassandra 1.2集群(7个节点,复制因子3)在Python中编写应用程序,并且我正在使用cql库(CQL 3.0)从Python访问Cassandra.

问题

应用程序的构建方式是,当尝试针对未配置的列族运行cql语句时,它会自动创建表并重试cql语句.例如,如果我尝试运行此:

SELECT * FROM table1

并且table1不存在,那么应用程序将为table1运行相应的CREATE TABLE,并将重试前一个select.问题是,在创建表之后,SELECT(重试)失败并出现此错误:

Request did not complete within rpc_timeout

这个问题

我假设集群需要一些时间来传播表的创建或类似的东西?如果我在创建表和重新选择语句之间等待几秒钟,一切正常,但我想知道为什么以及是否有更好的方法.也许让create table在返回之前等待更改传播?有没有办法做到这一点?

提前致谢

解决方法

我假设你使用的是cqlsh. cqlsh的默认一致性级别是一个意味着它将在第一个节点完成后返回,但不一定在所有节点完成之前返回.如果您阅读,则无法保证从具有已完成表的节点读取.您可以通过启用跟踪来检查这一点,但这会影响性能.

您可以强制执行consistency,这应该创建等待,直到在所有节点上创建表.

CREATE TABLE ... USING CONSISTENCY ALL

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读