ストリーミング API からデータを収集しており、リアルタイム分析ダッシュボードを作成したいと考えています。このダッシュボードには、1 時間あたりのドキュメント数をプロットする単純な時系列が表示されます。私の現在のアプローチが最適かどうか疑問に思っています。
次の例では、ストリーム内の新しいドキュメントごとに on_data が起動されます。
# Mongo collections.
records = db.records
stats = db.records.statistics
on_data(self, data):
# Create a json document from data.
document = simplejson.loads(data)
# Insert the new document into records.
records.insert(document)
# Update a counter in records.statistics for the hour this document belongs to.
stats.update({ 'hour': document['hour'] }, { '$inc': { document['hour']: 1 } }, upsert=True)
上記の作品。1 時間あたりのドキュメント数を示す美しいグラフが表示されます。私の質問は、このアプローチが最適かどうかについてです。ドキュメントごとに 2 つの Mongo リクエストを作成しています。1 つ目はドキュメントを挿入し、2 つ目はカウンターを更新します。ストリームは、1 秒あたり約 10 個の新しいドキュメントを送信します。
たとえば、mongo に db.records.statistics を RAM に保持するように指示する方法はありますか? これにより、サーバーのディスクアクセスが大幅に削減されると思います。