Cassandra 多个连接保存,不工作 [Python]
Posted
技术标签:
【中文标题】Cassandra 多个连接保存,不工作 [Python]【英文标题】:Cassandra multiple connections save, not working [Python] 【发布时间】:2018-04-15 06:19:23 【问题描述】:我有 2 个 cassandra 集群,我的简单脚本试图从一个集群读取并写入另一个集群。根据文档here,我有一个到第二个集群的registered_connection
(命名)和一个到第一个集群的默认连接。我可以使用以下方法查询不同的集群:
item = MyModel.filter(u_id=u_id).using(keyspace=KEYSPACE,connection=connection).first()
但是,当我尝试使用以下方法将项目写入/保存到另一个集群时:
item.using(connection=connection).save()
它不会引发错误,但也不会写入集群。我通过查询接收器集群验证了这一点。我是否遗漏了文档中明显的内容?
PS:在第一个场景中,它的 ModelQuerySet
对象应用自定义连接,而在保存场景中,它的 Model
对象。
【问题讨论】:
【参考方案1】:对于偶然发现相同问题并需要解决方案的人。 请记住,这是一种解决方法,因此如果此处弹出适当的解决方案,请遵循该解决方案。
此解决方案基于假设:
-
您正在使用 cassandra-driver==3.11.0 或更低版本,其中连接
支持注册表(看看here)
您有 2 个或更多集群要处理,并且您已通过上述 API (register_connection) 注册了所有命名连接。使连接之一成为默认连接。
关于您的问题的一点背景:
当您使用具有不同连接的ModelSetQuery
对象时,它会表现出预期的行为。所以如果你有这样的查询:
MyModel.filter(u_id=u_id).first()
您可以使用using
方法轻松地为此类查询指定keyspace
和connection
:
MyModel.filter(u_id=u_id).using(keyspace=KEYSPACE, connection=connection).first()
您会发现MyModel.using(connection=connection).save()
不起作用。
对于具有批判性思维的人:
您会观察到,在cassandra.cqlengine.query
中的_execute_statement
方法下方,connection
变量为None
,即使您使用Model.__connection__
进行设置,model._get_connection()
也不会获取您的连接名称字符串。只是一个提示,让您开始查看实际问题。
解决方法:将每个集群上的操作组合在一起,然后在每个集群操作切换默认连接到相应集群之前使用connection.set_default_connection("cluster_connection_name")
所以基本上:
connection.set_default_connection("cluster1")
# operations and queries on cluster 1
....
connection.set_default_connection("cluster2")
# operations and queries on cluster 2
....
希望这会有所帮助!
【讨论】:
以上是关于Cassandra 多个连接保存,不工作 [Python]的主要内容,如果未能解决你的问题,请参考以下文章
连接 Cassandra NoSQL DB 并将响应作为 JSON 响应获取
Kafka-Connect Cassandra Sink 连接器不将数据推送到 Cassandra