LLServer是本人基於libevent和leveldb這兩個開源軟體,開發的輕量級資料存放區伺服器軟體,藉助libevent高效網路介面實現對leveldb的訪問封裝。
項目網址:http://code.google.com/p/llserver/
使用環境:Linux
作者:代震軍
目前發布版本:1.0
其支援http協議和memcached協議。也就是可以通過瀏覽器或現有的memcached用戶端來進行資料的CURD操作。
下面簡單介紹一下如何安裝使用LLServer。
LLServer 編譯安裝:
1.安裝libevent2.0ulimit -SHn 65535
wget http://monkey.org/~provos/libevent-2.0.12-stable.tar.gz
tar zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable/
./configure --prefix=/usr
make && make install
cd ../
2.通過svn:用戶端下載leveldb到本地leveldb檔案夾,連結:http://leveldb.googlecode.com/svn/trunk/
或暫時用我這個打好包的地址下載:
wget http://llserver.googlecode.com/files/leveldb.tar.gz
tar zxvf leveldb.tar.gz
之後編譯安裝 cd leveldb/
make -f Makefile
cp libleveldb.a /usr/local/lib/
cp -rf include/* /usr/local/include/
cd ../
3.LLServer:wget http://llserver.googlecode.com/files/llserver-1.0.tar.gz
tar zxvf llserver-1.0.tar.gz
cd llserver/
make -f Makefile
make install
cd ../
4、LLServer 使用文檔:
[root@~]# llserver -h
-l <ip_addr> 監聽的IP地址,預設值為 0.0.0.0
-p <num> 監聽的TCP連接埠(預設值:11211)
-x <path> 資料庫目錄,目錄不存在會自動建立(例如:/llserver/data)
-c 資料緩衝隊列單位,預設為100m
-t <second> HTTP請求的逾時時間
-s 1:http協議 other:memcached協議
-d 以守護進程運行
-h 顯示協助
使用樣本:
llserver -l 127.0.0.1 -p 11211 -d -s 1 -x /llserver/db0
HTTP GET 協議(以curl命令為例):
curl "http://127.0.0.1:11211/?opt=set&charset=utf-8&key=username&value=daizhj"
curl "http://127.0.0.1:11211/?opt=set&charset=utf-8&key=username&value=daizhj&exptime=(unix時間戳記,設定有效期間)"
HTTP POST 協議(以curl命令為例):
curl -d "daizhj" "http://127.0.0.1:11211/?opt=set&charset=utf-8&key=username"
開啟瀏覽器:
如果set成功,返回:LLServer_SET_OK
如果set失敗,返回:LLServer_SET_ERROR
擷取資料:
HTTP GET 協議(以curl命令為例):
curl "http://127.0.0.1:11211/?opt=get&charset=utf-8&key=username"
開啟瀏覽器:
如果get成功,返回相應資料資訊
如果get失敗,返回:LLServer_GETKEY_ERROR
刪除資料:
HTTP GET 協議(以curl命令為例):
curl "http://127.0.0.1:11211/?opt=delete&key=username"
開啟瀏覽器:
如果delete成功,返回:LLServer_DELETE_OK
如果delete失敗,返回:LLServer_DELETE_ERROR
刪除全部資料:
HTTP GET 協議(以curl命令為例):
curl "http://127.0.0.1:11211/?opt=deleteall&key=username"
開啟瀏覽器:
如果delete成功,返回:LLServer_DELETEALL_OK
如果delete失敗,返回:LLServer_DELETEALL_ERROR
使用telnet連結樣本(基於memcached協議):
llserver -l 10.0.4.188 -p 11211 -d -s 2 -x /llserver/db1
set操作:
client => set username 0 0 6
daizhj
llserver=> STORED
get操作:
client=> get username
llserver=> daizhj
delete操作:
client=> delete username
llserver=> DELETED
quit:
client=> quit
llserver=> close client_fd
version:
client=> version
llserver=>1.0
用戶端 C#源碼包:
1.這裡將Discuz!NT使用的memcached 用戶端(已修改過部分代碼),大家可以使用它(支援連結池)來直接存取LLServer,相應的樣本在壓縮包的MemcachedApp\MemcachedApp\sample\sample_1.aspx中。
:http://files.cnblogs.com/daizhj/MemcachedApp_llserver.rar
2.當然也可以使用c#的httpwebrequest來直接存取,比如(代碼源自discuz!nt):
namespace Discuz.Common
{
/// <summary>
/// http POST請求url
/// </summary>
/// <param name="url">請求的url連結</param>
/// <param name="method">方法名稱,如"POST", "GET"</param>
/// <param name="postData">方法名稱為"POST"時,所有提交的資料</param>
/// <returns></returns>
public static string GetHttpWebResponse(string url, string method, string postData)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = method;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = string.IsNullOrEmpty(postData) ? 0 : postData.Length;
//request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.Timeout = 60000;
HttpWebResponse response = null;
try
{
if (!string.IsNullOrEmpty(postData))
{
StreamWriter swRequestWriter = new StreamWriter(request.GetRequestStream());
swRequestWriter.Write(postData);
if (swRequestWriter != null)
swRequestWriter.Close();
}
response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
catch
{
return null;
}
finally
{
if (response != null)
response.Close();
}
}
//這裡發送請求並返回資料
string result = GetHttpWebResponse("http://127.0.0.1:11211/?opt=get&charset=utf-8&key=username", "GET", null);
當然你可也以用其它語言的memcached用戶端來訪問LLServer,不過有一點要說明的是,目前llserver只儲存序列化的字串對象,如果你的資料為泛型或數組等類型,請先序列化之後再進行儲存。
還有就是在c#裡可以對資料進行二進位序列化,這裡必須將序列化後的對象進行base64位編碼之後再儲存,否則會報異常,切記。
http://blog.nosqlfan.com/html/2819.html LevelDB、TreeDB、SQLite3效能對比測試
http://blog.nosqlfan.com/html/2882.html LevelDB內部實現
好了,大家下載體驗一下吧,操作資料速度飛快呀。
原文連結:http://www.cnblogs.com/daizhj/archive/2011/08/23/2150422.html
作者: daizhj, 代震軍
微博: http://weibo.com/daizhj
Tags: libevent,leveldb,llserver,key/value db