Cassandra Python驱动程序可重现超时

时间:2015-08-23 12:12:05

标签: python cassandra datastax

我们正在尝试将Apache Cassandra用于大型项目,并且我们有一个Python脚本可以对数据库群集运行INSERT个查询。

在开发者笔记本电脑(MacOSX)上测试脚本时,它可以正常运行并执行所有INSERT而不会出现问题。

每次在生产机器(Linux)中运行时,它总是有一个:

cassandra.OperationTimedOut: errors={}, last_host=cassandra1.example.com

我们正在使用DataStax Python Driver并在创建群集时使用多个主机(cassandra1.example.com和cassandra2.example.com)。

两台计算机在网络方面具有相同的访问类型和级别(无防火墙等)。生产服务器对数据库的ping时间为4 ms,而开发人员笔记本电脑的平均值为40-50。

任何想法似乎都是问题?

2 个答案:

答案 0 :(得分:0)

40-50ms的网络延迟很可能会使脚本速度变慢,以至于从笔记本电脑运行时不会使服务器过载。生产服务器距离较近的地方,以便他们可以更快地垃圾邮件,并使其超载。如果你是尽快发送异步写入垃圾邮件,你可能需要每隔一段时间检查一次结果,或者只是进行速率限制来限制它们。

答案 1 :(得分:0)

问题已解决,解决方案如下:

我们有一个基本上用作对象的Python类。在初始化程序中,我们创建了集群并连接到集群,然后使用self.clusterself.session等将会话/连接/集群变量作为属性传递。

稍后,通过此类中的方法,我们调用了execute()的{​​{1}}语句:

self.session

然后我们用空函数替换了对象初始值设定项,并将所有与Cassandra相关的函数放在def executeQuery(self, id) self.session.execute("INSERT INTO table (id) VALUES (" + str(id) + ");") 方法中。问题得到解决,没有发生超时。