九九精品久久久久久久久|亚洲福利精品一区二区三区|国产精品自产拍在线观看免费|日韩在线播放欧美字幕

游客 你可以選擇到 登錄 注冊帳號 忘記密碼?
  • 服務(wù)熱線(xiàn):
    13999268016
haisql_memcache產(chǎn)品優(yōu)點(diǎn)介紹
來(lái)源:未知 | 發(fā)布時(shí)間:2017-05-19 | 瀏覽次數:
Haisql_memcache優(yōu)點(diǎn)介紹
優(yōu)點(diǎn)概括:
    公司研發(fā)的國產(chǎn)的高性能數據庫haisql_memcache,性能上遠遠超越了國際上流行的KV數據庫memcached和Redis,Memcached/Redis是由國際上的專(zhuān)家編寫(xiě),而我們的產(chǎn)品比Memcached更多功能,支持事務(wù),支持微線(xiàn)程,支持pipeling,支持數據日志,支持掉電保護的高性能KV數據庫,具有高并發(fā)性,并發(fā)數量無(wú)上限,性能非???,數量無(wú)上限,實(shí)現了實(shí)時(shí)數據庫的性能。在低端4核CPU上,查詢(xún)性能比memcache快70%,更新插入性能比memcached快30%,單核性能比Redis更快。同時(shí)兼容memcached指令集,包括返回的內容和錯誤提示均一致,可作為一個(gè)特殊版本的服務(wù)器直接與memcached客戶(hù)端連接。
    數據結構比較簡(jiǎn)單,因為是內存數據庫,全部數據都在內存中,各類(lèi)操作簡(jiǎn)單到了極致,全部都是文本格式,包括日志在內,都一樣。
 因為是內存數據庫不需要讀磁盤(pán),這個(gè)產(chǎn)品沒(méi)有使用file_mapping等磁盤(pán)讀技術(shù),磁盤(pán)IO只使用了C++ iofstream。各種邏輯處理也比較簡(jiǎn)單,例如:
 日常的更新刪除插入操作,要寫(xiě)日志,日志內容就是set指令和delete指令。
在正常退出的時(shí)候,將全部數據保存(更名數據表為舊,保存數據,保存成功刪除舊數據表),如果全部數據表都保存成功,就清空日志。
 在啟動(dòng)時(shí),先檢查是否存在舊數據表,如果存在,讀取舊數據表,再讀取日志,否則,直接讀取新數據表就可以.
優(yōu)點(diǎn)詳細介紹:
    1.我們使用了先進(jìn)的stackless微線(xiàn)程架構用于數據處理,stackless微線(xiàn)程調度的內存開(kāi)銷(xiāo)是一個(gè)函數對象, 通常大小不過(guò)幾個(gè)字節到幾KB字節. 因此stackles微線(xiàn)程無(wú)需當心內存開(kāi)銷(xiāo),也沒(méi)有CPU線(xiàn)程切換的開(kāi)銷(xiāo),性能非常好。
微線(xiàn)程的優(yōu)點(diǎn):
    (1)消耗小, 切換快, 一個(gè)進(jìn)程可以創(chuàng )建成千上萬(wàn)個(gè)微線(xiàn)程.
    (2)小任務(wù)順序編程很符合人的思維方式, 規避純異步編程中狀態(tài)機的復雜性. 使得使用微線(xiàn)程寫(xiě)的程序將更加的直觀(guān), 邏輯描述方便, 簡(jiǎn)化編程.纖程用于化異步為同步, 你可以進(jìn)行一個(gè)異步操作以后就切換纖程,等到異步操作完成以后在切換回來(lái),這樣,在邏輯上相關(guān)的代碼就可以寫(xiě)到一個(gè)函數里面,而不用人為的分到多個(gè)回調函數中.
    (3)每個(gè)CPU只綁定一個(gè)線(xiàn)程,每個(gè)線(xiàn)程處理多個(gè)微線(xiàn)程的TCP/IP數據包,形成一個(gè)N個(gè)CPU:M個(gè)連接的方案,這樣就完全避免了線(xiàn)程的切換,極大的提高了網(wǎng)絡(luò )層的并發(fā)量. 
    2.haisql_memcache支持日志功能,當服務(wù)器突然斷電時(shí)造成的損失,意外關(guān)閉造成的損失,只要存在數據日志,就可以通過(guò)利用它來(lái)恢復數據,輕松排除數據庫故障.在系統崩潰/故障等情況下,可以保證數據庫的一致性,從而提高了數據庫的可靠性。
