memcachedb故名思義就是 memcached + bdb,是基于memcached Socket層和berkeley-db存儲層結構的實現, 是新浪互動社區技術團隊2007年的一項重大的技術成果,現在應用于新浪互動社區多個產品線中,其中包括新浪博客等重頭產品。能夠實現任意memcache api的調用、數據實時落地以及主輔實時備份。
協議:New BSD License
作者:stvchu, gary.caokai, forever.sky81
團隊:新浪互動社區事業部──博客產品
項目主頁:http://memcachedb.org/
為什么選擇memcached
為什么要選擇memcachedb:沒有什么特殊的原因,我們有最好的理由就是,在做到最大不犧牲數據讀、寫性能的前提下,我們能夠讓您原來存儲在memcache里的數據不再遭受系統宕機或者系統掉電而丟失,即使服務器電源爆炸了,只要硬盤還能夠正常工作,換到另外一臺服務器上,您的數據依然安然無恙地在硬盤上。
性能的擔憂:我們做過小數據測試,小數據(幾十個字節)數據的讀寫,每秒鐘并發能夠維持在5000+(單塊146Scis硬盤,CPU和內存配置幾乎可以忽略因為這不是性能瓶頸)。基本上滿足所有互聯網高效存儲的應用。
應用場合:需要頻繁讀寫的小數據。例如數字類服務就像點擊數,需要頻繁寫入小數據的例如評論系統,需要記錄用戶狀態的例如在線人數以及在線用戶等等。當然,如果您想用來存儲單筆超過10K以上的數據,例如新聞或者文章或者論壇帖子也可以,但是我們沒有嘗試過,如果您真的用來這樣子玩了,可以反饋給我們。
數據備份&&讀寫分離:memcachedb支持主輔實時無差異同步,配置主服務和輔服務僅僅需要很短的一條啟動命令。當然,您也可以利用這一便利特性來實現讀寫分離,那樣子會讓您的系統更加的高效。
穩定性:memcachedb目前被應用于新浪互動社區多個產品線中,具有鋼鐵般的品質,Sina出品,品質毋庸置疑。
編譯以及安裝
memcachedb跟memcache一樣,網絡socket數據處理依賴于libevent,所以,在安裝之前需要下載三個安裝包,即libevent、Berkeley Db以及memcachedb。
Libevent 下載頁面:http://monkey.org/~provos/libevent/ ,下載最新穩定版本就行。
Berkeley Db下載頁面:http://www.oracle.com/technology/software/products/berkeley-db/index.html 需要安裝4.6版本
memcachedb下載頁面:http://code.google.com/p/memcachedb/ 下載最新版本 0.1.0版本
按照順序安裝,Libevent和Berkeley Db按照常規安裝即可,這里以Linux 環境為標準。
[======Libevent=====]
tar -zxvf libevent-1.3e.tar.gz
cd libevent-1.3e
./configure
make && make install
[======Berkeley Db=====]
tar -zxvf db-4.6.19.tar.gz
#需要進入特定操作系統編譯環境,更常規軟件的編譯有些區別
cd db-4.6.19/build_unix/
#然后才能夠開始編譯
../dist/configure
make && make install
#如果沒有指定特殊安裝路徑,編譯完成,需要將Berkeley Db運行庫的路徑添加到系統配置里面
echo "/usr/local/BerkeleyDB.4.6/lib/" >> /etc/ld.so.conf
#重載系統Ld運行庫
ldconfig
[======Memcachedb=====]
tar -zxvf memcachedb-0.1.0.tar.gz
cd memcachedb-0.1.0
#如果您要存儲的內容的鍵值的長度和單筆內容的長度有變化,您需要更改一個文件 memcachedb.h
vim memcachedb.h
////////////////////////////////////////////////////////////
#define END_LEN 32 ----> 這是是 Key+Value 的最大長度
#define END_LEN_STR "31" ---> 這是是 key 的最大長度
/////////////////////////////////////////////////////////
#默認key鍵值只預留了31個字節的長度,單筆數據最長是32個字節數。
#例如您如果需要用這個玩藝來存儲文本內容數據,假設您的鍵值是一個32個字節的md5,單筆數據允許最長10K,那您可以設定
////////////////////////////////////////////////////////////
#define END_LEN 102400 ----> 這是是 Key+Value 的最大長度
#define END_LEN_STR "32" ---> 這是是key的最大長度
/////////////////////////////////////////////////////////
#修改完之后,直接make就行
make
#編譯完之后,將生成可執行memcachedb拷貝到 /usr/sbin/
cp -f memcachedb /usr/sbin/
#啟動 memcachedb
#第一種,讀寫合并模式,即不做輔拷貝,即讀又寫,不做冗余備份
memcachedb -p21211 -d -r -u root -H /data/mdb_11211 -N
#第二種,讀寫分離/備份模式
#主服務器 192.168.0.1 讀寫監聽 11211 ,同步通過31211的端口完成,不占用繁忙的主服務端口
memcachedb -p21211 -d -r -u root -H /data/mdb_11211_m -N -R 127.0.0.1:31211 -M
# 輔服務器 192.168.0.2 只讀監聽 21212,從192.168.0.1 的 31211端口同步數據,同時再開一個31212端口對外提供數據同步服務
memcachedb -p21212 -d -r -u root -H /data/mdb_11211_from_16801_s -O 192.168.0.1:31211 -R 192.168.0.2:31212 -S
新聞熱點
疑難解答