Cassandra CQL Batch可以极大的提高数据修改的效率. 我们这里的情况是提高了五倍.
但是CQL Batch不支持绑定变量,存在安全隐患,而且不方便处理字符串(值)里面的单双引号.
解决方法是单引号前面再加一个单引号,把单引号特别标示出来就行了. 这样, CQL就可以被正确的解释执行了.
CQL>
BEGIN BATCH
INSERT INTO demo.product(id, price, description) VALUES (123, 5.98, 'AA''BB')
INSERT INTO demo.product(id, price, description) VALUES (124, 9.78, 'BB''CC')
DELETE FROM demo.product where id = 138
...
INSERT INTO demo.product(id, price, description) VALUES (567, 2.34, 'E''''F')
APPLY BATCH;
Python语句示例, 替换单引号:
line=line.replace("'","''")
在下刚刚给DataStax公司提出了功能改进需求.
http://www.datastax.com/support-forums/topic/when-will-cql-batch-support-binding-variable-query-substitution-use-named-parameters
参考:
BATCH语法,
http://www.datastax.com/docs/1.1/references/cql/BATCH
在字符串里面使用单引号,
http://www.datastax.com/docs/1.1/references/cql/cql_lexicon
我们使用Cassandra 1.1, CQL3.0, 200GB数据,记录约为一千字节.
单行CQL INSERT, 每秒插入一千行数据
改为BATCH操作后,每秒插入五千行数据, 每个BATCH里面包含一千个INSERT.
No comments:
Post a Comment