問題:MongoDbから一定の日に読んでいたい大量のトランザクションがあります。どのように日の価値を読むことを試みても、私の読書は常にストールします。ストールポイントは常に同じですが、バッチサイズの設定に基づいて変更することができます。Pymongo find()stalls
システム:Linuxのミント、Pythonの:3.5、MongoDBの3.2、PyMongo
コード:= { '$と' "クエリ" の
def write_transactions_to_file(start: datetime, end: datetime, filename: str):
print ("Writing transactions to file")
new_start = start
new_end = new_start + timedelta(hours=1)
with open(filename, 'w') as f:
while new_start < end:
print("Starting hour {}".format(new_start.hour))
query = Builder().find(TimeStamp=Gt(new_start)).And(TimeStamp=Lt(new_end)).query
transactions = find(tx_collection, query)
for c, t in enumerate(transactions):
j = json.dumps(t, default=json_util.default)
f.write("{}\n".format(j))
print("{}:{}".format(c,t))
new_start=new_start+timedelta(hours=1)
new_end = new_start+timedelta(hours=1)
print("Transactions written to file")
def find(self, collection, query):
return collection.find(query).batch_size(25)
値:[{」 TimeStamp ':{' $ lt ':datetime.datetime(2017,10,24,0,0)}}、{' TimeStamp ':{' $ lt ':datetime.datetime(2017,10,24,1,0 )}}]}
試した: 元々、私は一日中質問しました。それは、ストールする前に16kレコードの周りに私を持っていた。私は後でバッチサイズを100に変更しました。それは、ストールする前に〜29kレコードまで私を得ました。次に、クエリを一度に1時間に制限しようとしました。あまりにも、(常に同じ場所)屋台。しかし、それが停止する点は、バッチサイズに基づいて異なります。
「タイムスタンプ」フィールドにインデックスがありますか? –
これは複合インデックスの一部ですが、スタンドアローンではありません。 – SteveJ