lsm 樹(log-structured merge tree)犧牲了一定的讀效能來換取寫入資料的高效能,hbase、cassandra、leveldb 都是用這種演算法作為儲存的引擎.
當從 lsm 樹裡面讀資料時,我們首先從 memtable 中查詢資料,如果資料沒有找到,再從 sstable 中查詢資料.因為儲存的資料都是有序的,所以查詢的效率是很高的,只是因為資料被拆分成多個 sstable,所以讀取的效率會低於 b+ 樹索引.
write ahead log 的方式將資料先寫在磁碟上,防止系統故障memtable出現問題導致資料丟失.
memtable是在記憶體結構中的,在 memtable 中資料是按照寫入的 key 來排序的.
寫入時乙個是順序寫日誌另乙個是寫入memtable,所以相較於mysql的非順序資料和索引磁碟寫入效能會很高.
memtable 寫入到磁碟生成sstable.
如果要刪除指定的key,那麼被刪除的key的標記也會flush到sstable當中.
注意這個檔案是有序的.該檔案生成後是不許更改的.
當不斷生成新的sstable時,同乙個key可能會存在不同的sstable中,那麼不是最後出現的sstable當中的這些資料就應該被清除.
merge 這些sstable,更新index就是compactor的工作.
當查詢的key不在memtable當中,就可以根據index查詢到sstable對應的資料即可.
布隆過濾器是我們的老朋友了,經常出沒於一些非關係型資料庫或者大資料中經常見到.
主要作用,加速查詢,快速過濾不存在的key.
1.更新採用的是樂觀鎖的模式,按照版本號進行併發控制,減少鎖的衝突,死鎖檢測等.更新文件的同時更新索引,將索引指向新寫如的檔案.
2.順序和記憶體寫入,寫入效能高效,這就是nosql在大資料寫入下的效能高於mysql等關係型資料庫的關鍵.
3.可採用wal機制保證了資料的可靠性
4.分布式特性,可按照寫入的key進行hash然後將資料寫入對應的檔案,對同乙個key只用查詢同乙個檔案即可.分布式特性,也是nosql快速發展的重要特性.
b+樹極大的提高了讀效能,但是有這麼幾點也是b+樹的弊端.b+樹的特點是不夠靈活,不像lms樹可以進行資料合併.尤其是對於亂序的寫,節點存在**,這會導致嚴重的效能問題.
分布式不僅要考慮讀效能更要考慮寫效能,尤其是在資料量比較大的情況下.而且用快取提高讀效能要比快取提高寫效能要容易.
還有乙個情況也需要考慮就是,寫放大的問題,比如10m的資料寫入mysql可能需要100m,nosql需要50m.
主從架構主要適用於分布式讀場景,面對分布式寫的場景卻比較難以招架.
在寫場景比較多的情況下,除非分庫我們可以減少寫的流量.而分庫帶來的額外開發成本是比較大的.
nosql一般採用的是集群的模式可以保證資料的分部,而且每台機器上有每個資料分片的副本來保證讀效能.可以參照elasticsearch,redis的集群機制.
集群機制在多機房資料同步問題上會有巨大作用.
Nosql的架構模式之列族儲存
列族儲存 的設計源於google的bigtable 該 對以後的列族儲存 如 hbase,cassandra,hypertable 的實現產生了深遠的影響。先來看看熟悉的excel 它有助於我們理解列族儲存的模型,如圖 1 所示 電子 是乙個二維的 通過 行號 列號 3 c 可以快速地找到對應的單元...
分層與架構模式
1 企業應用計算的演變 這個我們應該是在學html的時候就已經學習了一部分了,現在再來回憶一些理論知識!主機 啞終端的集中計算模式 大型主機管理和控制應用程式的所有方面,包括業務處理 資料管理和螢幕顯示。使用者一般通過只有乙個螢幕 乙個鍵盤和一根主機連線線的 啞終端 與主機的應用程式進行互動。缺點 ...
MVC架構模式與xib
mvc架構模式 m model,模型,儲存資料 v view,檢視,顯示控制項及資料 c controller,控制器,傳遞資料,管理檢視 xib1 xib檔案是一種自定義檢視。2 建立方法 file new file,選擇ios user inte ce view empty。3 好處 可以先設計...