故障一:服務(wù)器突然斷電造成的損失
  服務(wù)器如果因為突然斷電或者其他一些原因意外關(guān)機時(shí),再重新啟動(dòng)服務(wù)器后會(huì )出現一些數據的損失,這是因為數據庫中的數據發(fā)生更改后,并不會(huì )在第一時(shí)間就把數據寫(xiě)入到硬盤(pán)中,為了提高數據庫的運行效率,往往是先把數據寫(xiě)入到數據高速緩存中,同時(shí)把更改情況寫(xiě)入到日志中,等到一定情況數據庫系統才會(huì )把數據寫(xiě)日到硬盤(pán)文件中,此時(shí),如果數據庫系統突然發(fā)生斷電或故障,數據庫系統很有可能還沒(méi)有把緩存中的修改后的數據寫(xiě)入到硬盤(pán)中,而日志文件的存在,支持了掉電恢復,即當重新啟動(dòng)時(shí),系統會(huì )對每個(gè)數據庫執行恢復操作,將日志中每個(gè)未完成的事務(wù)都將回調,以確保數據庫數據的完整性.
故障二:解決服務(wù)器意外關(guān)閉造成的損失
  有時(shí)候出于數據庫高可用性的目的,需要在生產(chǎn)服務(wù)器之外的地方再部署一臺數據庫服務(wù)器,當生產(chǎn)服務(wù)器出現故障不可用時(shí),則可以馬上啟用這個(gè)備用的服務(wù)器,所以就需要保證生產(chǎn)服務(wù)器與備用服務(wù)器之間數據的同步,而haisql_memcache數據庫就是通過(guò)日志的復制來(lái)實(shí)現生產(chǎn)服務(wù)器與備用服務(wù)器之間的同步的.生產(chǎn)服務(wù)器將生產(chǎn)數據庫的活動(dòng)日志發(fā)送到一個(gè)或多個(gè)目標服務(wù)器,每個(gè)輔助服務(wù)器將該日志還原為其本地的輔助數據庫,從而實(shí)現備用服務(wù)器與生產(chǎn)服務(wù)器之間數據的一致性.
    3.性能非???/strong>,主要體現在:
    1)有一個(gè)快速的網(wǎng)絡(luò )層,基于Boost::asio基礎上二次封裝優(yōu)化改進(jìn)后的網(wǎng)絡(luò )庫,網(wǎng)絡(luò )層總行數超過(guò)4000行。
 2)比std::unordered_map更快,rehash性能抖動(dòng)小的自主研發(fā)的高性能 基于 環(huán)形隊列 結構的 circular_hash_map 庫。環(huán)形隊列大小自動(dòng)收縮擴展。
 3)log日志單獨線(xiàn)程處理,因此, 有更快的速度,有更多的合并寫(xiě),極大提高了日志的寫(xiě)性能。
 4)wait_free_mpsc_queue 多生產(chǎn)者單消費者無(wú)等待隊列的應用, 極大的提高了多線(xiàn)程的并發(fā)性能。 多線(xiàn)程寫(xiě)日志就是通過(guò)此隊列傳遞給log單線(xiàn)程實(shí)現。
 自主研發(fā)的多生產(chǎn)者單消費者無(wú)等待隊列,性能非常好,比boost庫中最快的wait_free_spsc_queue快很多, 時(shí)延更小,可以支持任意對象放入到隊列中(boost庫中的那個(gè)只支持普通POD數據,最大長(cháng)度8字節),支持雙向數據傳送(boost庫只支持單向,我們的版本支持pop處理后的push線(xiàn)程的callback回調數據的傳送),支持無(wú)任務(wù)自動(dòng)休眠,支持push自動(dòng)回調(10微秒),自動(dòng)pop處理, 自動(dòng)調用after_pop_all,自動(dòng)call_back調用.  內部主要是基于std::atomic和memory_order相關(guān)的命令來(lái)實(shí)現,有一定的技術(shù)難度。
    使用時(shí),預先設置各function函數,主程序只要push數據,其他過(guò)程都是自動(dòng)完成的。
 5)各種高性能外圍庫的實(shí)現,重寫(xiě)了很多std庫。 例如:常用的二進(jìn)制和十進(jìn)制互轉,常規std庫一般是循環(huán)將二進(jìn)制除10來(lái)實(shí)現的, 我們的庫是使用了 5的魔術(shù)數字的 乘法+移位來(lái)實(shí)現的,性能提高了很多。類(lèi)似std::to_string(T&)之類(lèi)的庫, 性能都有了幾倍的提高。
 6)各類(lèi)鎖,很多公司和產(chǎn)品都有提供自己寫(xiě)的鎖,以便提供比std:;mutex更好的性能,例如:mysql中的自旋鎖, 與很多公司此類(lèi)庫直接使用cas指令不同,我們主要是用std::atomic來(lái)實(shí)現,兼容性更好,參考了C++標準化委員會(huì )的建議代碼,增加了鎖沖突后yield()的機制,無(wú)其他任務(wù)可執行時(shí)候每次spin檢查延遲時(shí)間只有0.1微秒,有其他任務(wù)可執行時(shí)將切換線(xiàn)程釋放CPU,標準鎖class大小只有1個(gè)字節, 兼容所有操作系統和所有CPU。
    庫中已經(jīng)實(shí)現的鎖包括:標準鎖,讀寫(xiě)鎖(寫(xiě)優(yōu)先鎖), 讀寫(xiě)鎖(讀優(yōu)先鎖),可重入鎖。所有的鎖在用法上與std庫兼容, 因此,可以直接使用std::lock_guard等各類(lèi)上鎖的標準std操作。
    4.我們產(chǎn)品的單核查詢(xún)性能比redis快,測試方法:在雙核CPU下本地測試,等效于1個(gè)CPU做客戶(hù)端,1個(gè)做服務(wù)器端, 利用redis_benchmark測試redis, 用memcslap測試我們的軟件,總體流程都是先插入10000條記錄,然后新建900連接查詢(xún),每連接10000次查詢(xún),總共測試900萬(wàn)次查詢(xún),每次查詢(xún)value包大小4096字節,redis花費93.46秒, 我們的軟件花費63.792秒, 在雙核下我們性能比redis的性能快46.5%,在多核CPU下快數倍.
    5.我們產(chǎn)品的查詢(xún)性能比memcache快70%,測試方法:memcslap, KV 數據包大小4Kbyte, 4核8線(xiàn)程3.4G主頻DDR3內存,讀900萬(wàn)次數據,900并發(fā),讀性能39萬(wàn)QPS,比memcache快70%;寫(xiě)100萬(wàn)次數據, 100并發(fā),寫(xiě)性能32萬(wàn)TPS,比memcache快30%。 
    6.我們產(chǎn)品的服務(wù)器的并發(fā)數量理論上只受限于內存的數量,因此在內存足夠的情況下,可以達到并發(fā)數量無(wú)上限。Haisql_memcache在普通4核8線(xiàn)程3.4G主頻CPU下,網(wǎng)絡(luò )層每秒新建連接的能力大約是每秒新建4萬(wàn)個(gè)連接,每秒網(wǎng)絡(luò )層包轉發(fā)能力超過(guò)百萬(wàn)QPS, 測試工具是ab(apache benmark), 這個(gè)性能指標是超越Apache http和Nginx的網(wǎng)絡(luò )層性能,可在網(wǎng)站下載Echo Server測試驗證。
    7.Haisql_memcache目前的集群方案是利用客戶(hù)端Hash,今后有更好的集群方案??蛻?hù)端做了一次哈希,可以增加大量haisql_memecache到集群中。
    8.我們團隊擁有自主研發(fā)的高并發(fā)高性能C++基礎庫,核心包括:高性能智能指針,比std庫的智能指針(shared_ptr/unique_ptr等)快一倍,先進(jìn)的無(wú)鎖無(wú)等待wait_free_queue隊列,比boost庫快50%, 各種高性能并發(fā)鎖(包括了標準鎖,讀寫(xiě)鎖等)比現有std庫快很多, 微線(xiàn)程任務(wù)調度庫,二進(jìn)制/十進(jìn)制互轉換,比std庫快數倍,更快的hash_map庫,基于Intel SSE4.2的更快的硬件編碼crc32/crc64庫, 比boost庫快數倍,這些庫是公司自主研發(fā)的,并且性能上具前列, 遠遠超越了C++ std庫和boost庫的性能, 因此,任何高并發(fā)軟件只需要用我們的庫重新鏈接編譯一次,性能上都會(huì )有不少的提高, 也說(shuō)明了我們對于C/C++語(yǔ)言的理解和積累超越了多數團隊。
    技術(shù)團隊掌握自主研發(fā)的核心技術(shù),掌握了下一代數據庫的關(guān)鍵技術(shù),已經(jīng)研發(fā)出上線(xiàn)的內存數據庫比主流memcache快60%,比常規數據庫快數十倍,SQL數據庫還在研發(fā)中,性能上在數據庫領(lǐng)域有望成為下一代數據庫的領(lǐng)跑者。
?
?
?上一篇:Haisql_memcache最佳實(shí)踐方案
?下一篇:沒(méi)有了
咨詢(xún)熱線(xiàn):13999268016
地址:新疆維吾爾自治區烏魯木齊市水磨溝區南湖東路77號新疆上??萍己献骰匕藢?01室 固話(huà):6583723