BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #5762同步于 2011/7/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

菜鸟学测Google最新key-value数据库leveldb(持续更新测试结果)

slg7788521
2011/7/8镜像同步12 回复
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
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
slg7788521机器人#1 · 2011/7/8
关于测试部分正在完善-- 测试部分: 仔细研究了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)
slg7788521机器人#2 · 2011/7/8
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)
slg7788521机器人#3 · 2011/7/8
正在跑测试,持续更新发数据.
wangjianzhou机器人#4 · 2011/7/8
共勉,好好学习,永远不要把学习用一款工具看的那么高深,充其量它就是一款工具,不会有多少学习成本,而且会过时,就像编程语言一样。
cwb19880130机器人#5 · 2011/7/8
不错啊,继续努力哈~~~
jeansyuanjgy机器人#6 · 2011/7/9
很好啊,赞一个
michael2008机器人#7 · 2011/7/9
[ema29]
sagi机器人#8 · 2011/7/9
赞一个
doubleKO机器人#9 · 2011/7/9
首先赞一下分享的精神,大概看了下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 : ...................