我们尝试在一个大型项目中使用apachecassandra,我们有一个Python脚本,它在数据库集群中运行INSERT
查询。在
在测试脚本时,在开发人员笔记本电脑(MacOSX)上,它工作得很好,可以毫无问题地执行所有插入操作。在
每次在生产机器(Linux)中运行时,它总是有一个:
cassandra.OperationTimedOut: errors={}, last_host=cassandra1.example.com
我们使用DataStax Python Driver并使用多个主机(cassandra1)。example.com网站还有卡桑德拉2号。example.com网站)创建群集时。在
两台计算机在网络方面具有相同的访问类型和级别(无防火墙等)。生产服务器有4msping数据库,而开发人员笔记本电脑平均40-50。在
有什么问题吗?在
问题已解决,解决方法如下:
我们有一个Python类,它基本上用作一个对象。在初始值设定项中,我们创建了集群并连接到它,然后使用
self.cluster
、self.session
等作为属性传递session/connection/cluster变量稍后,在这个类中的一个方法中,我们调用了
execute()
语句self.session
:def executeQuery(self, id) self.session.execute("INSERT INTO table (id) VALUES (" + str(id) + ");")
然后我们用一个空函数替换了对象初始值设定项,并将所有与Cassandra相关的函数放入
executeQuery()
方法中。问题已解决,未发生超时。在最有可能的是,40-50毫秒的网络延迟减慢了脚本的速度,使它在从笔记本电脑上运行时不会使服务器过载。生产服务器离得更近,因此它们可以更快地发送垃圾邮件,并使其过载。如果您正在尽可能快地发送异步写操作的垃圾邮件,那么您可能需要每隔一段时间检查一次结果,或者只是进行速率限制,从而限制异步写入。在
相关问题 更多 >
编程相关推荐