私は、いくつかのデータベースにまたがる 100 万を超えるエントリを持つ couchDB を持っています。各サンプルのメンバーの記録が得られるように、サンプルをランダムに抽出する必要があります。そのために、この質問に従って、couchDB のすべてのドキュメントに乱数を含むフィールドを追加したいと考えています。
乱数を追加するコード
def add_random_fields():
from numpy.random import rand
server = couchdb.Server()
databases = [database for database in server if not database.startswith('_')]
for database in databases:
print database
for document in server[database]:
if 'results' in server[database][document].keys():
for tweet in server[database][document]['results']:
if 'rand_num' not in tweet.keys():
tweet['rand_num'] = rand()
server[database].save(tweet)
すべての CouchDB データベースのコピーを保持するのに十分な RAM がないため、これは失敗します。
最初の試行 - データベースをチャンクでロード
この質問に続いて。
def grouper(n, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
# ..Just showing relevant part of add_random_fields()
#..
chunk_size=100
for tweet in grouper(server[database][document]['results'],chunk_size):
Python で大きなリストを反復処理する場合は、ジェネレータ式を記述します。couchdb-python でそれを行うにはどうすればよいですか? または、より良い方法はありますか?