我有一个包含少量行 (< 100) 的 cassandra 集群。每行有大约 200 万列。我需要得到一整行(所有 200 万列),但在我完成阅读之前,所有地方都开始失败。我想进行某种缓冲读取。
理想情况下,我想使用 Pycassa 做这样的事情(不,这不是调用 get
的正确方法,只是为了让您明白这个想法):
results = {}
start = 0
while True:
# Fetch blocks of size 500
buffer = column_family.get(key, column_offset=start, column_count=500)
if len(buffer) == 0:
break
# Merge these results into the main one
results.update(buffer)
# Update the offset
start += len(buffer)
Pycassa(以及扩展名 Cassandra)不允许您这样做。相反,您需要为 column_start
和 column_finish
指定列 name。这是一个问题,因为我实际上并不知道开始或结束列名是什么。特殊值 ""
可以指示行的开始或结束,但这对中间的任何值都不起作用。
那么我怎样才能完成对一行中所有列的缓冲读取呢?谢谢。
最佳答案
看起来你可以使用类似下面的[伪代码]:
results = {}
start = 0
startColumn = ""
while True:
# Fetch blocks of size 500
buffer = get(key, column_start=startColumn, column_finish="", column_count=100)
# iterate returned values.
# set startColumn == previous column_finish.
请记住,在每次后续调用中,您只会返回 99 个结果,因为它还会返回您已经看到的 startColumn。我对 Python 还不够熟练,无法迭代缓冲区以提取列名。
关于python - Cassandra 缓冲读取数百万列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759370/