- 论坛徽章:
- 0
|
近期使用到了日本人开发的Handlersocket, 这是一个适用于Mysql InnoDB引擎的nosql数据库接口. 它使用C++实现,寄生在mysql服务器中,通过独立的几个端口进行服务,类似于memcache, 但是其协议更贴近数据库,可以进行定量的查询(limit/skip)/插入/update/update并返回原值等多种和sql等价的操作,但是不经过sql层.
Handlersocket的主页在github上: https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL
我为它编写了一个Haskell客户端API: https://github.com/wuxb45/HandlerSocket-Haskell-Client http://hackage.haskell.org/package/HandlerSocketClient
用cabal即可安装: cabal install HandlerSocketClient
使用: 假设server端已经配置好,客户端可以非常简单地进行一些常用操作,并且还能用更低级的API完成一切复杂的操作.
haskell测试代码: main = do hs <- connectTo "127.0.0.1" "9999" r1 <- runReqOpen hs "test" "t1" "PRIMARY" "k,v" putStrLn $ show r1 r2 <- runReqFind hs ">" "1" 100 putStrLn $ show r2 r3 <- runReqInsert hs ["99", "77"] putStrLn $ show r3 r4 <- runReqUpdate hs "99" ["101", "77"] putStrLn $ show r4 r5 <- runReqDelete hs "101" putStrLn $ show r5 r6 <- runReqGeneric hs ["0","+","2","555","999"] putStrLn $ show r6
对于varchar的项,直接可以存入2进制串,包括0. open操作的第四个参数必须使用"PRIMARY", 而最后一个参数要给出用逗号分隔的key,values字段, 对于多个字段也是支持的, key字段一定要是PRIMARY,并且只有1个PRIMARY. 建表语句示例: create table test.t1 (k int primary key, v varchar(1000))engine=InnoDB; 注意主键和指定InnoDB; |
|