我是 cassandra 的新手。
现在,我已经成功地让我的代码在相对较小的数据集上适用于我的问题场景。
但是,当我尝试对 100 万个行键执行多重获取时,它失败并显示消息“重试 6 次。上次失败超时:超时”。
例如:colfam.multiget([rowkey1,...........,rowkey_Million])
基本上,我尝试查询的列族有 100 万条记录,每条记录有 28 列。
这里,我在单个 ubuntu 虚拟机上运行 2 节点 cassandra 集群,系统配置为
内存:3GB 处理器:1CPU
那么我如何有效地处理如此多的行键上的多重获取,然后将其批量插入到另一个 cassandra 列族中?
提前致谢:):)
最佳答案
我在 pycassa mailing list 上对此做出了回应同样(请尽量不要在多个地方发布),但我会将答案复制给其他看到此内容的人:
multiget 对于 Cassandra 来说是一个非常昂贵的操作。 Multiget 中的每一行可能需要 Cassandra 进行几次磁盘查找。 pycassa 自动将查询分割成更小的 block ,但这仍然非常昂贵。
如果您尝试读取整个列族,请使用 get_range()
。
如果您只是尝试读取该列族中的行子集(基于某些属性)并且需要经常执行此操作,则需要使用不同的数据模型。
由于您是新手,我会花一些时间学习 Cassandra 中的数据建模:http://wiki.apache.org/cassandra/DataModel 。 (注意:这些示例中的大多数将使用 CQL3,而 pycassa 不支持 CQL3。如果您想使用 CQL3,请使用新的 DataStax python 驱动程序:https://github.com/datastax/python-driver)
关于python - 处理 100 万行键的 pycassa multiget 的有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594345/