0

これをデバッグする方法についての提案を探しています。

コレクション内のドキュメントの 1 つが大きくなりすぎると、ドキュメント全体がコレクションから削除されます。私はmongoid 2.2.6でherokuを使用し、MongoHQでレール3.0.20を使用しています。ローカルで問題を再現できません。

私たちはこのコードを 2 年前に書き始めましたが、何人かの学生によってゆっくりと維持されています。このサイトは、「投稿」に「コメント」が含まれる基本的なブログ サイトに似ています。最初のデザインでは投稿がバージョン管理され、各投稿にはすべてのコメントが含まれていました。バージョン管理のため、ドキュメントのサイズは急速に大きくなる可能性があります。max_versions 5 でバージョンのサイズを制限しようとしましたが、非常に大きなコメントでも問題を再現できます。サイトが完全に使用できる場合もありますが、(コメントだけでなく) ドキュメント全体が失われているため、解決策を見つけたいと考えています。コメントがドキュメント内でバージョン管理されていることに気付いていたら、投稿の外にコメントを保存するようにデザインを変更していたでしょう。

4

2 に答える 2

0

コメントが言ったように、ドキュメントが大きくなりすぎる可能性があります。しばらくしてから、すべての MongoDB ドライバーはデフォルトで Acknowledged Writes になりました。これにより、ほとんどの場合、ドキュメントを保存または更新できない場合に例外が発生します。最新のドライバー バージョンを使用しているかどうか、および/または Acknowledged Writes がオンになっているかどうかを確認してください (「安全」と呼ばれることもあります)。

最善の策は、スキーマを変更することだと思います。無制限の量のコメントがある場合、ある時点でバージョン管理をしなくても、この問題に遭遇します。または、古いコメントや投稿を別のコレクションに保存することもできます。

于 2013-02-07T23:27:20.197 に答える
0

役立つかもしれないいくつかの情報:

  • ドキュメントが 16MB の制限を超えた場合、サーバーはドキュメントを削除しません。代わりに、エラー (無効なサイズなど) が発生します。

  • 私の知る限りでは、更新操作が失敗した場合にドキュメントを削除するものは、Mongoid にも MongoDB Ruby ドライバーにもありません。

  • アプリケーションがドキュメントを削除し、更新ごとに新しいドキュメントを挿入する場合は、アプリケーションを変更して更新を利用し、エラーが適切に処理されるようにすることをお勧めします。

于 2013-02-07T23:35:59.647 に答える