【问题标题】:Python + Cassandra 1.2 automatic table creationPython + Cassandra 1.2 自动建表
【发布时间】:2013-05-25 04:09:05
【问题描述】:

简介

我正在使用 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 语句之间等待几秒钟,一切正常,但我想确切地知道为什么以及是否有更好的方法。也许让创建表在返回之前等待更改传播?有没有办法做到这一点?

提前致谢

【问题讨论】:

    标签: python cassandra cql cql3


    【解决方案1】:

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

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

    CREATE TABLE ... USING CONSISTENCY ALL
    

    【讨论】:

    • 不,我没有使用 cqlsh,我正在使用 CQL 3.0 库从 python 访问表。是的,一致性级别“应该”帮助我避免这种情况,但事实并非如此。我已经测试了一致性级别 ALL(发布此问题后的几个月前)并且问题仍然存在,到目前为止唯一的解决方案是在开始使用表之前等待几秒钟。这没什么大不了的,因为这种情况每桌只发生一次,但我仍然找不到关于发生了什么的明确答案以及更优雅的处理方式。
    • 我假设一致性扩展到表创建,但听起来模式传播是它自己单独的头痛。这里有更多关于这类问题的信息:groups.google.com/a/lists.datastax.com/forum/#!topic/…
    • 确实如此。似乎 ppl 仍然有问题。就我而言,它一直在等待超过 2 年。通过阅读您发布的链接,似乎有一个等待时间,但司机应该让它透明(当我问这个问题时不是我的情况)。此外,我没有使用 0.0.0.0(我现在也不是)作为 rpc 地址,所以它可能只是需要时间,而且我使用的旧的糟糕驱动程序并不知道它需要等待架构更改传播。
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2017-03-07
    • 2014-07-14
    • 2021-06-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多