Fourinone

Fourinone,是一個四合一分散式計算框架。

基本介紹

  • 中文名:四不像
  • 外文名:FourInOne
  • 特點:不到1萬行java代碼實現
  • 提供:最核心的分散式功能和資料庫引擎
簡介,特點,首先,其次,然後,最後,功能,

簡介

FourInOne(中文名字“四不像”)是一個四合一分散式計算框架,在寫這個框架之前,我對分散式計算進行了長時間的思考,也看了老外寫的其他開源框架,當我們把複雜的hadoop當作一門學科學習時,似乎忘記了我們想解決問題的初衷:我們僅僅是想寫個程式把幾台甚至更多的機器一起用起來計算,把更多的cpu和記憶體利用上,來解決我們數量大和計算複雜的問題,當然這個過程中要考慮到分散式的協同和故障處理。如果僅僅是為了實現這個簡單的初衷,為什麼一切會那么複雜,我覺的自己可以寫一個更簡單的東西,它不需要過度設計,只需要看上去更酷一點,更小巧一點,功能更強一點。於是我將自己對分散式的理解融入到這個框架中,考慮到底層實現技術的相似性,我將Hadoop,Zookeeper,MQ,分散式快取四大主要的分散式計算功能合為一個框架內,對複雜的分散式計算套用進行了大量簡化和歸納。

特點

首先

對分散式協同方面,它實現了Zookeeper所有的功能,並且做了很多改進,包括簡化Zookeeper的樹型結構,用domain/node兩層結構取代,簡化Watch回調多執行緒等待編程模型,用更直觀的容易保證業務邏輯完整性的內容變化事件以及狀態輪循取代,Zookeeper只能存儲信息不大於1M的內容,FourInOne超過1M的內容會以記憶體映射檔案存儲,增強了它的存儲功能,簡化了Zookeeper的ACL許可權功能,用更為程式設計師熟悉rw風格取代,簡化了Zookeeper的臨時節點和序列節點等類型,取代為在創建節點時是否指定保持心跳,心跳斷掉時節點會自動刪除。FourInOne是高可用的,沒有單點問題,可以有任意多個複本,它的複製不是定時而是基於內容變更複製,有更高的性能,FourInOne實現了領導者選舉算法(但不是Paxos),在領導者伺服器宕機情況下,會自動不延時的將請求切換到備份伺服器上,選舉出新的領導者進行服務,這個過程中,心跳節點仍然能保持健壯的穩定性,迅速跟新的領導者保持心跳連線。基於FourInOne可以輕鬆實現分散式配置信息,集群管理,故障節點檢測,分散式鎖,以及淘寶configserver等等協同功能。

其次

FourInOne可以提供完整的分散式快取功能。如果對一個中小型的網際網路或者企業套用,僅僅利用domain/node進行k/v的存儲即可,因為domain/node都是記憶體操作而且讀寫鎖分離,同時擁有複製備份,完全滿足快取的高性能與可靠性。對於大型網際網路套用,高峰訪問量上百萬的並發讀寫吞吐量,會超出單台伺服器的承受力,FourInOne提供了fa?ade的解決方案去解決大集群的分散式快取,利用硬體負載均衡路由到一組fa?ade伺服器上,fa?ade可以自動為快取內容生成key,並根據key準確找到散落在背後的快取集群的具體哪台伺服器,當快取伺服器的容量到達限制時,可以自由擴容,不需要成倍擴容,因為fa?ade的算法會登記伺服器擴容時間版本,並將key智慧型的跟這個時間匹配,這樣在擴容後還能準確找到之前分配到的伺服器。另外,基於FourInOne可以輕鬆實現web套用的session功能,只需要將生成的key寫入客戶端cookie即可。
FourInOne也可以當成簡單的mq來使用,將domain視為mq佇列,每個node為一個佇列訊息,監控domain的變化事件來獲取佇列訊息。也可以將domain視為訂閱主題,將每個訂閱者註冊到domain的node上,發布者將訊息逐一更新每個node,訂閱者監控每個屬於自己的node的變化事件獲取訂閱訊息,收到後刪除內容等待下一個訊息。但是FourInOne不實現JMS的規範,不提供JMS的訊息確認和訊息過濾等特殊功能,不過開發者可以基於FourInOne自己去擴充這些功能,包括mq集群,利用一個獨立的domain/node建立佇列或者主題的key隱射,再仿照上面分散式快取的智慧型根據key定位伺服器的做法實現集群管理。

