天天看點

MongoDB

1、mongodb是一款強大、靈活、且易于擴充的通用性資料庫。它的設計采用的是橫向擴充。

面向文檔的資料模型使它能很容易的在多台伺服器之間進行資料分割。能自動處理跨叢集的資料和負載,自動重新配置設定文檔,以及将使用者請求路由到正确的機器上。這樣,開發者能夠集中精力編寫應用程式,而不需要考慮如何擴充的問題。如果一個叢集需要更大的容量,隻需要向叢集添加新伺服器,mongodb就會自動将現有資料向伺服器傳送。

由于需要存儲的資料量不斷增長,開發者面臨一個困難,應該如何擴充資料庫。

縱向擴充:使用計算能力更強的機器(買性能更好的機器,但非常昂貴并且早晚還是會遇到資料極限)

橫向擴充:通過分區将資料分散到更多機器上(購買伺服器,但管理多台伺服器較困難)

2、面向文檔

MongoDB

3、區分類型、區分大小寫、一個文檔不能有重複的鍵、文檔中的鍵值是有序的

4、文檔:

db.testbylj.insert({"title":"my blog post","content":"here's my blog post."});

db.testbylj.find()

5、mongodb的文檔與javascript的對象相近,類似于json,但json沒有日期類型,隻有一種數字類型,無法區分浮點數和整數,更别說區分32bit和64bit數字,mongodb在保留json基本鍵值對特性基礎上,添加了其他一些資料類型。

6、limit、skip、sort、索引

7、特殊的集合和索引:

用于類隊列資料的固定集合:capped collection,如果沒有空間了,老的文檔被删除,新的文檔進去

用于緩存的ttl索引

用于存儲大檔案的gridfs:用來存儲大型二進制檔案,如果有一些不常改變但是經常需要連續通路的大檔案,那麼使用gridfs再合适不過了

8、想對資料庫中的資料進行分析?,通過聚合工具:

一、聚合(aggregate)架構:eg排序(sorting)、限制(limiting)、跳過(skipping)

二、mapreduce

三、簡單聚合指令:count、distinct、group

聚合架構:

eg:一個集合中有很多文檔,key中有sourceip,想統計sourceip出現的次數,如下:

{"$project":{"sourceip":1}}, //将ip投射出來

{"$group":{"_id":"$sourceip","count":{"$sum":1}}}, //将ip排序,統計每個ip出現的次數

{"$sort":{"count":-1}}, //按照出現次數降序排列

{"$limit":5} //将傳回結果限制為前5個

mapreduce:

是聚合工具中的明星,非常強大、靈活。有些問題無法使用聚合架構來弄的,可以用mapreduce,但它非常慢,不應該用在實時的資料分析中。它能夠在多台伺服器之間并行執行,将一個大問題拆分為多個小問題,将各個小問題發送到不同機器處理,再合并為一個完整的解決方案.

需要幾個步驟:

2.1、映射(map):将操作映射到集合中的每個文檔

2.2、洗牌:按照鍵分組,并将産生的鍵值組成清單放到對應的鍵中

2.3、化簡(reduce):把清單中的值化簡成一個單值,值傳回,然後接着洗牌,直到隻有一個值為止,這個值也是最終的結果

eg:找出集合中所有鍵:流程如附件

function map() {

for(var key in this){

 emit(key,{count:1});

}

function reduce(key, emits) {

total = 0;

for(var i in emits){

total +=emits[i].count;

return {"count":total};

9、副本集:如果隻是開發,用單獨伺服器就可以了。但在生成環境,最好考慮用到副本集。

副本集:一組伺服器,其中一個為主伺服器,用于處理客戶度請求,還有多個備份伺服器,用于儲存主伺服器的資料副本,如果主服務崩潰了,備份伺服器會自動将其中一個成員更新為新的主伺服器。

預設情況下,驅動程式會将所有的請求都路由到主節點,但有些時候希望将讀請求發送到備份節點,基于一緻性、負載的考慮,不建議這樣做。但如果希望應用程式在主節點挂掉時仍然能夠執行讀操作(不在意讀到的資料是否是最新的),可以考慮這麼做。從備份節點讀取資料有一個常用的參數(nearest)是獲得低延遲的資料。

如果某些讀請求必須從主節點讀取資料,那麼對請求使用primary選項

如果某些讀請求不要求資料是最新的,那麼可以對請求使用secondary perfered

如果某些讀請求對低延遲的要求大過一緻性要求,那麼可以使用nearest

10.主從模式

這種情況下,mongodb不會自動(可以手動)故障轉移,而且要明确聲明主節點和從節點。當副本集能夠支援無限資料成員時候,主從模式可能會立即廢除。兩種情況下可以考慮用主從模式:

1、需要11台以上的備份節點

2、需要複制單個資料庫

12、記憶體》固态磁盤》機械磁盤  (性能比較)