木匠的微型博客 Charlie Twitter

    follow me on Twitter

    Wednesday, June 20, 2012

    Cassandra CQL Batch and single quote 批处理修改之疑惑

    Cassandra 使用经验点滴.

    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: