我使用python Cassandra驱动程序将多个条目插入并更新到Cassandra的表中。目前我的代码如下:
cluster = Cluster()
session = cluster.connect('db')
for a in list:
if bool:
# calculate b
session.execute("UPDATE table SET col2 = %s WHERE col1 = %s", (b, a))
else:
# calculate b
session.execute("INSERT INTO table(col1, col2) VALUES(%s, %s)", (a, b))
这种插入和更新方法非常慢,因为要插入的列表中的条目数(都是唯一的)非常大。有没有更快的方法呢?
答案 0 :(得分:0)
通常对于这种情况,您将通过增加对Cassandra的并发写入次数来看到最佳性能。
您可以使用execute_concurrent
使用Datastax Python Cassandra驱动程序执行此操作根据您的描述,值得注意的是,对于您的情况,Update
和Insert
与Cassandra之间没有区别。 (即你可以简单地从你的else子句中为(a,b)的所有值执行insert语句。
您需要创建一个准备好的声明。
不要在for循环中一次执行一次插入,而是考虑预先计算(a,b)对的组作为execute_concurrent
的输入;您还可以将生成器或生成器表达式编写为execute_concurrent
的输入。
示例:
parameters = ((a, calculate_b(a)) for a in my_list)
execute_concurrent_with_args(my_session, my_prepared_statement, parameters)