MongoDB是什麼以及它如何滿足您的應用需求
導讀 | NoSQL資料儲存讓資料管理方式更加靈活,徹底改變了軟體開發的狀況。MongoDB是知名的NoSQL解決方案之一,這是一種面向文件的資料儲存系統。本文探討MongoDB是什麼以及它如何滿足您的應用需求。 |
關聯式資料庫將資訊儲存在嚴格監管的表和列中。MongoDB是一種文件儲存系統,將資訊儲存在集合和文件中。這裡的主要區別在於集合和文件是非結構化的,有時稱為無模式。這意味著MongoDB例項(集合和文件)的結構不是預定義的,可靈活適應放入其中的任何資料。
文件是一個鍵值集,其行為與JavaScript等程式碼中的物件非常相似:它的結構根據放入其中的資料而變化。這使得針對MongoDB等資料儲存系統進行程式設計比針對關係資料儲存系統進行程式設計來得更容易、更靈活。簡而言之,應用程式程式碼和文件資料儲存系統之間的互動感覺更自然。
圖1直觀地顯示了MongoDB資料庫、集合和文件的結構。
這種型別的資料建模繼承的靈活性意味著可以在更加按需使用的基礎上處理資料,從而實現此處所述的效能優勢。
想具體瞭解這種差異,不妨比較以下兩種實現相同任務(建立記錄,然後從應用程式新增欄位)的方法,先用關聯式資料庫,之後用MongoDB。
關聯式資料庫中的步驟:
# create a database: CREATE DATABASE menagerie; # create a table in the database: USE menagerie; CREATE TABLE pet (name VARCHAR(20)); # connect to the database in app and issue insert: INSERT INTO pet (name) VALUES ('Friar Tuck'); # add a column: ALTER TABLE pet ADD type VARCHAR(20)); # update existing record: UPDATE pet SET type = 'cat' WHERE name = 'Friar Tuck'
現在用MongoDB執行同樣的過程:
# connect to the database in app and issue insert: use menagerie; db.pet.insertOne({name:"friar tuck"}); # issue update: db.pet.updateOne({ name:'friar tuck' }, { $set:{ type: 'cat' } } );
從前面您可以瞭解使用MongoDB的開發體驗有多流暢。
這種靈活性當然將避免模式臃腫的負擔加在了開發人員的身上。駕馭大型應用程式的文件結構至關重要。
關係型資料庫中有主鍵這個概念,這通常是一個合成ID列(也就是說,與業務資料無關的生成值)。在MongoDB中,每個文件都有一個用途相似的_id欄位。如果開發人員在建立文件時沒有提供 ID,MongoDB引擎將自動生成一個ID(作為 UUID)。
與主鍵一樣,_id 欄位自動索引,而且必須是唯一的。
MongoDB中的索引其行為類似關聯式資料庫中的索引:它建立有關文件欄位的額外資料,以加快依賴該欄位的查詢。MongoDB使用 B 樹索引。
可以使用如下語法建立索引:
db.pet.createIndex( { name: 1 } )
引數中的整數表示索引是升序(1) 還是降序(-1)。
MongoDB面向文件結構的一個強大方面是文件可以巢狀。比如說,您可以建立巢狀文件,而不是建立另一個表來儲存寵物文件的地址資訊,結構如程式碼片段1所示。
程式碼片段1. 巢狀文件示例
{ "_id": "5cf0029caff5056591b0ce7d", "name": "Friar Tuck", "address": { "street": "Feline Lane", "city": "Big Sur", "state": "CA", "zip": "93920" }, "type": "cat" }
MongoDB等文件儲存系統對連線的支援有限,也沒有外來鍵的概念。兩者都是資料結構動態特性的結果。MongoDB中的資料建模傾向於非規範化,即複製文件中的資料,而不是將資料嚴格儲存在表孤島中。這提高了查詢速度,不過以增加資料一致性維護為代價。
非規範化不是必需的,在使用面向文件的資料庫時更多地是一種傾向。這是由於處理複雜巢狀記錄的能力得到了提高,而不是SQL傾向於將資料規範化到特定的單值列中。
MongoDB中的查詢語言面向JSON,就像文件結構一樣。這有助於一種非常強大的表示式語法,甚至可以處理複雜的巢狀文件。
比如說,您可以透過執行db.pet.find({ "type" : "cat" })來查詢收錄所有貓咪的理論資料庫,或使用db.pet.find({ "type" : "cat" , "address.state": "CA" })來查詢加利福尼亞州的所有貓咪。請注意,查詢語言遍歷巢狀的地址文件。
MongoDB的alter語法也使用類似JSON的格式,其中$set關鍵字表明將更改哪個欄位、更改為什麼值。set物件透過點表示法支援巢狀文件,如代表片段2所示,可以在其中更改名為“Friar Tuck”的那隻貓的郵政編碼。
程式碼片段2. 更新巢狀文件
db.people.update( { "type": "cat", "name": "Friar Tuck" }, { $set: { "address.zip": "86004" } } )
可以從程式碼片段2中看到,更新語法與SQL對應語法一樣強大,實際上更強大。
MongoDB為可擴充套件性和分散式部署而設計。它完全能夠處理大規模工作負載。
MongoDB公司在MongoDB Atlas中提供了多雲資料庫叢集解決方案。MongoDB Atlas就像一個託管資料庫,可以橫跨不同的雲平臺,包括監控和容錯等企業功能。
不難看出MongoDB的重要性,因此AWS的Amazon DocumentDB產品將MongoDB相容性作為主要賣點。微軟的Azure Cosmos DB遵循類似的模式,支援MongoDB API。
MongoDB支援副本集以實現高可用性。核心思想是將資料一次寫入主例項,然後複製到二級儲存以便讀取。在此處()可瞭解有關MongoDB中複製的更多資訊。
結論是,MongoDB是一種領先的 NoSQL 解決方案,兌現了靈活模式資料儲存系統的承諾。可使用面向幾乎各種程式語言的高階驅動程式,您也可以利用眾多部署選項。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2783659/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 什麼是MongoDB,它的優勢和不足以及適用場景是什麼?MongoDB
- [譯] 互聯汽車是什麼以及如何開發用於它的應用?
- 滿足日常需求的應用(五):影片編輯器
- 什麼樣的IT架構滿足大資料應用需要?架構大資料
- 滿足使用者需求的優秀軟體的關鍵是什麼 - macerubMac
- 你的應用應該如何收費?它的價值是什麼?
- php-fpm是什麼, 以及它的演化PHP
- 什麼樣的ERP軟體才能滿足貿易公司發展需求?
- IBMS建模資料過大該如何強化?它的輕量級建模滿足你的需求IBM
- 什麼是 Catalan 數列以及其應用
- 如何重構CRM系統,滿足擴充套件的需求套件
- HDFS 01 - HDFS是什麼?它的適用場景有哪些?它的架構是什麼?架構
- 超越響應:滿足使用者需求的網站設計網站
- 什麼是低程式碼自動化以及它如何使你受益?
- Wi-Fi 6與5G:哪一個最能滿足您的連線需求?
- 什麼是 Goroutine ?又該如何停止它?Go
- 什麼是MongoDBMongoDB
- 交換機是什麼,它的工作原理是什麼
- 【觸想智慧】什麼是工控機以及它的特點分析
- 什麼是代理以及它是如何工作的?
- Python 集合是什麼,為什麼應該使用以及如何使用?Python
- PacketMaster——滿足客戶需求的多功能打流儀AST
- 什麼場景應該用MongoDB ?MongoDB
- 結構化資料儲存,如何設計才能滿足需求?
- 不管你需求如何,BenQ PD2700U總能滿足你ENQ
- 什麼是資料標註,它的用途是什麼?
- 玩家需求分析:如何滿足玩家的“爭強好勝”和“養成感”?
- Boot Camp是什麼以及如何使用boot
- 等保測評證書是由什麼部門發的?申請需要滿足什麼條件?
- 聯絡中心滿足更多連線客戶的需求
- 一個故事教你看懂什麼是數字證書,它的原理是什麼?它的作用是什麼?
- 什麼是海外伺服器?它的優點是什麼?伺服器
- 邊緣計算是什麼以及為什麼需要它
- 一對一直播原始碼如何開發才能滿足客戶的需求原始碼
- 河狸家APP如何滿足產品的任意頁面跳轉需求(runtime)APP
- 5 個可以滿足你的生產力、溝通和娛樂需求的開源手機應用
- 一句話告訴您什麼是運維?以及如何運維才能事半功倍?運維
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體