返回信息流RT,前一段时间Boss安排了让我做个测试,只发给我俩外文网站,当时就崩溃了,刚毕业,学的是通信,对数据库还一知半解呢,就让我干这活,很痛苦的说.曾经来板块求大牛指导,结果木有人关注.[ema16]伤心了好久呢....只好硬着头皮自己捣鼓.[ema13]到今天终于有点眉目,[ema25]发个学习到的配置安装以及到目前的测试过程吧.与大家共同分享,学习,如有不对之处还请大家批评指正.[ema11]
我的配置测试经历(这纯粹是我安装过程中的磕磕碰碰,没时间的同学可以直接跳转到下面的标准安装步骤)
1.先找了个LevelDB的安装教程:http://blog.nosqlfan.com/html/1899.html
此教程也是翻译了http://fallabs.com/blog/promenade.cgi?id=30
于是乎我就开始按图索骥:
a.svn checkout http://leveldb.googlecode.com/svn/trunk/ leveldb-read-only 下载leveldb
b.vim Makefile 在CFLAGS = -c -I. -I./include $(PLATFORM_CFLAGS) $(OPT)后面添加 -fPIC
c.make 结果出问题 报了XX错误,大意是编不了 百度Google了下报错的语句(PS:查找问题解决方面话说Google真的比百度强不少)问题的原因是gcc版本太低(4.1.2),⊙﹏⊙b汗[ema13],好吧,那就装最新版本呗.
下载了最新的gcc-4.6.0,开始安装.
附安装步骤:
(1)解压,不多说
(2)mkdir建立了个gcc-build文件夹
(3)在gcc-build下 XX/gcc-4.6.0/configure --prefix=/usr/local/gcc-4.6.0
结果悲剧了...说需要库mpc mpfr gmp XX+以上的版本支持...我累个去这不坑爹嘛[ema24]
赶紧下了mpc-3.0.1 mpfr-0.9 gmp-5.0.2压缩包开始装之,从网上找了个教程:
http://hi.baidu.com/drcrow/blog/item/d95bad3cc1f4e2f314cecb47.html
不过有一步我没用:sudo apt-get install autogen
注意把里面的版本号改改.
安装完了gcc后,网页里有下面的语句:
sudo ln -s -f /usr/local/gcc-4.6.0/bin/gcc /usr/bin/gcc0x
sudo ln -s -f /usr/local/gcc-4.6.0/bin/g++ /usr/bin/g++0x
搜索了一下发现是做了个软链接...╮(╯▽╰)╭选修过Linux上课睡觉[ema14]的孩纸伤不起啊
还得注意把命令export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.9/lib:/usr/local/gmp-5.0.2/lib:/usr/local/mpfr-3.0.1/lib给输入了.每次重启机器都得输...
!!!注意!!!这才是悲剧的开始![ema2]
尼玛我开始满心欢喜的回到c.步开始make...结果又一次悲剧了,而且是同样的错误....好吧,我就gcc -v了一下看了看gcc版本,竟然还是4.1.2.纠结啊.赶紧找问题,才发现上面的链接只不过是做了一个gcc0x和g++0x作为gcc-4.6.0版本的gcc编译,make的时候还是按照旧版本4.1.2来用,我杀人的心,不rm -rf gcc4.1.2的心都有了.于是乎我就rm /usr/bin/gcc rm /usr/bin/g++ 删除了4.1.2版本的链接 写了新的软链接命令:
$ sudo ln -s -f /usr/local/gcc-4.6.0/bin/gcc /usr/bin/gcc
$ sudo ln -s -f /usr/local/gcc-4.6.0/bin/g++ /usr/bin/g++
大功告成!
紧接着make
$ sudo cp libleveldb.a /usr/local/lib
$ sudo cp -r include/leveldb /usr/local/include
一切搞定.
2.教程里需要那个(翻译过来就是京东大亨)进行挂载.接下来安装最新版本的kyototycoon-0.9.49
于是下载解压
$ cd kyototycoon-0.9.49
$ ./configure 又尼玛报错了...说缺少kccommom.h文件(由此说明这个教程极其不靠谱)
我百啊度啊,我谷啊歌啊,没怎么发现实用信息.倒是发现了那个京东热,[ema41]不对,大亨开发的跟kyototycoon有渊源的kyotocabinet.还有个孩纸发了着两个的安装教程.俩人具体的暧昧的关系大家可以自己查查.
安装教程:http://hi.baidu.com/you5a_com/blog/item/99ef51a6df196ce29052ee9c.html
估计是得把kyototycoon的兄弟kyotocabinet先给装上.
嗯,下载了kyotocabinet-1.2.65.解压缩,make,make check.又悲剧了...
错误大致是./kcutilmgr: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./libkyotocabinet.so.12)这么几句类似的
木有办法,继续查.最后得到结论我有两条路可以走:1.更新glibc 2.删除原来libstdc++.so.6的软链接,做一个与gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15的软链接.
我最终选择走了第2条路,其实最开始走的是第3条路,都说条条道路通罗马,结果我就被堵在死胡同上了.[ema1]
第3条路是这样的:下载了个libstdc++.so.6.0.10删除了原来 libstdc++.so.6 -> libstdc++.so.6.0.8的链接,建立了到他的ln -s /sur/bin/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6.结果还是报错,我就退回去走第1条路,发现第一条路网上失败案例比较多,搞不好就测试服务器就起不来了.我又回到了第3条路,这次终于查到了靠谱的,一个老外说要用最新的libstdc++.so.6.0.15,原话是I copied it in to /usr/lib and redirected libstdc++.so.6 to point to the new one, and now everything works.
一看到everything works 我立马激动了!幸福再向我招手呢!
赶紧将libstdc++.so.6.0.15 cp到 /usr/bin 做了个到 libstdc++.so.6的软链接
尼玛还是不行.彻底崩溃了...
清楚的记得当时的情况:一看晚上7点了,赶紧吃饭去,不管了
一顿饭无话…
吃晚饭后就纠结的坐到了电脑前,盯着电脑发呆,然后眼睛一亮,大叫一声:我真TMD是个SB! 人家报的错明明是lib64文件夹,我硬摁着lib文件夹下的不放,肯定不行啊.一尝试,果真行了.
接下来就一切顺利,安装完了kyotocabinet-1.2.65,再安装kyototycoon-0.9.49.
成了...
接下来就继续按照那操蛋的教程继续来
$ cd lab/leveldb
$ make
$ sudo cp ktplugdblevel.so /usr/local/lib
按照命令:$ ktserver -pldb /usr/local/lib/ktplugdblevel.so casket.ldb启动,我后面加了个&来让他后台启动,不然一Ctrl+c立马就server stop
再按照下面的命令来插入k/v数据,结果不行
$ ktremotemgr set japan tokyo
$ ktremotemgr set korea seoul
$ ktremotemgr set china beijing
查了下ktremotemgr帮助,果断的改为 ktremotemgr set -host 127.0.0.1 china beijing. 果断插入成功
再来查询下
$ ktremotemgr list -pv -host 127.0.0.1
除了有时间戳,看起来不爽外,一切都还好.[ema21]
到这里在KC上挂载LevelDB的整个过程算是结束了,作为Linux菜鸟,中间耗时无数.现总结如下:
首先要保证gcc版本以及相关联库mpc,gmp,mpfr版本较新.本人安装的是gcc-4.6.0 mpc-0.9 mpfr-3.0.1 gmp-5.0.2
gcc-4.6.0安装过程如下:
1.解压gmp-5.0.2,在其同级目录下建立了gmp-build
然后在gmp-build下
$ ../gmp-5.0.2/configure --prefix=/usr/local/gmp-5.0.2
$ make
$ sudo make install
2.解压mpfr-3.0.1,在其同级目录下建立了mpfr-build
然后在mpfr-build下
../mpfr-3.0.1/configure --prefix=/usr/local/mpfr-3.0.1 --with-gmp=/usr/local/gmp-5.0.2
make
sudo make install
3.解压mpc-0.9,在其同级目录下建立了mpc-build
然后在mpc-build下
$ ../mpc-0.9/configure --prefix=/usr/local/mpc-0.9 --with-gmp=/usr/local/gmp-5.0.2 --with-mpfr=/usr/local/mpfr-3.0.1
$ make
$ sudo make install
4.解压gcc-4.6.0,在其同级目录下建立了gcc-build
然后再gcc-build下
$ ../gcc-4.6.0/configure --prefix=/usr/local/gcc-4.6.0 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1
make
$ sudo make install
5.然后设置export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.9/lib:/usr/local/gmp-5.0.2/lib:/usr/local/mpfr-3.0.1/lib
6.删除/usr/bin/下的gcc,g++建立新的软链接
ln -s /usr/local/gcc-4.6.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-4.6.0/bin/g++ /usr/bin/g++
LevelDB安装配置过程:
1.下载:
$ svn checkout http://leveldb.googlecode.com/svn/trunk/ leveldb-read-only
2.配置:
进入leveldb-read-only,对Makefile进行修改,在CFLAGS = -c -I. -I./include $(PLATFORM_CFLAGS) $(OPT) 后添加 -fPIC
如果是Ubuntu,那么再修改port/port_posix.h文件:将#include <cstdatomic>换成#include <atomic>,这里面貌似涉及gcc版本问题,不过我的测试机为CentOS 5.4,不需要关注此项修改
3.安装:
$ make
$ sudo cp libleveldb.a /usr/local/lib
$ sudo cp -r include/leveldb /usr/local/include
在KC上挂载式安装LevelDB:
1.安装kyotocabinet-1.2.65
编译安装前必须要做好gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15的软链接.
32位: ls -l /usr/lib/libstdc++.so.6 将显示的软链接删除然后建立新的链接 ln -s gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15 /usr/lib/libstdc++.so.6
64位: 同上 只不过目录变为/usr/lib64/libstdc++.so.6
随后,
$ cd kyotocabinet-1.2.65
$ ./configure(可以配置安装地址,我用的默认)
$ make
$ sudo make install
2.安装kyototycoon-0.9.49(最新版本里有leveldb的应用文件)
$ cd kyototycoon-0.9.49
$ ./configure
$ make
$ sudo make install
$ cd lab/leveldb
$ make
$ sudo cp ktplugdblevel.so /usr/local/lib
3.启动LevelDB插入数据
启动服务:
$ ktserver -pldb /usr/local/lib/ktplugdblevel.so casket.ldb & (加个后台执行命令,否则在前台Ctrl+c会退出server服务)
关于ktserver和ktremotemgr的部分参数可以搜索一下,默认端口为1978
录入数据:
$ ktremotemgr set -host 127.0.0.1 japan tokyo
$ ktremotemgr set -host 127.0.0.1 korea seoul
$ ktremotemgr set -host 127.0.0.1 china beijing
列出数据:
$ ktremotemgr list -pv -host 127.0.0.1
这是一条镜像帖。来源:北邮人论坛 / database / #5762同步于 2011/7/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
菜鸟学测Google最新key-value数据库leveldb(持续更新测试结果)
slg7788521
2011/7/8镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
关于测试部分正在完善--
测试部分:
仔细研究了http://blog.yufeng.info/archives/1327的测试结果发现貌似Leveldb自带测试程序db_bench,这让我感到很蛋疼,原来只需要运行下db_bench,输入好数据即可...
贴几个我的测试数据吧:
1千万条数据,数据大小为2M
# ./db_bench --num=10000000 --write_buffer_size=$((2*1024*1024))
LevelDB: version 1.2
Date: Fri Jul 8 13:30:10 2011
CPU: 2 * Intel(R) Celeron(R) CPU E3400 @ 2.60GHz
CPUCache: 1024 KB
Keys: 16 bytes each
Values: 100 bytes each (50 bytes after compression)
Entries: 10000000
RawSize: 1106.3 MB (estimated)
FileSize: 629.4 MB (estimated)
WARNING: Optimization is disabled: benchmarks unnecessarily slow
WARNING: Assertions are enabled; benchmarks unnecessarily slow
WARNING: Snappy compression is not enabled
------------------------------------------------
fillseq : 2.132 micros/op; 51.9 MB/s
fillsync : 5872.921 micros/op; 0.0 MB/s (10000 ops)
fillrandom : 21.592 micros/op; 5.1 MB/s
overwrite : 35.226 micros/op; 3.1 MB/s
readrandom : 27.210 micros/op;
readrandom : 24.732 micros/op;
readseq : 0.515 micros/op; 214.9 MB/s
readreverse : 0.765 micros/op; 144.6 MB/s
compact : 22968284.845 micros/op;
readrandom : 12.044 micros/op;
readseq : 0.351 micros/op; 315.0 MB/s
readreverse : 0.604 micros/op; 183.0 MB/s
fill100K : 11793.066 micros/op; 8.1 MB/s (10000 ops)
crc32c : 4.265 micros/op; 916.0 MB/s (4K per op)
snappycomp : 5.007 micros/op; (snappy failure)
snappyuncomp : 0.954 micros/op; (snappy failure)
acquireload : 7.901 micros/op; (each op is 1000 loads)
1千万条数据,数据大小为256M
# ./db_bench --num=10000000 --write_buffer_size=$((256*1024*1024))
LevelDB: version 1.2
Date: Fri Jul 8 13:58:02 2011
CPU: 2 * Intel(R) Celeron(R) CPU E3400 @ 2.60GHz
CPUCache: 1024 KB
Keys: 16 bytes each
Values: 100 bytes each (50 bytes after compression)
Entries: 10000000
RawSize: 1106.3 MB (estimated)
FileSize: 629.4 MB (estimated)
WARNING: Optimization is disabled: benchmarks unnecessarily slow
WARNING: Assertions are enabled; benchmarks unnecessarily slow
WARNING: Snappy compression is not enabled
------------------------------------------------
fillseq : 2.540 micros/op; 43.6 MB/s
fillsync : 4579.982 micros/op; 0.0 MB/s (10000 ops)
fillrandom : 7.965 micros/op; 13.9 MB/s
overwrite : 8.696 micros/op; 12.7 MB/s
readrandom : 26.510 micros/op;
readrandom : 24.275 micros/op;
readseq : 0.589 micros/op; 187.8 MB/s
readreverse : 0.880 micros/op; 125.7 MB/s
compact : 24915125.847 micros/op;
readrandom : 12.170 micros/op;
readseq : 0.376 micros/op; 294.1 MB/s
readreverse : 0.691 micros/op; 160.2 MB/s
fill100K : 996.870 micros/op; 95.7 MB/s (10000 ops)
crc32c : 4.356 micros/op; 896.7 MB/s (4K per op)
snappycomp : 3.815 micros/op; (snappy failure)
snappyuncomp : 2.861 micros/op; (snappy failure)
acquireload : 8.075 micros/op; (each op is 1000 loads)
首先赞一下分享的精神,大概看了下leveldb
看到Put(key,value), Get(key), Delete(key)等,想起我的本科毕设了,当时基于的openDHT就有类似的操作,不过分布存储到网络中了
据说leveldb的committer阵容几乎是google那篇经典的bigtable的原班人马,
【 在 slg7788521 的大作中提到: 】
: RT,前一段时间Boss安排了让我做个测试,只发给我俩外文网站,当时就崩溃了,刚毕业,学的是通信,对数据库还一知半解呢,就让我干这活,很痛苦的说.曾经来板块求大牛指导,结果木有人关注.伤心了好久呢....只好硬着头皮自己捣鼓.到今天终于有点眉目,发个学习到的配置安装以及到目前的测试过程吧.与大家共同分享,学习,如有不对之处还请大家批评指正.
: 我的配置测试经历(这纯粹是我安装过程中的磕磕碰碰,没时间的同学可以直接跳转到下面的标准安装步骤)
: 1.先找了个LevelDB的安装教程:http://blog.nosqlfan.com/html/1899.html
: ...................