Cassandra删除时间比插入慢得多。为什么?

时间:2013-07-12 14:52:30

标签: python data-structures cassandra datamodel cql3

我知道在同一个Cassandra行上发出大量删除是一种反模式,因为它需要花费时间来进行读取(read here)。但我也发现删除时间要多一些时间。

考虑这个python脚本,它将多个值添加到同一行,然后再次添加它们,然后一次删除一个,然后再次添加它们。对于每项活动,时间将被监控并显示在屏幕上。

import cql
from time import time

connection = cql.connect('localhost',cql_version='3.0.0', keyspace='rkg')
cursor = connection.cursor()

try:
    cursor.execute("DROP TABLE test")
except:
    pass

cqlStatement = """
    CREATE TABLE test (
        a int,
        b text,
        c text,
        d text,
        PRIMARY KEY (a,b,c)
    );
"""
cursor.execute(cqlStatement)

n = 1000

insertStatement = """
    INSERT INTO test (a,b,c,d)
    VALUES ({0},'{1}','{2}','{3}');
"""

deleteStatement = """
    DELETE FROM test
    WHERE a = {0} AND b = '{1}' AND c = '{2}';
"""

t = time()
for i in xrange(0,n):
    cursor.execute(insertStatement.format(1,i,i,i))
print "initial insert time:\t"+ str(time() - t)

t = time()
for i in xrange(0,n):
    cursor.execute(insertStatement.format(1,i,i,i))
print "second insert time:\t"+ str(time() - t)

t = time()
for i in xrange(0,n):
    cursor.execute(deleteStatement.format(1,i,i))
print "delete time:\t"+ str(time() - t)

t = time()
for i in xrange(0,n):
    cursor.execute(insertStatement.format(1,i,i,i))
print "next insert time:\t"+ str(time() - t)

此脚本的输出如下所示:

$ python insertDeleteTest.py 
    initial insert time:    0.369267940521
    second insert time:     0.368498086929
    delete time:           10.8632941246
    next insert time:       0.313306808472

有人告诉我为什么列删除与插入相比花了这么长时间?

我的心理模型是插入或删除基本上是相同的东西:一个无实体的列,它被写入提交日志的末尾并被塞进记忆中。在插入的情况下,它包含该列的新值,在删除的情况下,它包含该列的逻辑删除。我的心理模型出了什么问题?

0 个答案:

没有答案