2013-02-07 107 views
0

我正在尋找關於如何調試這一個的建議。丟失我的集合中的文檔

當我的文件之一,得到一個集合太大,整個文檔從集合中刪除。我正在使用MongoHQ的mongoid 2.2.6和rails 3.0.20的heroku。我無法在本地重現問題。

我們兩年前開始編寫這些代碼和它是由我的一些學生已經慢慢維持。該網站類似於一個基本的博客網站,其中的「博客」將有「評論」。最初的設計有帖子版本,每篇文章都包含所有的評論。由於版本控制,文檔的大小可以快速增長。我們試圖用max_versions 5來限制版本的大小,但是我們仍然可以通過非常大的評論重現問題。這可能是該網站完全可用的情況,但由於我們放棄了整個文檔(而不僅僅是評論),所以我想尋找解決方案。如果我注意到評論正在文檔中進行版本控制,我會改變設計以在帖子之外存儲評論。

+0

單個MongoDB文檔不能超過16 MB,因此您可以檢查接近該大小的文檔。 http://docs.mongodb.org/manual/reference/limits/#BSON%20Document%20Size – JohnnyHK

+0

您還應該確保在創建和保存文檔時使用安全寫入功能,以便提醒您發生的任何錯誤。 – JohnnyHK

回答

0

正如評論所言,您的文檔很可能會變得太大。一段時間以來,所有的MongoDB驅動程序都默認爲確認寫入,在大多數情況下,如果無法存儲或更新文檔,將會給您一個例外。請檢查您是否使用最近的驅動程序版本和/或啓用了確認寫入(有時也稱爲「安全」)。

我還是覺得你最好的選擇就是改變你的架構。如果您有不受限制的評論數量,那麼即使沒有版本控制,也會遇到此問題。或者,您可以將舊評論和/或帖子存儲在單獨的集合中。

0

信息幾塊,可以幫助:

  • 如果它生長過去的16MB限制,服務器將不刪除該文件;相反會引發錯誤(例如無效的大小)。

  • 據我所知,沒有什麼在Mongoid也不MongoDB的Ruby驅動程序如果更新操作失敗,將刪除該文件。

  • 如果應用程序中刪除的文檔,然後插入一個新的文檔的每一次更新,我會建議修改應用程序利用更新和根本保證任何錯誤都會被妥善處理。