5

アプリにMongoDBを使用することを検討しています。私はMongoDBの初心者です。ユーザーがシステムに対して行った変更、追加/変更された内容、およびいつ変更されたかを追跡する必要があります。oplog には必要なすべてのデータが含まれているように見え、oplog のコピーを別の上限なしコレクションに永続化すると、必要なすべての履歴が得られるように思えました。すぐに取得したり、すぐに利用できる必要はありません。

このアプローチに問題はありますか?このデータを保存する最良の方法を提案できる人はいますか?

4

1 に答える 1

3

このアプローチの問題は、それが非常に低レベルであることです。この情報をアプリケーションの観点から意味のあるところまで復元するのは、非常に面倒です。

たとえば、ユーザーの名前を変更するとします。ユーザー オブジェクトを使用$setしますか、それとも置き換えますか? アプリケーションの観点からは問題ありませんが、oplog はまったく異なって見えます。また、replace を使用している場合、oplog に含まれる情報には、変更だけではなく、新しい状態のみが含まれます。つまり、実際に何が起こっていたのかを理解する唯一の方法は、すべての操作を完全に再生することです (したがって、古い状態と新しい状態が得られます)。

また、oplog には、データベース ユーザーをアプリケーション ユーザーとして使用している場合を除き、どのユーザーがどの操作を実行したかに関する情報は含まれません。

私の意見では、これはアプリケーションによって処理されるべきです。たとえば、Unit of Work パターンを使用できますが、クライアントで断続的にのみ使用する代わりに、Unit of Work (またはその表現) をデータベースに実際にシリアル化したい場合があります。このパターンには名前があると確信していますが、現時点では思い出せません。

于 2013-11-04T21:46:44.087 に答える