Python Cassandra删除时间比插入时间慢得多。为什么?
我知道在同一个Cassandra行上发出大量的删除是一种反模式,因为读取()需要花费大量时间。但我也看到,进行删除需要更多数量级的时间 考虑一下这个python脚本,它将多个值添加到同一行,然后再次添加它们,然后一次删除一个值,然后再次添加它们。对于每个活动,时间都被监控并显示在屏幕上Python Cassandra删除时间比插入时间慢得多。为什么?,python,data-structures,cassandra,datamodel,cql3,Python,Data Structures,Cassandra,Datamodel,Cql3,我知道在同一个Cassandra行上发出大量的删除是一种反模式,因为读取()需要花费大量时间。但我也看到,进行删除需要更多数量级的时间 考虑一下这个python脚本,它将多个值添加到同一行,然后再次添加它们,然后一次删除一个值,然后再次添加它们。对于每个活动,时间都被监控并显示在屏幕上 import cql from time import time connection = cql.connect('localhost',cql_version='3.0.0', keyspace='rkg'
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
有人能告诉我为什么列删除比插入要花这么长的时间吗
我的思维模式是插入或删除基本上是一样的:一个无实体的列,被写到commitlog的末尾,然后被推到memtable中。对于insert,它包含该列的新值;对于delete,它包含该列的墓碑。我的心智模型哪里出了问题?我想知道插入是否非常乐观,或者在最终一致性方面是否有很大的权重,而删除将阻止,直到到处都发生删除?尝试设置
跟踪
,这样你就可以分解删除时间,这将提供有关“瓶颈”的更多信息我希望数据路径需要相同的时间长度:正如您所说,删除只是插入。也许delete的解析比较慢:使用prepared语句是否相同?