MongoDB(3)--有关NoSQL及MongoDB的一些概念
學習任何東西在沒有理解的前提下去背熟一些概念是沒有用的,就像只背會了幾個概念而沒有理解的開發人員去面試是經不住面試官的追問的。前面的兩篇對MongoDB做了簡單的介紹,能夠很快上手,對MongoDB有一個感性的認識。本篇大部分內容來自MongoDB權威指南和MongoDB實戰。希望在學習完整個MongoDB后能對本篇的內容有一個全新的認識。
NoSQL簡介
NoSQL,全稱是”Not Only Sql”,指的是非關系型的數據庫。這類數據庫主要有這些特點:非關系型的、分布式的、開源的、水平可擴展的。原始的目的是為了大規模 web? 應用,這場全新的數據庫革命運動早期就有人提出,發展至2009 年趨勢越發高漲。NoSQL 的擁護者們提 倡運用非關系型的數據存儲,通常的應用如:模式自由、支持簡易復制、簡單的API、最終 的一致性 (非ACID )、大容量數據等。NoSQL 被我們用得最多的當數 key-value 存儲,當然還 有其他的文檔型的、列存儲、圖型數據庫、xml 數據庫等。相對于目前鋪天蓋地的關系型數 據庫運用,這一概念無疑是一種全新思維的注入。
NoSQL的優勢
同關系型數據庫相比,NoSQL有下面的一些優勢:
- 適合對數據庫高并發讀寫的需求。
- 適合對海量數據的高效率存儲和訪問的需求。
- 適合對數據庫的高可擴展性和高可用性的需求。
由于NoSQL的這些優勢,使得NoSQL比較適合以下的一些場景的使用:
- 對數據庫事務一致性要求不高的時候,因為NoSQL不支持事務(MongoDB是不支持事務的,其他的沒做研究)。
- 對數據庫的寫實時性和讀實時性要求不高的時候。
- 對復雜的SQL 查詢,特別是多表關聯查詢不多的時候。
NoSQL的特點
- 它可以處理超大量的數據
- 它運行在便宜的它運行在便宜的 PC 服務器集群上服務器集群上,意思是在數據庫不夠用的時候進行PC的集群擴展很方便并且成本很低。
- 它擊碎了性能瓶頸,因為使用NoSQL省去了傳統的程序模型到SQL之間轉換的時間,執行效率更高。
- 它沒有過多的操作,意思是去掉了很多在關系數據庫中擁有而在實際又不怎么使用的功能。
- 它的支持支持者源于社區者源于社區,所有的NoSQL產品都是開源的。
MongoDB簡介
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json? 的bjson 格式,簡稱BSON,因此可 以存儲比較復雜的數據類型。MongoDB? 最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能, 而且還支持對數據建立索引。它是一個面向集合的,模式自由的文檔型數據庫。
MongoDB特點
1 豐富的數據模型 MongoDB是一種面向文檔的數據庫。在MongoDB中文檔就相當于關系型數據庫中的行。文檔中可以包含很復雜的數據結構,這樣一條記錄就可以表示很復雜的層級關系。比如說文章表有一個字段是評論,在關系型數據庫中我們通常會建一個評論表和文章表做關聯,在MongoDB中就可以直接將評論存在一條文章記錄的文檔中。更符合我們的思維。 MongoDB沒有模式,也就是說沒有表結構,文檔的字段可以隨時添加,不會對原來數據有任何影響,使開發變得很容易。 2 容易擴展 在一些大型的網站中,數據的增長是非常驚人的。在面臨數據增長機器不夠用的時候通常有兩種做法:
- 購買更高配置的機器,會花費很大,而且達到物理極限后花錢也買不到更高配置的了。
- 進行擴展,將數據分散到多個機器上,這種在操作上會顯得復雜點。
MongoDB的設計就考慮到了擴展的問題,它所采用的面向文檔的數據模型使得可以自動在多臺服務器中切割數據。還可以平衡群集的數據和負載,自動進行文檔重排。 3 豐富的功能
- 索引:MongoDB支持通用輔助索引,可以進行多種快速查詢。
- 存儲Javascript:不必再使用存儲過程了,可以直接在服務器端存取Javascript的函數和值。
- 聚合:MongoDB支持MapReduce和其他聚合工具。
- 固定集合:集合的大小是有上限的,這對于日志一類的數據很有用。
- 存儲文件:MongoDB支持用一種容易使用的協議(GridFS)來存儲大型文件。
4 更快的速度 高性能是MongoDB的目標,為了提高性能,就必須進行很多精簡的設計,相比關系型數據庫少了很多功能,但仍然保持著關系型數據庫的眾多的特性。一些精簡設計表現在:
- 使用MongoDB傳輸協議作為與服務器交互的主要方式,將比較HTTP、Reset等可以節省不少開銷。
- 對文檔進行動態填充,預分配數據文件,用空間換取時間,而且空間對于現在來說已不是問題。
- 默認的存儲引擎使用內存映射文件,將內存管理工作交給OS去處理。
- 動態查詢優化器會記住執行查詢最高效的方式。
5 簡單的管理 MongoDB盡量讓服務器自治來簡化數據庫的管理。除了啟動數據庫服務器之外,幾乎沒有什么管理操作了。如果主服務器掛掉了,MongoDB會自動切換到備份服務器上,并將備份服務器提升為活躍服務器。在分布式的環境下,群集只需要知道有新的節點就會自動集成和配置新的節點。
MongoDB適用場景
- 網站數據:MongoDB非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所 需的復制及高度伸縮性 。
- 緩存:由于性能很高,MongoDB 也適合作為信息基礎設施的緩存層。在系統重啟之后, 由MongoDB 搭建的持久化緩存層可以避免下層的數據源過載 。
- 大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲 。
- 高伸縮性的場景:MongoDB? 非常適合由數十或數百臺服務器組成的數據庫。MongoDB的路線圖中已經包含對MapReduce 引擎的內置支持 。
- 用于對象及JSON 數據的存儲:MongoDB 的BSON 數據格式非常適合文檔化格式的存儲及查詢 。
NoSQL的一些產品
| Database | Architecture | Implementation Language |
| Hypertable | Bigtable, Column-oriented | C++ |
| HBase | Bigtable, Column-oriented | Java |
| Cassandra | Dynamo (with Bigtable data model) | Java |
| MongoDB | Auto-sharding | C++ |
| Riak | Dynamo, Key/Value store | Erlang |
| CouchDB | Document-oriented (non-scalable) | Erlang |
| Redis | In-memory, Key/Value store | C |
| Project Voldemort | Dynamo | Java |
| Tokyo Cabinet/Tyrant | Key/Value store | C |
| Dynomite | Dynamo | Erlang |
| Amazon S3 | Hosted Key/Value store | Java |
| Amazon RDS | Hosted MySQL | C |
轉載于:https://www.cnblogs.com/oec2003/archive/2011/09/29/2741999.html
總結
以上是生活随笔為你收集整理的MongoDB(3)--有关NoSQL及MongoDB的一些概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将moss 2007的模板文件导入到mo
- 下一篇: 好听的中文名字女孩