Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cassandra删除时间比插入时间慢得多。为什么?_Python_Data Structures_Cassandra_Datamodel_Cql3 - Fatal编程技术网

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

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'

我知道在同一个Cassandra行上发出大量的删除是一种反模式,因为读取()需要花费大量时间。但我也看到,进行删除需要更多数量级的时间

考虑一下这个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
有人能告诉我为什么列删除比插入要花这么长的时间吗


我的思维模式是插入或删除基本上是一样的:一个无实体的列,被写到commitlog的末尾,然后被推到memtable中。对于insert,它包含该列的新值;对于delete,它包含该列的墓碑。我的心智模型哪里出了问题?

我想知道插入是否非常乐观,或者在最终一致性方面是否有很大的权重,而删除将阻止,直到到处都发生删除?尝试设置
跟踪
,这样你就可以分解删除时间,这将提供有关“瓶颈”的更多信息我希望数据路径需要相同的时间长度:正如您所说,删除只是插入。也许delete的解析比较慢:使用prepared语句是否相同?