MongoDB閱讀精要

王滔發表於2013-08-22


部署:
MongoDB服務端可執行在Linux、Windows或IOS平臺,支援32位和64位應用,預設埠為27017。推薦執行在64位平臺,因為MongoDB在32位模式執行時支援的最大檔案尺寸為2GB。64位系統就沒有最大檔案限制。
32位系統最大限制2g的原因為:32位系統下,所有地址必須能用32位系統訪問到(超過2g訪問不到了)。所以針對32位作業系統下的mongod最多隻能處理2g的資料。


一個資料庫的資料儲存方式:
比如資料庫test分別會有如下檔案:
testabc.0,testabc.1,testabc.2
每個檔案的大小都會成倍增加。第一個是16m,第二個是32m,第三個是64m。第四個是128m,.......直到最大到2g為止。

那麼,2g之後會幹嘛呢?
繼續2g的建立下去。
疑問:既然這樣子的話,為什麼不一開始就建立一個2g的檔案呢?
2g,2g,2g的建立下去。



php想操作這個資料庫,必須下載這個資料庫針對php的驅動。其實就是安裝一個擴充套件入php中。
類似於載入php操作mysql的模組一樣的。參看:http://us.php.net/manual/en/class.mongocollection.php。
聯絡:php操作memacache,也是需要載入一個php針對memache的擴充套件進去。然後有現成的函式可以拿來使用。



從現在可以理解出:mogodb的資料儲存在檔案系統上。並非記憶體上。但是速度很快,原因是什麼?

1、高效的二進位制資料儲存方式。bson方式。沒有表結構欄位的限制關係。表結構擴充套件容易。
2、無需關聯表進行查詢。省去關聯查詢,查詢資料快。

3.寫入資料速度非常快。

4、有專門的商業公司進行維護和升級。10gen公司。
避免點或者缺點:
1.每個文件必須保持在16M以下

為了解決單個檔案大小限制的需求,mogodb引入了gridfs檔案系統,
10gen提到:如果這項設定不停的困擾到你,那麼是否你的設計模式存在著問題;或者你可以使用檔案無大小限制的GridFS。


2.不支援事務。需要用到事務場景的不能使用。對資料一致性要求高的不適合。
3、對磁碟的容量佔用比較多。是因為其機制的特性促使的。
原因:刪除記錄不釋放空間。mongodb每次空間不足時都會申請生成一大塊的硬碟空間(就是生成一個新的檔案),而且申請的量從64M、128M、256M那樣的指數遞增,直到2G為單個檔案的最大體積。隨著資料量的增加,你可以在其資料目錄裡看到這些整塊生成容量不斷遞增的檔案。
它採用預先申請檔案空間的方式,按照級別進行遞增,64M、128M、256M,2g。

4、mogodb把所有空閒的記憶體當快取使用。無法預定義申請和設定記憶體大小。這樣
容易受到其他程式干擾出現不穩定。


適合的業務和需求型別:
1、適合作為資訊基礎設施的持久化快取層。理解為,資料是儲存在磁碟上。資料持久。
2、一般儲存資料量大的訪問日誌資訊,用這個比較好。入庫速度快,資料量無線增大,可以支援分散式儲存。
3、是為海量資料儲存與查詢而設計的。

我覺得,mongodb與mysql的比較不是一個層面的,無法比較。一個是nosql系列的。一個是關係型資料庫。只能以nosql與關聯式資料庫的特點去比較。
mongodb應該與其他資料庫redis去比較,都是同屬於nosql系列的。
比如redis就不像mogodb那樣支援sql式的查詢操作。他完全是key-value形式的。

不適合的業務型別:

1)要求高度事務性的系統。

2)傳統的商業智慧應用。

3)複雜的跨文件(表)級聯查詢。

一些概念與關聯式資料庫的比較
mongodb   關聯式資料庫
資料庫       資料庫
集合         表
文件          行
因為是無模式, 列
所以不需要列的概念  
objectId文件編號        類似於行的唯一編號


文件:符號{}可以看成是一個文件。
       


與關係型資料庫相比,為什麼查詢效能提到了?
儲存的資料不需要分表。存在一個集合中去了。關係型資料庫每個表 的資料是分開檔案儲存的。因而查詢一個商品的全部資訊,一般需要查詢多個表,去多個檔案中運算元據。
而mongodb可以把商品的所有資料,比如sku,屬性等資訊都儲存在一個文件中。由於放在一個地方,查詢的速度快了。

相關文章