好吧,我在Mongodb中開發的越來越多,我開始想知道需要多個集合還是有一個帶索引的大集合(因爲每個文檔的列和字段可能與表格數據不同)。如果我試圖以最有效的方式開發(意味着更少的代碼和可重複使用的代碼),那麼我可以爲所有文檔使用一個集合,並且只需在一個字段上索引。通過將索引中的所有文檔放在一個集合中,我可以重新使用所有表單處理代碼和其他代碼,因爲它將全部插入到同一個集合中。MongoDB - 使用索引的一個集合
例如:
可以說我正在開發一個聯繫人管理器,我有兩種類型的聯繫人「個人」和「企業」。我最初的想法是創建一個名爲個人的集合,第二個集合稱爲企業。但那是因爲我習慣於在sql中進行開發,因爲這將是合適的,因爲每個表的列都是不同的。我越是開始思考文檔dbs的靈活性,我開始思考得越多,「我真的需要兩個集合嗎?」如果我只是將一個字段添加到每個稱爲「聯繫類型」和索引的文檔,我是否真的需要兩個集合?由於每個文檔中的字段/列不一定全部相同(比如在sql中),因此每個文檔都可以有自己的字段,只要我有一個「文檔類型」字段和該字段的索引即可。
那麼我接下這個概念,並開始思考,如果我只需要一個「個人」和「企業」集合,那麼我甚至需要爲「用戶」或「聯繫歷史記錄」或任何其他數據單獨收集。理論上,我無法在一次收集中構建整個解決方案,並且每個文檔中都有一個字段,用於指定「類型」和索引,如「用戶」,「個人聯繫人」,「業務聯繫人」,「聯繫人歷史記錄「等,如果它是一個文件相關的另一個文件,我可以在」父鍵/外部「Id字段索引...
這將允許我動態地編碼前端,因爲表單處理代碼會都是相同的(插入到同一個集合中)。這樣可以節省很多編碼,但是我想通過使用索引和二級索引來確保數據庫仍然能夠快速運行,並且隨着集合的增長不會導致未來的問題。正如你可以想象的那樣,如果一切都在一個集合中,隨着用戶基數的增長,這個集合中可能會有成千上萬甚至上百萬的文檔,但它會有索引和二級索引來優化性能。
我的問題是:這是mongodb開發人員使用的常用方法嗎?爲什麼或者爲什麼不?什麼是垮臺,如果有的話?如果這是一種常用的方法,請給出任何肯定使用這種方法。謝謝。
是的,我會有多個用戶,但即使如此,我是否需要多個集合,如果我只索引集合名稱和用戶ID,然後減少/過濾用戶的會話ID結果。那麼我仍然只使用一個集合? – user982853 2012-03-04 18:15:07
我知道cassandra是關於反規範化的,但其他許多實際上與SQL沒有任何不同(在這方面)。面向文檔的數據庫實際上只是組織數據庫的一種不同方式。當涉及到關係模式時,mongo也是非常寬容的 – kelloti 2012-03-04 18:29:07