什么是处理300万行的pycassa multiget的有效方法

时间:2014-02-06 04:57:31

标签: python cassandra pycassa cassandra-cli cassandra-2.0

我是cassandra的新手。

现在我已经设法让我的代码在一个相对较小的数据集上运行我的问题场景。

然而,当我尝试在100万个rowkeys上执行multiget时,它失败并显示“Retried 6次。上次失败超时:超时”的消息。

例如:colfam.multiget([rowkey1,...........,rowkey_Million])

我试图查询的列系列基本上有100万条记录,每条记录有28列。

这里我在单个ubuntu虚拟机上运行一个双节点cassandra集群,系统配置为

RAM:3GB 处理器:1CPU

那么我如何设法有效地处理如此多的rowkeys上的multiget,然后将其大量插入到另一个cassandra列族中?

提前致谢:):)

1 个答案:

答案 0 :(得分:2)

我也在pycassa mailing list上做了回复(请尽量不要在多个地方发帖),但我会将答案复制给其他看到此内容的人:

multiget对于Cassandra来说是一项非常昂贵的操作。多人游戏中的每一行都需要为Cassandra寻找几个磁盘。 pycassa自动将查询拆分为更小的块,但这仍然非常昂贵。

如果您尝试阅读整个列系列,请改用get_range()

如果您只是尝试读取该列系列中的行的子集(基于某些属性),并且您需要经常这样做,则需要使用不同的数据模型。

由于您是新手,我会花一些时间学习Cassandra中的数据建模:http://wiki.apache.org/cassandra/DataModel。 (注意:这些示例中的大多数将使用CQL3,pycassa不支持。如果您想使用CQL3,请使用新的DataStax python驱动程序:https://github.com/datastax/python-driver