然後

FourInOne整體代碼僅僅為70k,跟Hadoop, Zookeeper, Memcache, ActiveMq等開源產品代碼上沒有任何相似性,不需要任何依賴,引用一個jar包就可以嵌入式使用,良好支持window環境,可以在一台機器上模擬分散式環境,更方便開發。
FourInOne對於分散式大數據並行計算的解決方案不同於複雜的hadoop,它不像hadoop的中間計算結果依賴於hdfs,它使用不同於map/reduce的全新設計模式解決問題。FourInOne有“包工頭”,“農民工”,“手工倉庫”的幾個核心概念。“農民工”為一個計算節點,可以部署在多個機器,它由開發者自由實現,計算時,“農民工”到“手工倉庫”獲取輸入資源,再將計算結果放回“手工倉庫”返回給“包工頭”。“包工頭”負責承包一個複雜項目的一部分,可以理解為一個分配任務和調度程式,它由開發者自己實現,開發者可以自由控制調度過程,比如按照“農民工”的數量將源數據切分成多少份,然後遠程分配給“農民工”節點進行計算處理,它處理完的中間結果數據不限制保存在hdfs里,而可以自由控制保存在分散式快取、資料庫、分散式檔案里。如果需要結果數據的合併,可以新建立一個“包工頭”的任務分配進行完成。多個“包工頭”之間進行責任鏈式處理。總的來說,是將大數據的複雜分散式計算,設計為一個鏈式的多“包工頭”環節去處理,每個環節包括利用多台“農民工”機器進行並行計算,無論是拆分計算任務還是合併結果,都可以設計為一個單獨的“包工頭”環節。這樣做的好處是,開發者有更大能力去深入控制並行計算的過程,去保持使用並行計算實現業務邏輯的完整性,而且對各種不同類型的並行計算場景也能靈活處理,不會因為某些特殊場景被map/reduce的框架限制住思維,並且鏈式的每個環節也方便進行監控過程。

最後

開發包里自帶了一系列傻瓜上手demo,包括分散式計算、統一配置管理、集群管理、分散式鎖、分散式快取、MQ等方面, 每個demo均控制在少許行代碼內,但是涵蓋了fourinone主要的功能,方便大家快速理解並掌握。產品開源工作已經在提交中,屆時歡迎更多對分散式並行計算有興趣的人員加入擔任貢獻者。

功能

