又一個key/value數據庫 Memlink

爲什麼會有Memlink?

對於大型論壇服務,比如百度貼吧、天涯論壇,日均發帖量過百萬,日均PV過億,日積月累下來的帖子數量可能幾十億。這麼大的一個論壇服務,海量數據的存儲、訪問是一個非常有挑戰性的技術難題。

中小規模的論壇通常使用mysql/sql server作爲後端存儲,當數據量膨脹時,比如一個版面有百萬、千萬級別主貼,一個主貼下有數百萬回覆,此時使用SQL語句select … order by … limit … ,性能可想而知。

大型論壇中的數據可以抽象爲如下幾類數據結構:

  1. 版面信息、主帖信息、回帖信息等。這是Key-Value結構的數據類型,比如主貼id對應主貼的信息(標題、發帖時間、作者等等),回帖id對應回貼的信息(回覆內容、回覆時間、回覆者等等)。
  2. 版面的主貼列表,主貼列表可按發表時間或者回復時間排序;主貼下的回覆列表,等等。這種數據類型是key-list數據類型,而且list是可排序的。
  3. 其他周邊數據。比如斑竹、會員等,由於數據量較小、邏輯關係較複雜,可以使用sql系統存儲。比如檢索數據,由檢索系統承擔。等等。

 

對於Key-Value系統,市面上有較多選擇,它們的數據容量大小從數百萬到上百億不等,性能、功能也各有差異,由於討論KV系統的文章很多,再次不贅述。

對於Key-list系統,市面上可選擇的餘地就非常小,加之線上工業級別的要求,因而就誕生出了memlink系統。

Memlink簡介

Memlink是一個高性能、持久化、分佈式的Key-list/queue數據引擎。正如名稱中的memlink所示,所有數據都建構在內存中,保證了系統的高性能(大約是redis幾倍),同時使用了redo-log技術保證數據的持久化。Memlink還支持主從複製、讀寫分離、List過濾操作等功能。

特點:

  • 內存數據引擎,性能極爲高效
  • List塊鏈結構,精簡內存,優化查找效率
  • Node數據項可定義,支持多種過濾操作
  • 支持redo-log,數據持久化,非Cache模式
  • 分佈式,主從同步

 

與Redis區別

redis同樣也提供key-list 存儲功能,memlink與redis區別有:

  • redis比較消耗內存。每個存儲節點,在不支持vm的情況下要額外消耗12字節內存,在支持vm的情況下,每個節點額外消耗24字節內存。對於存儲上億條數據來說,額外消耗的內存太大。
  • redis redo-log不夠完善。redis redo-log機制:每隔一段時間同步磁盤(此期間重啓就好丟失數據);追加log方式,會使log文件越來越大,而且性能不夠優化。
  • 主從同步不完善。如果從節點因爲網絡原因丟失了部分同步數據,需要重新完全獲取一份主節點的所有數據。在大數據量的情況下,不太合適。
  • 網絡處理主事件循環只有一個線程,不能很好的利用多核;同時讀寫沒有分離,沒有進行寫優先處理。
  • list節點沒有mask表,不能進行一些屬性過濾。

 

memlink主要對上述特點進行了改進。

性能

Benchmark

Client API

ClientAPI

誰在使用?

目前Memlink應用於天涯來吧、天涯論壇系統。

未來

Memlink是專注於key => list\Queue對象的存儲系統,所以它內存使用更精簡、性能更高效。Key => list\Queue系統作爲Key => value另一種形式補充,爲高性能海量數據的Web應用提供了新的選擇。

發佈了46 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章