2013-06-05 123 views
2

所以我們有一個系統,這個系統把大量的數據寫入日誌DB。只有在出現問題時纔會讀取這些數據,其餘時間僅供參考。我應該使用MongoDB嗎?

目前這款數據存儲在SQL Server數據庫中的結構如下:

  • 寫入「」 DB
  • 定期這個歸檔關進一個單獨的DB
  • 數據數據保存7天
  • 當前高達100G的數據每天寫入SQL數據
  • 數據很簡單,沒有聯接等只是平面數據鏈接外鍵

所以我想這會是更efficently存儲在NoSQL的系統,如MongoDB

據我所看到的,從閱讀幾篇文章(herehere例如)這具有以下優點

  • 水平擴展
  • 快速寫入
  • 適合
  • 不關心讀取性能數據的非結構化性質,只寫性能和空間

所以我的問題(一個或多個)主要是這不適合我們覺得呢?

Particuarly

  1. 不蒙戈走盤的比較SQL等同於更多或更少的空間?
  2. 刪除或多或少的效率比SQL?
  3. 隨着水平縮放,這是否使用大量的網絡流量?
+0

1.是的,它可能需要更多,2.大約相同,3.只有當你有一個錯誤的分片鍵,複製可以使用相當數量,但這是複製,如果你不想要耐久性,然後減去 – Sammaye

回答

2

從我的經驗來看,Mongo確實可以寫入,但它並不壯觀。在之前的工作中,我們的生產實例在寫入方面比在讀取方面困難得多。

Mongo是非常積極分配文件在磁盤上。閱讀本文:http://docs.mongodb.org/manual/faq/storage/#why-are-the-files-in-my-data-directory-larger-than-the-data-in-my-database

即使數據庫爲空,Mongo也一次試圖抓取2GB。

根據我的經驗,我發現刪除效率非常高。沒有真正的投訴,但我們再次沒有刪除大量數據。

從我的經驗來看,水平縮放相當健談,但它必須是複製數據。要閱讀的內容是使用副本集或使用分片之間的區別。複製模型/網絡活動在兩者之間非常不同。

我們使用Mongo主要是爲了高效讀取,它確實做得很好。

+0

這是很好的知道。我的印象是,寫入速度更快,預先分配空間可能會成爲一個交易殺手。謝謝! – Liam

+0

「即使你的數據庫是空的,Mongo最終也會試圖搶佔2GB。」真?當它感覺需要時,它應該只分配2GB的範圍「即使數據庫爲空,Mongo試圖一次抓取2GB。」複製不分片,你的意思是平衡嗎?如果是這樣,你可能有一個不好的分片鍵。 – Sammaye

+0

這是我的經驗。從鏈接中:「在數據目錄中,MongoDB預先將數據文件分配到一個特定的大小,部分是爲了防止文件系統碎片.MongoDB命名第一個數據文件 .0,下一個 .1等。 mongod分配的第一個文件是64兆字節,接下來的128兆字節等等,最高可達2千兆字節,此時所有後續文件都是2千兆字節,數據文件包含具有分配空間但不包含數據的文件。 1千兆字節的數據文件,可能是90%空 – ryan1234

1

如果你正在存儲日誌數據,爲什麼不使用Logstash? Logstash使用Elasticsearch作爲存儲,寫入和查詢速度都非常快,而且它的擴展性也很好。與http://kibana.org/結合使用Logstash,你已經擁有了自己的個人日誌分析和查詢儀表板。

MongoDB也不錯。一些非常好的日誌記錄和例外應用程序,如Errbit使用MongoDB作爲後端。

當使用mongodb進行有力的日誌記錄時,它有助於將數據從ur應用程序發送到udp端口上的中間件,然後寫入mongo。這種方式幾乎等待寫入發生。優點是,當udp端口接收到數據並讓您的應用程序恢復時,中間件可以安全寫入mongo,從而確保日誌完整性得以保持。

+0

不是沒有質量控制的UDP,這意味着您仍然可能會丟失數據,更具體地說是寫入數據?如果你想要類似的東西,爲什麼不用'0'來寫MongoDB呢?它將從應用程序結束時有相同的丟失機會 – Sammaye

+0

是的。但速度更快,因此最適合快速記錄和發送消息。通過運行在sam機器上的UDP應用發送失敗的機率非常低。 – priyolahiri

+0

是的,但寫關注'0'的情況也是如此,但它的速度要快得多,但正如某些人所說的那樣,「就像寫給'/ dev/null'」一樣,機器在同一臺機器上丟失數據雖然不夠,但對人們來說還不夠 – Sammaye