Fourinone 2.0新增功能:
Fourinone2.0提供了一個4合1分散式框架和簡單易用的編程api,實現對多台計算機cpu,記憶體,硬碟的統一利用,從而獲取到強大計算能力去解決複雜問題。Fourinone框架提供了一系列並行計算模式(農民工/包工頭/職介紹/手工倉庫)用於利用多機多核cpu的計算能力;提供完整的分散式快取和小型快取用於利用多機記憶體能力;提供像操作本地檔案一樣操作遠程檔案(訪問,並行讀寫,拆分,排它,複製,解析,事務等)用於利用多機硬碟存儲能力;由於多計算機物理上獨立,Fourinone框架也提供完整的分散式協同和鎖以及簡化MQ功能,用於實現多機的協作和通訊。
提供對集群檔案的操作支持,包括:
1、元數據訪問,添加刪除,按塊拆分, 高性能並行讀寫,排他讀寫(按檔案部分內容鎖定),隨機讀寫,集群複製等
2、對集群檔案的解析支持(包括按行,按分割符,按最後標識讀取)
3、對整形數據的高性能讀寫支持(ArrayInt比ArrayList存的更多更快)
4、兩階段提交和事務補償處理
5、自帶一個集群檔案瀏覽器,可以查看集群所有硬碟上的檔案(不同於hadoop的namenode,沒有單點問題和容量限制)
總的來說, 將集群看做一個作業系統,像操作本地檔案一樣操作遠程檔案。
但是fourinone並不提供一個分散式存儲系統,比如檔案數據的導入導出、拆分存儲、負載均衡,備份容災等存儲功能,不過開發人員可以利用這些api去設計和實現這些功能,用來滿足自己的特定需求。
二、自動化class和jar包部署
class和jar包只需放在工頭機器上, 各工人機器會自動獲取並執行,兼容作業系統,不需要進行安全密鑰複雜配置
三、網路波動狀況下的策略處理,設定搶救期,搶救期區域網路絡穩定下來不判定結點死亡
Fourinone 3.04.25新增功能:
1、編譯和運行環境升級為jdk7.0版本;
2、計算中止和逾時中止的支持,比如多台計算機工人同時執行查找,一旦某台計算機工人找到,其餘工人全部中止並返回。以及可以由工人控制或者框架控制的計算過程逾時中止。
3、一次性啟動多工人進程支持,可以通過程式api一次性啟動和管理“ParkServer/工頭/工人”多個進程,並附帶良好的日誌輸出功能,用於代替寫批處理腳本方式,方便部署和運行。
4、工人服務化模式的支持,把工人當作通用服務來使用和封裝。
5、增加了相應指南和demo。
Fourinone4.0版新特性:一個高性能的資料庫引擎CoolHash(酷哈嘻
1、CoolHash是一個資料庫引擎
CoolHash只做資料庫最基礎核心的引擎部分,支持大部分數據類型的“插入、獲取、更新、刪除、批量插入、批量獲取、批量更新、批量刪除、高效查詢(精確查、模糊查、按樹節點查、按key查、按value查)、分頁,排序、and操作、or操作、事務處理、key指針插入和查詢、快取持久互轉”等操作和遠程操作。
其他的“監控、管理、安全、備份、命令行操作、運維工具”等外圍特性都剝離出去不做,開發者可以根據自己需求擴充這些功能,CoolHash也不做自動擴容,CoolHash認為分散式集群特性也可以在外圍通過“分庫分表”或者“分散式擴容”等中間件技術去做,目前國內很多企業都具備基於開源軟體做外圍中間件的能力,這樣,CoolHash只維持一個高性能又輕量級的最小存儲引擎。
CoolHash高度產品化,易用性強,容易嵌入使用和複製傳播(200k大小),採用apache2.0開源協定,使用java實現(jdk1.7),對外提供java接口,同時支持windows和linux(unix-like),由於依賴底層作業系統,windows和linux的實現稍有不同。
2、CoolHash是一個k/v資料庫
實現資料庫存儲結構索引有多種方法,有比較平衡減少深入的b樹、b+樹系列,結合記憶體再合併的LSM-tree系列(bigTable),借鑑字典索引技術的Trie樹(前綴樹、三叉樹)等,不過對於key/value結構,感覺最合適的還是Hash,不過java里的Hash算法是實現在記憶體組件里,無法持久化,只能快速讀寫,但是無法模糊查詢,傳統的Hash不是一個“cool”的Hash,需要進行改進。
CoolHash改進後的Hash算法是一個完整的key樹結構,我們知道傳統Hash的key和key之間沒有關係,互相獨立,但是在CoolHash里,key可以表示為“user.001.name”的用“.”分開的樹層次結構,如“user.001.age”和“user.001.name”都屬於“user.001.*”分支,既可獨立獲取,也可以從父節點查詢,還可以“user.*.name”方式只查詢所有子節點。
提出key指針的概念:CoolHash的key可以是一個指針,指向其他樹的key,這樣能將兩棵key樹連起來,這樣的設計能避免大量join操作,如果兩棵key樹沒有直接關係,需要動態join將會非常耗時,但有了key指針可以很好的描述數據之間“1對1、1對多、多對多”的關聯關係。key指針也不同於資料庫外健,它可以模糊指,比如只模糊指向一個key前綴“user.001”,再補充需要獲取的屬性形成一個完整key;還能連續指,比如一個key指針指向另一個key指針再指向其他key指針,連續指可以將更多的樹聯繫起來形成一個大的數據森林。CoolHash能很好的控制key指針最終值返回、key指針死循環、讀寫死鎖等問題。
我們知道關係資料庫的數據表是一個行列的二維矩陣的數據結構,表和表之間沒有層次感,一個表不會是另一個表的父子節點,這就導致需要大量關聯,從一個表獲取另一個表的數據需要通過join操作,同時由於表和表之間彼此獨立,又導致數據量大後join性能不好,多個矩陣需要動態的“求並”“求或”獲取主健,再返回所有屬性。很多朋友是開發業務系統出身,複雜一點的業務邏輯通常需要關聯7-8個資料庫表甚至更多,是相當頭疼的事情。
這種矩陣行列式結構還有個不好,就是一加全加,一減全減,一行加了一列屬性,所有行都要跟著加,假如有個“子女”屬性,有的人有1個子女,有的人有2-3個子女,這個屬性應該有時是1列,有時是3列,有時沒有才好。CoolHash的父節點下的key值可以任意添加和減少,或者再任意向下擴充葉子結點,也可以任意查詢,能夠非常靈活,比如“子女”屬性可以這樣表示第一個小孩:“user.001.children.001”。
關係資料庫還容易產生數據碎片,需要經常執行“OPTIMIZE TABLE”或者“壓縮資料庫”等操作回收空間,CoolHash對此做了設計和算法改進,對於大量數據頻繁寫入和刪除能很好重複利用存儲空間。
key和value的數據格式:CoolHash的key只能是字元串,默認最大長度為256位元組。value能支持非常廣泛的數據類型,基本數據類型“String(變長字元)、short(短整形)、int(整型)、long(長整形)、 double(雙精度浮點型)、 float(浮點型)、Date(日期型)”,高級數據類型的大部分的java集合都能支持(List、Map、Set等),以及任意可序列化的自定義java類型,底層數據類型也可以支持二進制型。基本數據類型的value可支持按內容查詢,高級數據類型和二進制類型不支持按內容查詢。所有類型的value默認最大長度為2M,默認配置保證一對key/value長度不會太大,能夠容易載入到記憶體進行處理,但是key和value的最大長度、以及region大小都是可以根據計算機性能進行配置。
CoolHash還支持HashMap快取和持久化的統一和互相轉換,並共用一套API,可以將數據放入CoolHashMap,也可以放入持久化,可以將CoolHashMap對象轉成持久化,也可以從持久化數據里直接獲取CoolHashMap對象。
3、CoolHash是一個並行資料庫(mpp)
前幾年有篇文章,國外的資料庫大牛猛烈抨擊map/reduce,讓重複造輪子的人應該去學習一下關係資料庫幾十年的理論和實踐積累,一個藉助蠻力而不善於設計索引的資料庫系統是愚蠢和低效的。這一方面說明了map/reduce技術已經侵犯到了傳統資料庫領域的核心利益,另一方面也暴露了分散式存儲技術的某些不足。
這裡的蠻力就是並行計算,在CoolHash的底層,會維持一個數據工人進程組,根據計算機性能少則幾個多則上百個,對於資料庫的每種操作,數據工人們像演奏交響樂一樣,時而獨奏,時而合奏,統一調度,緊密協作的完成任務,CoolHash從一開始就是高度並行化的設計,資料庫引擎本質就是在尋求cpu、記憶體、硬碟的充分利用和均衡利用,“一力勝十巧”,在大量數據的讀寫和查詢中並行計算的效果猶為明顯。
同時一個好的資料庫引擎應該是蠻力和技巧的結合,Hbase的一個重要啟示,就是可以靈活設計它的key達到近似索引的效果,CoolHash將此特性發揮的更深入,樹型結構的key本身就是最好的索引,除外CoolHash幾乎不需要另外再建立索引,只需要按照業務數據特點設計好你的key。並行計算和索引的結合會得到一個很好的互補,讓你的索引結構不需要維持的太精準而節省開銷,舉個例子:我們從一個城市找一個人,一種方法是我們有精確的索引,知道他在哪個區哪個樓那個房間,另一種是我們只大致知道他在哪棟樓,但是我們有幾百個工人可以每間房同時去找,這樣也能很快找到。
4、CoolHash是一個nosql資料庫
nosql不等於沒有sql的功能,關係資料庫的sql仍然是非常方便的互動語言,而且有專門的標準,CoolHash通過函式方式實現大部分sql的功能,如果需要擴充sql支持,在外圍用正則表達式做一個sql解析,然後調用CoolHash的函式支持即可。
由於CoolHash沒有關係資料庫的“db、table、row、col”等概念,使用樹型key取代了,所以sql create語句功能就不需要了。
“put()函式”對應於“sql insert、update”語句
“remove()函式”對應於“sql delete...where”語句
“put(map)函式”對應於“sql insert/update into...select...”語句
“get()函式”對應於“sql select...where id=?”語句
“get(map)”函式對應於“sql select *...”語句
“find(*,filter)”函式對於於“sql select * where col=%x%”語句
“and()函式”對應於“sql and”語句
“or()函式”對應於“sql or”語句
“sort(comp)函式”對應於“sql desc/group”語句

5、CoolHash實現了事務處理
CoolHash實現了ACID事務屬性,對寫入、更新、刪除的基本操作提供事務處理,在程式里調用begin()、commit()、rollback()等事務方法。
原子性(Atomic):事務內操作要么提交全部生效,要么回滾全部撤消。
一致性(Consistent):事務操作前後的數據狀態保持一致,一致性跟原子性密切相關,比如銀行轉賬前後,兩個賬戶累加總和保持一致。
隔離性(Isolated):多個事務操作時,互相不能有影響,保持隔離。
持續性(Durable) :事務提交後需要持久化生效。
另外,對於多個事務並發運算元據的情況,JDBC規範歸納出“髒讀(dirty read)、不可重複讀(non-repeatable read) 、幻讀(phantom read) ”三種問題,並提出了4種事務隔離級讓軟體製造商去實現,按照不同等級去容忍這三個問題,其實這種逐級容忍大部分都不實用,一個事務操作未提交時,按照事務隔離級,其他訪問應該是讀取到該事務開始前的數據,而不應該把事情搞複雜,CoolHash實現的是“TRANSACTION_SERIALIZABLE”,禁止容忍三種讀取問題。
6、CoolHash是一個資料庫Server
CoolHash支持遠程網路訪問,服務端發布一個IP和監聽連線埠,客戶端連線該IP連線埠即可進行遠程操作,CoolHash可承受多用戶高並發的網路連線訪問,來源於服務端設計的相似之處,大家知道Apache HTTP Server是一個多進程模型+共享記憶體方式實現,在前面講到的CoolHash會維持一個數據工人的進程組,數據工人不僅是並行計算的執行者,同時也是網路請求的回響者,數據工人身兼多職能很好的將服務端設計統一起來,避免重複設計,因此CoolHash也是一個很好的網路Server.
7、CoolHash的測試性能
有句話叫做“人生如白駒過隙”,用來形容性能就是一瞬間,資料庫性能最好能接近快取,或者直接可以當作快取來用,能在瞬間完成讀寫和各種查詢,這個瞬間就是秒。只有在幾秒內完成操作才能做到實時互動沒有等待感,否則就要離線互動。
CoolHash的單條寫入和讀取速度都在毫秒級別,寫和讀差別不大,讀略快於寫。
CoolHash的批量寫入和讀取速度都控制在秒級別,100萬數據寫入基準測試,普通台式機或者筆記本(4核4g)需要5-6秒,標準pc server(24核256g)需要2-3秒;批量讀、批量刪除和批量寫入的速度差不多。
CoolHash寫入快取和寫入持久的速度差別不大,100萬數據寫入快取基準測試,普通台式機或者筆記本(4核4g)需要5秒左右,標準pc server(24核256g)需要2秒左右。如果是10萬級別的數據讀寫,快取和持久的速度大致接近等同。
CoolHash的查詢速度控制在秒級別,100萬數據的模糊查詢(如like%str%)在沒有構建索引情況下,普通台式機或者筆記本(4核4g)需要2-3秒,標準pc server(24核256g)需要1-2秒;如果是重複查詢,由於CoolHash內部做了數據記憶體映射,第二次以後只需要毫秒級完成。
高並發多客戶端的吞吐量總體速度要快於單客戶端,但是受伺服器cpu、記憶體、io等性能限制,會傾向於一個平衡值。
資料庫引擎的性能通常也會受“key/value數據大小、數據類型、工人數量、硬體配置(記憶體大小、cpu核數、硬碟io、網路耗用)”等等因素影響。
比如同樣數量但是單條key/value數據很大,整體速度要慢一些;
基本數據類型的讀寫速度要快過高級數據類型(如java集合類);
工人數量也有影響,對於單條寫入讀取單工人和多工人差不多,但是批量操作和查詢多工人要好過單工人,普通台式機或者筆記本(4核4g)維持在8-10個工人可以打滿cpu,標準pc server(24核256g)最大可以維持到100個左右工人,但是工人數量就算能打滿cpu,也受限於後端硬碟io,到一定程度速度不再增長;
硬體配置對於性能的影響很大,普通筆記本的測試效果明顯不如標準pc server,筆記本記憶體較小,硬碟io弱,不適合做資料庫伺服器。記憶體大的伺服器測試效果好,載入數據和jvm垃圾回收速度會更快,目前測試採用的都是傳統SAS/SATA硬碟,如果採用固態硬碟進行硬體升級,隨機IO性能會得到進一步提升;
另外,由於存在網路耗用和序列化傳送,遠程網路操作的速度要比本地速度慢,但是區域網路內速度會接近本地速度,這是因為遠程網路操作涉及頻寬接入限制和線路共享等複雜消耗,而區域網路內主要取決於物理設備速度。
關於CoolHash性能的更多體驗,歡迎有興趣的朋友根據demo在各自的機器環境下,模擬各種極端條件下去壓測。
三、如何使用CoolHash
CoolHash追求極簡的編程體驗,不需要安排配置,服務端啟動CoolHashServer,指定好ip和連線埠,
客戶端大致編程步驟如下:
CoolHashClient chc = BeanContext.getCoolHashClient("localhost",2014);//連線CoolHashServer
chc.put("user.001.name","zhang");//寫入字元
chc.put("user.001.age",20);//寫入整數
chc.put("user.001.weight",50.55f);//寫入浮點數
chc.put("user.001.pet",new ArrayList());//寫入集合對象
String name = (String)chc.get("user.001.name");//讀取字元
int age = (int)chc.get("user.001.age");//讀取整數
float weight = (float)chc.get("user.001.weight");//讀取浮點數
ArrayList pet = (ArrayList)chc.get("user.001.pet");//讀取集合對象
chc.put("user.002.name","Li");
chc.put("user.002.age",25);
chc.put("user.002.weight",60.55f);
CoolKeyResult keyresult = chc.findKey("user.001.*");//查找用戶001的所有屬性
CoolKeySet ks = keyresult.nextBatchKey(4);//分頁獲取前4條結果
System.out.println(ks);//輸出[user.001.weight, user.001.age, user.001.name, user.001.pet]
CoolHashResult mapresult = chc.find("user.*.age", ValueFilter.greater(18));//查找年齡大於18歲的用戶
CoolHashMap hm = mapresult.nextBatch(10);
System.out.println(hm);//輸出[user.001.age=20, user.002.age=25]
......
更多的功能使用請去參考開發包里的demo
Coolhash壓測性能指標:
讀寫吞吐量超過百萬,千萬級別查詢1秒完成,連續48小時打滿CPU強壓力運行穩定。redis官方公布讀寫性能在10萬tps,leveldb官方公布寫性能在40萬tps,讀在6萬tps,redis和leveldb都是傾向k/v高速讀寫,但不具備高效檢索功能,沒有join關聯設計。coolhash可以拿去pk世界上任何的資料庫引擎產品。

除外,4.0版本還增加了以下特性:
1、多進程多執行緒的無縫融合,同一套接口,改改參數,從多進程變為多執行緒,開發者無需改寫程式邏輯;
2、提供高容錯任務分配算法API:doTaskCompete(m工人,n任務),將n個任務分給m個工人並行完成,根據任務大小設定工人數量,工人間能者多勞,性能好的工人機器爭搶乾更多的任務,同時跟現實工作一樣,如果有工人生病請假(故障),那么他的任務活由其餘工人代乾,除非所有工人出故障,否則就算只剩一個工人也應該加班把其他所有工人的活幹完,對整體計算來說,部分工人故障對計算結果來說不受影響,只是計算時間會延長。
Fourinone-4.15.08 新升級版本內容:
增強了CoolHash以下功能:
1、為了方便在Tomcat等多執行緒伺服器內調用,開通了CoolHash的多執行緒客戶端支持(4.05版由於jvm安全隔離性考慮只支持多進程客戶端),提升資料庫引擎對單條數據讀寫的高並發低延遲處理能力,做到1000-5000級別多執行緒並發讀寫幾毫秒完成(網路訪問,單server,8核8g記憶體普通配置)。詳見自帶Demo:ThreadClient.java
2、提供了CoolHash所有資料庫操作的異步支持,靈活利用異步操作可以實現很多資料庫常用功能,如多種備份策略的實現:同步備份、異步備份忽略成功、異步可靠備份,異步可靠備份即能提升性能又能確保成功,分庫分表後,利用異步操作可同時查詢多個CoolHash引擎數據源,將查詢結果進行合併,等等。詳見自帶Demo:AsynClient.java
3、提供同一個CoolHash客戶端同時可操作多個CoolHash Server,比如用於收到用戶請求根據資料庫業務分表路由,但是需要保持客戶端和所有服務端配置檔案的一致性。
4、增強了key模糊匹配能力,4.05版可以使用*模糊查詢key,比如user.*.age查詢所有人的年紀,4.15新增可以給*加上前後綴,如user.a*.age查找a開頭的人的年紀,user.*z.age查找z結尾的,user.a*z.age查找a開頭z結尾的。key模糊匹配和value的Filter過濾一起使用,可以實現類似sql語句的seclect * from where的查詢效果。很多kv持久化資料庫在數據容量超出了記憶體大小後性能會急劇降低,但是CoolHash此時的模糊查詢性能仍然表現良好,還是會維持著和記憶體檢索接近的速度,這是因為CoolHash帶有的冷熱切換特性,會將常訪問的數據調整到記憶體中,這樣即能保證性能又能極大節省硬體資源,提升單機存儲容量。
4.15.08版本同時提供jdk "1.7.0_79"編譯下"fourinone.jar"包和"jdk1.8.0_45"編譯下"fourinone-jdk8.jar"包。
由於google code國內訪問常常受限,4.15.08版本只更新oschina code和csdn code

相關詞條

熱門詞條

聯絡我們