MongoDB的操作因素和資料模型

2021-09-05 06:56:48 字數 2445 閱讀 2856

mongodb的建模應用程式資料取決於資料本身,也跟mongodb的特性有關。比如,不同的資料模型可能提高應用程式的查詢效率,提高插入和更新操作的吞吐量,讓分片集群更有效的提高分發效率。

這些處理或記錄需求的因素,出現在應用程式以外,但是會影響以mongodb為資料庫的應用。當建立資料模型時,在下述場景下需要考慮應用程式的讀操作和寫操作。

文件增長

更新文件可能會導致文件大小的增加,這些更新包括新增元素到陣列,新增新字段到文件中等等。如果文件增長的大小打到了文件允許的最大大小,mongodb會重新分配磁碟上的文件。重新分配文件會占用比更新文件更長的時間,並且可能會導致文件碎片。儘管mongodb自動填充文件分配來將重新分配的可能性最小化,但資料建模時應盡可能避免文件增長。

例如,如果你的應用程式更新會增加文件大小,你應該重構資料模型,在不同文件之間使用引用而不是使用非規範化的資料模型(embeded data model)。

mongodb的自適應調整有利於減少資料的遷移,你可能想要使用一種預分配的模式避免文件的增長。

原子性

在mongodb中,文件級別的操作都是原子性的,沒有乙個寫操作可以自動影響到多個文件或多個集合。在乙個集合中修改多個文件時,需要在每個文件上都操作一次。為確保應用程式在乙個文件中儲存儲存所有原子性需求的字段,如果應用程式能夠容忍非原子性兩塊資料的更新,你可以這些資料儲存在不同的文件中。

使用嵌入式資料模型有利於在乙個文件中完成這些原子操作。對於那些將相關資料通過引用模式儲存的資料模型,應用程式必須通過不同的讀和寫操作來完成查詢和修改這些相關的資料。

分片

mongodb通過分片提供水平擴充套件。這些集群支援部署大資料集合和高通量操作。分片允許使用者將資料庫中的乙個集合分割成多個mongod例項或分片的多個文件集合。

mongodb使用分片關鍵字來分發資料和訪問量。選擇合適的分片關鍵字可以提高程式的效能,並且能夠啟動或關閉查詢隔離來提高程式的寫效能,所以,一定要仔細考慮好分片的字段。

索引

使用索引能夠提高普通的查詢效能。索引經常建立在頻繁使用查詢並且在所有的操作中返回排序的資料。mongodb會在_id欄位上建立索引。

mongodb使用索引時,需要考慮以下場景:

(1)每個索引需要至少8kb的資料空間。

(2)新增索引會影響寫操作的效能。對於那些高速讀寫的操作,在每次插入或更新時索引的更新代價是高昂的。

(3)高讀寫的集合通常受益於額外的索引,索引不會影響沒加索引的讀操作。

(4)活動狀態下,索引會占用磁碟的硬碟和記憶體。這種占用是很費資源的,應該監控系統的規劃容量,尤其是工作集的大小。

大資料集合

在某些情況下,可能會考慮將相關的資料儲存在幾個不同的集合裡,而不是在乙個集合中儲存。

考慮一下logs集合用來儲存不同的環境變數和應用程式的情形,logs集合由以下型別的表單組成:

如果文件的數量太少的話,你可能會按照型別去為文件分組。對於logs來說,考慮維護不同的日誌的集合,比如logs_dev和logs_debug。logs_dev集合只會包含開發環境有關的文件。

一般來說,大量的資料集合不會有顯著的效能影響,仍然是高效能的。不同的集合對於高通量的集合是非常重要的。

當模型中有大量集合時,需要考慮以下場景:

(1)每個集合都有最少的幾kb的開銷。

(2)每個索引,包括_id上的索引,都需要至少8kb的資料空間。

(3)對每個資料庫而言,每個命名空間(.ns檔案)儲存了資料的所有元資料。並且每個索引和集合有自己條目的命名空間。mongodb的命名空間檔案的大小是有限制的(不能超過2047mb)。

(4)mongodb限制命名空間的數量(命名空間的大小除以628)。如果想要知道當前命名空間的序號以便於知道還有多少可以使用命名空間,在mongo shell中執行以下命令即可:

db.system.namespaces.count()

命名空間的大小取決於.ns檔案的大小,預設的命名空間的大小是16mb。

要改變命名空間檔案的大小,在啟動server時加入如下引數即可:

--nssize

對於已經存在的資料庫,使用-nssize引數啟動server後,執行以下命令即可。

db.repairdatabase()

資料生命週期管理

資料建模也應該把資料生命週期管理考慮在內。

所有的文件集合在使用一段時間後都會過期,如果應用程式需要儲存一些資料在資料庫中一段時間,考慮使用ttl(time to live)特性。

MongoDB的操作因素和資料模型

mongodb的建模應用程式資料取決於資料本身,也跟mongodb的特性有關。比如,不同的資料模型可能提高應用程式的查詢效率,提高插入和更新操作的吞吐量,讓分片集群更有效的提高分發效率。這些處理或記錄需求的因素,出現在應用程式以外,但是會影響以mongodb為資料庫的應用。當建立資料模型時,在下述場...

mongodb的故障轉移和資料冗餘

mongodb提供了兩種方式的資料冗餘方式 1 主從複製 mongodb 允許有乙個主節點和多個從節點 從節點從主節點複製同步資料 主節點會儲存乙個oplog集合的操作記錄,這個集合儲存了對資料庫的寫入操作順序歷史記錄。從節點負責從該集合複製資料。由於該集合是固定長度的,所以當從節點的狀態遠落後於主...

檔案和資料的操作

檔案的開啟和關閉 開啟模式中,r w x a 可以和 b t 組合使用,形成既表達讀寫又表達檔案模式的方式。檔案使用結束後要用close 方法關閉,釋放檔案占用的記憶體 檔案的讀寫 with open 路徑 r as txt print txt.read txt.close with open 路徑...