どうやっていけばいいですか?すべてのキー、および、最適化処理を行っていCassandraカラムのファミリー pycassa?
質問
自分で言うのも何ですが、この経験 pycassa 私は間違いです。どうやっていけばいいですか?すべてのキーはその中に保存されたデータベース?
でもこの小さなスニペットをあらかじめ与えておく必要があり、キーを取得するための関連する列(ここではキーが'foo'および'bar')は、がんの要件を全て取得しますキー(キー)を一度としてPythonのリストまたは類似のデータ構造です。
cf.multiget(['foo', 'bar'])
{'foo': {'column1': 'val2'}, 'bar': {'column1': 'val3', 'column2': 'val4'}}
感謝。
解決
他のヒント
あなたは試すことができます:cf.get_range(column_count=0,filter_empty=False)
を。
# Since get_range() returns a generator - print only the keys.
for value in cf.get_range(column_count=0,filter_empty=False):
print value[0]
get_range([start][, finish][, columns][, column_start][, column_finish][, column_reversed][, column_count][, row_count][, include_timestamp][, super_column][, read_consistency_level][, buffer_size])
の行の上にイテレータを取得します。 キー範囲を指定します。
Santhoshのソリューションにマイナーな改善
dict(cf.get_range(column_count=0,filter_empty=False)).keys()
あなたは順序を気にした場合:
OrderedDict(cf.get_range(column_count=0,filter_empty=False)).keys()
get_rangeは、ジェネレータを返します。私たちは、発電機からのdictを作成し、そこからキーを取得することができます。
row_keyにCOLUMN_COUNT = 0の限界をもたらします。これらの結果は何の列を持っていないので、しかし、我々はまた、filter_emptyを必要とします。
filter_empty = Falseのは、私たちは結果を取得できるようになります。しかし、空の行や範囲の幽霊は現在、私たちの結果に含まれることができる。
私たちは、最初の列が空の行を解決し、幽霊を範囲であろう取得、より多くのオーバーヘッドを気にしない場合ます。
dict(cf.get_range(column_count=1)).keys()
が問題と Santhoshの や kzarns' 回答としてだけをメモリ可能性の大きな辞書名またを設定すると直ちに廃棄.より良い方法が用リスト理解のための本:
keys = [c[0] for c in cf.get_range(column_count=0, filter_empty=False)]
これを繰り返して調べての発電機で返される get_range
, にキーメモリおよび店舗の一覧です。
場合は、キーのリストがも潜在的に大きすぎるので一度にメモリとする必要があるのに対して繰り返し処理を実行するには、一度作成しましょう ジェネレータ式の代わりにリストの理解:
kgen = (c[0] for c in cf.get_range(column_count=0, filter_empty=False))
# you can iterate over kgen, but do not treat it as a list, it isn't!