让我们说我的cassandra表定义如下:
CREATE TABLE IF NOT EXISTS {} (
user_id bigint ,
username text,
age int,
PRIMARY KEY (user_id)
);
我在每个列表中有3个相同大小的列表,包含1 000 000
个记录。使用像这样的for循环插入数据是一个好习惯:
for index, user_id in enumerate(user_ids):
query = "INSERT INTO TABLE (user_id, username, age) VALUES ({0}, '{1}', {1});".format(user_id, username[index] ,age[index])
session.execute(query)
答案 0 :(得分:1)
从查看获取started guide的python驱动程序开始,这可能是一个好主意。如果你已经看到那么道歉,但我认为值得一提。
一般来说,你创建你的会话对象,然后在你的循环中进行插入,可能使用类似预备语句的东西(在入门页面的下方进行了讨论),还有here和{{3} }
上面的例子将此作为一个很好的起点
user_lookup_stmt = session.prepare("SELECT * FROM users WHERE user_id=?")
users = []
for user_id in user_ids_to_query:
user = session.execute(user_lookup_stmt, [user_id])
users.append(user)
在讨论使用python驱动程序提高吞吐量时,您可能会发现here有帮助
您可能会发现this blog是一个有用的资源,特别是我发现这个示例使用的预备语句python driver github page也可能对您有帮助。
答案 1 :(得分:1)
同时执行的准备语句将是您最好的选择。驱动程序提供实用程序函数,用于同时执行带有参数序列的语句,就像使用列表一样:execute_concurrent_with_args
Zipping你的列表将产生一系列适合输入该函数的参数元组。
这样的事情:
prepared = session.prepare("INSERT INTO table (user_id, username, age) VALUES (?, ?, ?)")
execute_concurrent_with_args(session, prepared, zip(user_ids, username, age))