我說的大資料量處理是指同時需要對資料進行檢索查詢,同時有高並發的增刪改操作。記得以前在XX做電力時,幾百萬條資料,那時一個檢索查詢可以讓你等你分鐘。現在我是想探討下對大資料量的處理,那時我就在想例如騰訊,盛大,動輒數以億計的帳號,怎麼能這麼快呢, 於是找到了互連網現在對資料處理的發展。
對於大資料量處理,如果是互連網處理的話,一般分為下面階段: 第一階段,所有資料都裝入一個資料庫,當資料量大了肯定就會出現問題,就像剛剛說的查詢,於是想辦法。 第二階段,那時肯定想做緩衝機制,確實可以如加上緩衝Memcached,但緩衝也是治標不治本,資料量太大了也是不行,於是有了下面的方法。 第三階段,master-slave模式,進行主從資料庫,master提供寫,slave進行讀,這個適合於有寫造成資料庫卡的方法,XX那個還是不行,於是—— 第四階段,垂直分庫,這個意義還是不大,對於這種採集資料的,於是—— 第五階段,進行水平分庫,這個不錯,記得以前從興也是按這個分時間水平分庫,其實可以分的更細點估計效果更好 第六階段,用nosql做了,關於nosql怎麼做可以參考google的bigtable
其實本文主要目的也是想探討nosql對大資料量的處理:
NOSQL就是將寫操作在記憶體中進行,定時或按某一條件將記憶體中的資料直接寫到磁碟上,一定基礎上是解決了一些問題: 高並發讀寫的需求 海量資料訪問的需求 資料庫橫向擴充性的需求
CAP理論來說,nosql是犧牲了一致性,做到了AP,一致性只是保證了最終一致性。
缺點也很明顯:
1. 當機器掛了資料將會丟失,可以考慮共用記憶體解決。
補充:其實這裡可以展開了講,一種是通過共用記憶體來實現。
叢集記憶體:根據的是Quorum NRW理論,比如你有N台機子用來叢集,每次你進行讀寫資料時可以至少要同步到X個節點才算成功,所以你每次讀資料時只需要讀大於N-X個節點就能保持你的正確率,其實就是對資料進行的冗餘備份,不過我們存的是記憶體,相對於直接的磁碟操作,跨網路進行記憶體操作可以更快。
其實還一種保證資料一致性,就是記錄日誌,當資料每次寫操作記憶體時都進行日誌記錄,然後再在記憶體中進行寫操作,至少很多資料庫就是這樣做的,如redis。
2. 記憶體的限制,記憶體有限當寫資料操作太大的時候記憶體也會爆。
解決:Bigtable的做法是通過bloom-filter演算法合并掉相同的操作,比如UPDATE A='A' ,update A='B'時可以直接合并了。 基本理論基礎
nosql理論基礎:記憶體是新的硬碟,硬碟是新的磁碟
關係型資料庫都要實現事務ACID,即:原子性(Atomicity),一致性(Consistency),隔離性(Isolation), 持久性(Durability)。
CAP理論: Consistency 一致性 Availability -可用性 Partition -容錯性
大多數NoSQL資料庫都不支援事務,不支援SQL等,所以還是得保留關係型資料庫。現在有人提到用記憶體資料庫, 總體如果是簡單業務來說,NOSQL的速度比記憶體資料庫更快,但NOSQL最大缺點,不支援事務,不支援SQL查詢等。