「イベント ストア」という用語を使用しているため、私はよく知りませんが、質問のいくつかの問題に対処できます。少し注意して、MongoDB を必要に応じて使用することはおそらく合理的だと思います。
MongoDB では、各ドキュメントには_id
、デフォルトでObjectId
フォーマットされているフィールドがあり、サーバー識別子、タイムスタンプ、シーケンス カウンターで構成されます。ObjectId
したがって、そのフィールドで並べ替えると、オブジェクトがすべて同じマシンで作成されている場合、オブジェクトを作成順に取得できます。
ほとんどの MongoDB クライアント ドライバーは_id
、挿入コマンドをデータベースに送信する前にフィールドをローカルに作成します。したがって、複数のクライアントがデータベースに接続している_id
場合、最初にサーバーハッシュでソートされるため、ソートは希望どおりにはなりませんが、これは望んでいるものではありません。
ただし、MongoDB クライアント ドライバーに挿入コマンドに を含めないように説得できれば_id
、サーバーは各ドキュメントの ObjectId を生成し、必要なプロパティを取得します。各言語には独自のクライアント ドライバーがあるため、これを行う方法は作業している言語によって異なります。ドライバーのドキュメントを注意深く読むか、ソース コードに飛び込んでください。これらはすべてオープン ソースです。ほとんどのドライバーには、生のコマンドをサーバーに送信する方法も含まれています。したがって、insert
手動でコマンドを作成すると、これにより、必要なことを確実に行うことができます。
システムが非常に大規模で、単一のデータベース サーバーがすべての書き込みトラフィックを処理できない場合、これは機能しなくなります。毎秒数千のレコードを書き込む必要がある場合の MongoDB ソリューションは、シャード データベースをセットアップすることです。この場合、ObjectIds は別のマシンによって再び作成され、必要な優れた並べ替えプロパティがありません。書き込み用に 1 台のサーバーを拡張することを懸念している場合は、分散シーケンス番号を提供する別のテクノロジを検討する必要があります。