3

行数が少ない (< 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。開始列名または終了列名が実際にどうなるかわからないため、これは問題です。特別な値""は、行の開始または終了を示すことができますが、中間の値では機能しません。

では、1 行のすべての列のバッファリングされた読み取りを実行するにはどうすればよいでしょうか? ありがとう。

4

2 に答える 2

4

pycassa 1.0.8 ドキュメントから

次の [疑似コード] のようなものを使用できるようです。

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 のスキルが十分ではなく、バッファーを反復処理して列名を抽出することはできません。

于 2011-04-23T01:55:27.203 に答える
2

pycassa の v1.7.1+ では、xget を使用して 2**63-1 列の幅の行を取得できます。

for col in cf.xget(key, column_count=2**63-1):
    # do something with the column.
于 2013-01-17T14:28:21.243 に答える