Python 卡桑德拉最快的插入方式

Python 卡桑德拉最快的插入方式,python,performance,cassandra,insert,cassandra-3.0,Python,Performance,Cassandra,Insert,Cassandra 3.0,我已经在Cassandra上工作了好几天,以找到将数据插入Cassandra的最快、最有效的方法。有些人不建议使用批处理: 我尝试过批处理,速度非常快,大约25k insert/s,但我发现了一些问题,如: 错误:批处理语句不能包含超过65535条cassandra语句 另外,我发现有丢失的数据。。。我真的不知道为什么 我还尝试了prepare语句和execute_async,如下所示: query = "INSERT INTO leaks (value0, value1, value2, va

我已经在Cassandra上工作了好几天,以找到将数据插入Cassandra的最快、最有效的方法。有些人不建议使用批处理:

我尝试过批处理,速度非常快,大约25k insert/s,但我发现了一些问题,如:

错误:批处理语句不能包含超过65535条cassandra语句

另外,我发现有丢失的数据。。。我真的不知道为什么

我还尝试了prepare语句和execute_async,如下所示:

query = "INSERT INTO leaks (value0, value1, value2, value3, value4) VALUES (?, ?, ?, ?, ?)"
prepared = session.prepare(query)

for row in data:
    try:
        session.execute_async(prepared, (cassandra.util.uuid_from_time(value0, value1, value2, value3, value4))
    except Exception as e:  
        print "An error occured : " + str(e)
        pass
使用这段代码,我有大约3-4k insert/s。我想知道人们通过插入数据得到了多少


我有3个节点,每个节点有6个cpu和32gb的ram。我还将commitlog设置到另一个磁盘。

批量插入数据并没有那么糟糕。但您试图在一个批次中插入超过批次限制的65k条记录。记住cassandra没有关系数据库意义上的事务

另外,拥有大量的批和具有许多不同分区键的批也是一个坏主意。单个批处理由单个协调员处理,以进行更改。如果您的批处理恰好包含一个分区键(而不是整个主键!),那么您很幸运,因为所选择的协调器可能是一个持有该分区的节点,从而加快了速度

如果批处理包含不同的分区键,这会给协调器节点带来更多的处理压力(幸运的是,需要所有节点)。在并行批处理上发生这种情况时,您的集群将处于繁忙状态

通常情况下,为匹配的分区键和非常小的批大小(我每批使用100行)对批进行分组会更快,但您应该自己尝试找到理想的批大小。而不是对这些批使用异步查询()。这样,您将在所有节点上并行运行许多小批处理


我可以在一个15节点集群上每秒归档120k个插入,每行大约8k负载,这几乎是网络链接速度(~800MBit/s)。

批量插入数据并没有那么糟糕。但您试图在一个批次中插入超过批次限制的65k条记录。记住cassandra没有关系数据库意义上的事务

另外,拥有大量的批和具有许多不同分区键的批也是一个坏主意。单个批处理由单个协调员处理,以进行更改。如果您的批处理恰好包含一个分区键(而不是整个主键!),那么您很幸运,因为所选择的协调器可能是一个持有该分区的节点,从而加快了速度

如果批处理包含不同的分区键,这会给协调器节点带来更多的处理压力(幸运的是,需要所有节点)。在并行批处理上发生这种情况时,您的集群将处于繁忙状态

通常情况下,为匹配的分区键和非常小的批大小(我每批使用100行)对批进行分组会更快,但您应该自己尝试找到理想的批大小。而不是对这些批使用异步查询()。这样,您将在所有节点上并行运行许多小批处理


我可以在一个15节点集群上每秒归档约120k个插入,每行约8k有效负载,这几乎等于网络链接速度(~800MBit/s)。

此测试的目标是什么?尝试使用火花加工插入,它可以轻松地将插入速度提高到100K/秒以上。批量不是优化插入的方法@迪尔辛基,我不知道火花。也许我应该看看!亚历克斯,我也是这么想的。这次考试的目的是什么?尝试使用火花加工插入,它可以轻松地将插入速度提高到100K/秒以上。批量不是优化插入的方法@迪尔辛基,我不知道火花。也许我应该看看!Alex,我就是这么想的。这很有趣,我试过每批10行。但他似乎只是插入了一半的数据,我不知道为什么。我将使用批处理重试,并查看他为什么只是插入半成品,如果这是可复制的,请查看您的节点:磁盘利用率、cpu利用率和日志中的错误。你的硬件设置是什么?
nodetool tpstats
的输出是什么?这非常有趣,我尝试了每批10行的批处理。但他似乎只是插入了一半的数据,我不知道为什么。我将使用批处理重试,并查看他为什么只是插入半成品,如果这是可复制的,请查看您的节点:磁盘利用率、cpu利用率和日志中的错误。你的硬件设置是什么?
nodetool tpstats
的输出是什么?