1

我是卡桑德拉的新手。

现在我已经设法让我的代码在相对较小的数据集上为我的问题场景工作。

但是,当我尝试在 100 万行键上执行 multiget 时,它会失败并显示一条消息“重试 6 次。上次失败是超时:超时”。

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

基本上我要查询的列族有 100 万条记录,每条记录有 28 列。

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

内存:3GB 处理器:1CPU

那么我如何有效地处理这么多行键上的 multiget,然后将相同的批量插入到另一个 cassandra 列族中?

提前致谢 :) :)

4

1 回答 1

2

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

multiget 对 Cassandra 来说是一项非常昂贵的操作。multiget 中的每一行都可能需要对 Cassandra 进行几次磁盘寻道。pycassa 自动将查询分成更小的块,但这仍然非常昂贵。

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

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

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

于 2014-02-06T18:29:42.953 回答