生成されたオブジェクト ID が、今後挿入されるすべてのレコードに対して一意であると期待できますか? (リピートできるかどうかは疑問)
MongoDB Java ドライバーを使用しています。オブジェクト ID を自分で生成するのが良いですか、それともドライバーまたは MongoDB 自体から生成されたものを使用するのが良いですか?
ドキュメントのオブジェクト ID を指定しない場合、mongo が自動的に生成します。すべてのドキュメントには必ず _id が必要です。関連リファレンスはこちらです。
The relevant part is
ObjectId is a 12-byte BSON type, constructed using:
a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.
http://docs.mongodb.org/manual/reference/object-id/
これは十分なランダム化だと思います(ただし、日付/時刻が単調に増加するため、ハッシュの選択は不十分です)
各挿入の前に列の特定の値を検索すると、何千ものレコードがあるはずなので、アプリケーションのパフォーマンスが心配です。この検証を行う最善の方法は何ですか?
最初にフィールドにインデックスを付けます (mongodb には列がありません。2 つのドキュメントが異なるフィールドを持つことができます)。
db.collection_name.ensureIndex({fieldName : 1})
最後に挿入されたドキュメントを取得して、最後に処理された情報 ID を見つける最良の方法は何ですか?
楽しい事実。一度使用してからドキュメントを削除する場合は、info id フィールドは必要ありません。_id フィールドは日付ごとにソートされます。ただし、ドキュメントが定期的に更新される場合は、検索および変更操作でドキュメントをアトミックに変更する必要があります。
http://api.mongodb.org/java/2.6/com/mongodb/DBCollection.html#findAndModify%28com.mongodb.DBObject,%20com.mongodb.DBObject,%20com.mongodb.DBObject,%20boolean,%20com. mongodb.DBObject、%20ブール値、%20ブール値%29
これで、最後に挿入/変更されたドキュメントの日付が更新されました。このフィールドがインデックス化されていることを確認してください。上記のリンクを使用して、並べ替えパラメーターを探し、それを入力します
new BasicDbObject().put("infoId", -1); //-1 is for descending order.
挿入を行うときに2つの書き込みについて話している場所がいくつかありました。1つはドキュメントをコレクションに書き込み、もう1つは最後に挿入されたエントリを追跡するために最終更新として別のコレクションに書き込みます。これは良い方法ですか?通常、リレーショナル データベースではこれを行いません。
ひどいアイデア!ようこそモンゴへ。あなたはこれよりもうまくやることができます。