qq帐免费的qq号账号和密码大全

tokyocabinet与tokyotyrant的装配 - 数据库当前位置:& &&&tokyocabinet与tokyotyrant的装配tokyocabinet与tokyotyrant的装配&&网友分享于:&&浏览:71次tokyocabinet与tokyotyrant的安装
大致的安装步骤大家都可以在网上搜到,一搜一大把,我这里仅仅是把可能出现的一个问题给总结一下。安装tokyocabinet的时候,解压完./configure的时候,提示错误缺少zlib.h文件,这个时候就需要下载zlib和bzip2压缩包,先安装着两个软件包,然后重新回到tokyocabinet目录下,./configure发现好使了,出现了ready install的字样,然后make,接着sudo make install,就ok了,最后别忘记安装tokyotyrant。64位linux安装tokyocabinet的时候,即使安装了zlib和bzip2这两个软件包,也有可能出现bad value的错误,这是因为前面安装的这两个软件包不是以64bit的形式进行编译的。言归正传,说说具体问题吧。问题:1、tc make file时候,当碰到依赖libbz2.a或者libz.a这两个库的时候会出现编译错误。诸如: 缺少zlib.h这个文件//******************************************************************************************************************************///usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when ma recompile with -fPIC/usr/local/lib/libbz2.a: could not read symbols: Bad valuecollect2: ld 返回 1make: *** [libtokyocabinet.so.8.22.0] 错误 1//******************************************************************************************************************************///usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against `a local symbol' can not be used when ma recompile with -fPIC/usr/local/lib/libz.a: could not read symbols: Bad valuemake: *** [libtokyocabinet.so.8.22.0] 错误 1//******************************************************************************************************************************// 凡是这两个问题,很重要一个原因是bzip的开发依赖包没有装好,或者没装。首先要下载这两个安装包1、bzip2-1.0.4.tar.gz2、zlib-1.2.3.tar.gz我上网找过很多解决方法。但是问题依旧,依然编译不过去。即使用了ubuntu的apt-get install libbz2-dev。。。网上一般都是修改bzip源码包的Makefile文件。(装个小东西,知识一定要丰富!)网上的解决方法:在gcc编译参数中加入-fPIC(对于该参数,我在备注中有解释,适合菜鸟级c语言用户理解)但是问题,有时后就只刁难你,还是不怎么奏效。我总结了一下方法:1、注意顺序问题:(这三个东西一环扣一环,真麻烦) 如果发现 libbz2.a: could not read symbols: Bad value就应该把/usr/local/lib中的libbz2.a删掉进入解压缩的zlib-1.2.3目录,用make clean命令清理一下。同样,/usr/local/lib/libz.a: could not read symbols操作同上,删掉libz.a,把bzip2-1.0.4目录的编译文件清理一下。如果找不到这两个文件的位置,可以在终端敲上:find -name libbz2.a....2.修改zlib-1.2.3的Makefile文件 把gcc的编译参数加上 -fPIC原文:CFLAGS=-O3 -DUSE_MMAP修改为:CFLAGS=-O3 -DUSE_MMAP -fPIC如果还是过不去,劝你硬来CC=gcc 直接后面跟上-fPIC让他们全部独立编译重申:如果你之前编译过了,一定要用make clean清掉,否则还是徒劳。。最后make 还有 make install3.修改bzip2-1.0.4的Makefile文件 CC=gcc -fPIC& 《===这个就是我发飙的结果,全部让他 -fPIC AR=arRANLIB=ranlibLDFLAGS=BIGFILES=-D_FILE_OFFSET_BITS=64CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES)& 《===当然这里也可以加上同样,bzip2有一个Makefile-libbz2_so的文件,编译时会调用,当然你也可以单个编译: make -f Makefile-libbz2_somake clean &------------保守建议,还是clean一下 makemake install 具体bzip2的安装方法可以参照:http://lamp./Linux/LFS-6.2/chapter06/bzip2.html最后重新安装tc我用的是最新版本:tokyocabinet-1.4.31.tar.gz估计应该修复了一些bug。make cleanmake当输出:#================================================================# Ready to install.#================================================================一切ok,装吧 make install测试下tc/web/ttserver# tchmgr create test.tch/web/ttserver# lstest.tch/web/ttserver# tchmgr put test.tch 1 test1/web/ttserver# tchmgr put test.tch 2 test2/web/ttserver# tchmgr get test.tch 2test2 测试成功!32位操作系统要支持大于2G的db文件请加上” --enable-off64”(在./configure后面),否则会导致严重问题,db文件超过2G时表现为:1,Tcrmgr inform显示记录数为0,实际数据并没有被清空;2,连接暴多但都操作失败,ttserver.log内提示“ERROR&& ttacceptsock failed”和“ERROR&& do_mc_set: operation failed”等;3,Ttserver检测到文件异常会悄悄退出。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有1238人阅读
TC(Tokyo Cabinet )是日本人 平林幹雄 开发的一款 Key-Value 键值数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.402秒,读取100万条数据只需0.334秒。
  TT(Tokyo Tyrant )是由同一作者开发的 Tokyo Cabinet 数据库接口。它拥有自己的协议,并支持Memcached兼容协议,也可以通过HTTP协议进行数据交换。哈希数据库读写速度大约在50000次/秒。
  TC和TT目前运行在日本最大的SNS网站MIXI,在国内也有大量的生产环境应用。
  图:TT、Memcached、MySQL比较
  Tokyo Cabinet的数据库类型分为:TCHDB 哈希数据库、TCBDB B+Tree数据库、TCFDB 定长数据库、TCTDB 表格数据库、TCMDB哈希数据库、TCNDB 内存B+Tree数据库。
  很多人反应TT/TC插入数据超过一定数量后,性能会大幅度下降?先对TC做个测试:写入100万条:tchtest write test.tch 1000000,时间: 0.732秒 速度:1366120条/秒,写入200万条:tchtest write test.tch 2000000,时间: 1.718秒 速度:1164144条/秒,写入500万条:tchtest write test.tch 5000000,时间: 21.529秒 速度:232244条/秒,从测试来看,写入500万条数据,性能确实降低。但是,原因呢?
  修改参数后,再测试:写入100万条: tchtest write -xm
test.tch 0000,时间: 0.580秒 速度: 1724137条/秒,写入200万条: tchtest write -xm
test.tch 0000,时间: 1.105秒 速度: 1809954条/秒,写入500万条: tchtest write -xm
test.tch 0000,时间:
2.737秒 速度: 1826817条/秒,可见,性能提升了不少,随着写入数据量地增加,速度依旧不减。
  关键参数(C API):bool tchdbsetxmsiz(TCHDB *hdb, int64_t xmsiz);Xmsiz指定了TCHDB的扩展MMAP内存大小,默认值为,也就是64M,如果数据库文件超过64M,则只有前部分会映射在内存中,所以写入性能会下降。其他参数(C API) :bool tchdbtune(TCHDB *hdb, int64_t bnum, int8_t apow, int8_t fpow, uint8_t opts);bnum指定了 bucket array的数量。推荐设置bnum为预计存储总记录数的0.5~4倍,使key的哈希分布更均匀,减少在bucket内二分查找的时间复杂度。
  如果存储的.tch“数据库文件大小”&=“MMAP内存大小”,TCHDB哈希数据库是个不错的选择。TCHDB查找速度非常快,但是对内存的要求相对较高。
  实例:Tokyo Tyrant 的哈希数据库,优化参数如下,bnum设置为2000万条,xmsiz设置为1GB:
  ttserver -host 10.19.1.195 -port 11211 -thnum 4 -dmn -pid /data0/ttserver/ttserver.pid -log /data0/ttserver/ttserver.log -le -ulog /data0/ttserver/ -ulim 128m -sid 195 -rts /data0/ttserver/ttserver.rts /data0/ttserver/database.tch#bnum=#xmsiz=
图:TCHDB bucket array
  做个测试:写入100万条:tcbtest write test.tcb 1000000,时间: 0.994秒 速度:1006036条/秒;写入200万条:tcbtest write test.tcb 2000000,时间: 2.028秒 速度: 986193条/秒;写入500万条:tcbtest write test.tcb 5000000,时间: 5.276秒 速度: 947687条/秒。
  从测试来看,TCBDB写入速度虽然比TCHDB低45%左右,但可以看出,写入500万条数据时,B+Tree的写入速度保持稳定。
  修改参数后,再测试:写入100万条: tcbtest write test.tcb 4 ,时间: 0.981秒 速度: 1019367条/秒;写入200万条: tcbtest write test.tcb 4 ,时间: 1.856秒 速度: 1077586条/秒;写入500万条: tcbtest write test.tcb 4 ,时间: 4.448秒 速度: 1124101条/秒。
  TCBDB没有开启xmsiz扩展MMAP内存,写入大量数据时,速度仍然能够得以保证。
  性能微调参数(C API):
  bool tcbdbtune(TCBDB *bdb, int32_t lmemb, int32_t nmemb, int64_t bnum, int8_t apow, int8_t fpow, uint8_t opts);
  lmemb 用于指定被缓存的页级节点数
  nmemb 用于指定被缓存的非页级节点数,通常为页级节点数的两倍
  bnum 用于指定bucket array的数量。bnum的数量应该大于存储总记录数的1/128。
  TCBDB(查找的时间复杂度为“O(log n)”)虽然速度比TCHDB (查找的时间复杂度为“O(1)”)慢一些,但是,它对内存的依赖度要比TCHDB小得多,随着数据量增大,写入速度也稳定,适合存储大量数据。
  生产环境,我们存储7GB的数据, TCBDB只使用了160M的内存缓存,而TCHDB则需要设置7GB xmsiz内存才能保证速度。
  实例:Tokyo Tyrant 的B+Tree数据库,优化参数如下:
  ttserver -host 10.19.1.195 -port 11211 -thnum 4 -dmn -pid /data0/ttserver/ttserver.pid -log /data0/ttserver/ttserver.log -le -ulog /data0/ttserver/ -ulim 128m -sid 195 -rts /data0/ttserver/ttserver.rts /data0/ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=
图:TCBDB B tree index
  参数设置(C API):
  bool tcfdbtune(TCFDB *fdb, int32_t width, int64_t limsiz);
  width用于设置每条记录的长度(字节数);
  limsiz用于设置总长度(字节数),存储的总数据字节数不能超过limsiz设定的值。
  TCFDB定长数据库读写速度快,但是存储的数据量有限。数据库文件必须在内存中完全映射。
图:TCFDB Array
  TCTDB是在 TCHDB哈希数据库的基础上,对 value 部分做的增强,因此,性能优化参数跟TCHDB类似。
  TCTDB中,key相当于关系型数据库中的主键ID,name相当于字段名,value相当于字段值。
图:TCTDB bucket array
  1、可以根据“字段”检索出符合条件的key(C API):
  void tctdbqryaddcond(TDBQRY *qry, const char *name, int op, const char *expr);
  Name即字段名,op代表操作类型,expr为操作对象。
  Op操作类型可以分为两类:字符型运算和数值型运算。
  数值型运算符:
  NUMEQ:表示等于操作对象的数值(=)。
  NUMGT:表示比操作对象的数值要大(&)。
  NUMGE:表大于或等于操作对象的数值(&=)。
  NUMLT:表示比操作对象的数值要小(&)。
  NUMLE:表示小于或等于操作对象的数值(&=)。
  NUMBT:表示其大小处于操作对象文字段中被逗号分开的两个数值的中间(between 100 and 200)。
  NUMOREQ:表示同操作对象文字段中被逗号分开的多个数值中的其中一个是相同的( IN (100,200,278)) 。
  文本型运算符:
  STREQ:表示与操作对象的文字内容完全相同(=)。
  STRINC:表示含有操作对象文字的内容(LIKE ‘%文字%’)。
  STRBW:表示以操作对象的文字行列开始(LIKE ‘文字%’)。
  STREW:表示到操作对象的文字行列结束(LIKE ‘%文字’) 。
  STRAND:表示包含操作对象的文字行列中右逗号分开部分的字段的全部(name LIKE ‘%文字㈠%’ AND name LIKE ‘%文字㈡%’)。
  STROR:表示包含操作对象文字段中逗号分开部分的其中一部分(name LIKE ‘%文字㈠%’ OR name LIKE ‘%文字㈡%’) 。
  STROREQ:表示与操作对象文字段中逗号分开部分的其中某部分完全相同( name = ‘文字㈠’ OR name =‘文字㈡’ )。
  2、可以对“字段”建立索引,支持UTF-8全文检索(C API):
  bool tctdbsetindex(TCTDB *tdb, const char *name, int type);
  type为索引类型,值如下:
  TDBITLEXICAL:创建文本型索引
  TDBITDECIMAL:创建数值型索引
  TDBITTOKEN:创建标记倒排索引
  TDBITQGRAM:创建q-gram倒排索引
  TDBITOPT:优化索引
  TDBITVOID:删除索引
  3、支持按“字段”排序(C API):
  void tctdbqrysetorder(TDBQRY *qry, const char *name, int type);
  type为排序类型,值如下:
  STRASC:表示按照文本型字段内的文本内容在字典中排列顺序的升序。
  STRDESC:表示按照文本型字段内的文本内容在字典中排列顺序的降序。
  NUMASC:表示按照数值大小的升序。
  NUMDESC:表示按照数值大小的降序。
  4、支持检索结果数量限制(C API):
  void tctdbqrysetlimit(TDBQRY *qry, int max, int skip);
  相当于SQL语句中的“limit skip, max”
  TCTDB表格型数据库的不足之处:
  1、功能的增强,也就意味着要牺牲一些性能。TCTDB表格型数据库的平均读取速度大约在40万条/秒,相比TCHDB哈希数据库的180万条/秒和TCBDB B+Tree数据库的100万条/秒要慢一些。
  2、TCTDB虽然可以建立数值型索引,但是它是将所有value数据都当成字符型来处理的,无法区分value类型。
  3、TCTDB单数据库文件存储的记录数上亿条后,性能会有比较明显的下降。
  4、没有可扩展的能力,如果单机无法满足要求,只能通过主从复制的方式扩展。
  5、UPDATE更新方式效率低。
  TCSQL是金山逍遥网在Tokyo Cabinet TCTDB的基础上,结合Key-Value对象缓存,借鉴SQL语句的SELECT、INSERT、UPDATE、DELETE思想与功能开发的分布式实时列表缓存数据库,可实现对列表页数据、记录条数的实时缓存。
  TCSQL采用HTTP GET/POST协议+JSON数据交换格式在客户端、端之间进行数据交互。
  TCSQL实时列表缓存数据库单机能够支撑1万以上的并发连接。1万并发连接下,QPS(每秒查询率)能够达到次。
  TCSQL拥有了MySQL数据库单表具备的大部分功能。
  TCSQL的select查询示例:
  curl “http://127.0.0.1:3888/?command=select&type=*&where=pkey:NUMGE:0|title:STRINC:keyword&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=10”
  等同于MySQL的SQL查询语句:
  SELECT * FROM table WHERE pkey &= 0 AND title LIKE ‘%keyword%’ ORDER BY pkey DESC LIMIT 0,10;跟MySQL的LIKE全表扫描不同的是,TCSQL支持创建倒排索引,STRINC使用的是全文检索。
  通过PHP Client操作TCSQL:&!–p
  $tcsql = new Tcsql();&
  //INSERT插入
  $result = $tcsql-&insert($server_host, $server_port, $array_data);
  //SELECT查询
  $result = $tcsql-&select($server_host, $server_port, “type=*&where=uid: NUMOREQ:1,7,29,43&order_by=pkey&order_by=NUMDESC&limit_skip=0&limit_max=10“);
  //UPDATE更新
  $result = $tcsql-&update($server_host, $server_port, $array_data, “where=name:STREQ:张三|sex:NUMEQ:1“);
  //DELETE删除
  $result = $tcsql-&delete($server_host, $server_port, $array_data, “where=uid:NUMEQ:5“);
  1、刚才已经提到,TCTDB表格型数据库的读取性能相对于TCHDB哈希数据库、TCBDB B+Tree数据库而言,要低许多。
  2、TCSQL采用内存热点记录缓存、TCBDB B+Tree数据库永久缓存相结合的方式,将TCTDB的读取性能提升了两倍。TCTDB中的一条Key-Value数据只要一次被读取,就会永久缓存,直到更新、删除该记录时,才会删除缓存内容。
  TCSQL的内存缓存、TCBDB B+Tree数据库联合缓存机制命中率非常高,比如按照时间倒叙显示50条记录,第一次查询就会将记录数据缓存在内存中,如果第二次查询时已经新增了3条记录(或者修改了3条记录),第二次查询只会从TCTDB表格型数据库中取出3条记录,剩余47条从内存缓存或TCBDB中取出,大大加快了读取速度。
  1、针对TCTDB无法区分value类型的问题,TCSQL增加了对字段设置数据类型的功能,它支持JSON所拥有的6种数据类型:
图:TCSQL支持的六种数据类型
  一个PHP的数组,经过json_encode()后,写入TCSQL后再读取出来,数组类型仍然能够保持原样不变:&!–p
  $array_data['uid'] = 1234;
  $array_data['ip'] = ‘192.168.138.1′;
  $array_data['passport'] = ‘kingsoft’;
  $array_data[‘nickname’] = ‘测试账号’;
  $array_data[‘num1'] = 4;
  $array_data[‘num2'] = -345;
  $array_data['u1'] = T
  $array_data['u2'] = array(”aaa”, “bbb”, “ccc”);
  $array_data['u3'] =
  $array_data['u4'][‘test'] = array(”aaa”, “bbb”, “ccc”);
  $json_data = json_encode($array_data); //准备写入到TCSQL的数据
  1、TCSQL采用分片、并行计算的结构,解决了TCTDB单数据库文件存储的记录数上亿条后,性能会明显下降的不足之处。
  2、TCSQL增强了TCTDB的可扩展能力。
  3、适合解决Web 2.0应用中单表数据量无限增大的问题。
图:TCSQL的分片、分布式并行查询过程
  借助MySQL触发器,以及为MySQL 5.1 编写的扩展插件函数,来让TCSQL当MySQL的从库:
  json_object()、 urlencode()、http_post()
  接下来是一个示例:通过MySQL命令行连接到MySQL,执行以下SQL,对sns_feed表创建三个MySQL触发器:sns_feed_insert、sns_feed_update、sns_feed_delete,当MySQL的sns_feed表发生增、删、改操作时,自动将修改的记录内容通过HTTP POST到TCSQL数据库(192.168.8.34:3888)。
  TCSQL“从库”Insert触发器
  DELIMITER |&
  DROP TRIGGER IF EXISTS sns_feed_
  CREATE TRIGGER sns_feed_insert
  AFTER INSERT ON sns_feed
  FOR EACH ROW BEGIN
  SET @tcsql_result_json = (SELECT json_object(feedid as pkey,appid,icon,uid,username,dateline,friend,hash_template,hash_data,title_template,title_data,body_template,body_data,body_general,image_1,image_1_link,image_2,image_2_link,image_3,image_3_link,image_4,image_4_link,target_ids,id,idtype,hot)
FROM sns_feed WHERE feedid = NEW.feedid limit 1);
  SET @tcsql_result_eval = (SELECT http_post(‘192.168.8.34′, ‘3888′, ‘command=insert’, urlencode(@tcsql_result_json)));
  DELIMITER ;
  TCSQL“从库”update触发器
  DELIMITER |&
  DROP TRIGGER IF EXISTS sns_feed_
  CREATE TRIGGER sns_feed_update
  AFTER UPDATE ON sns_feed
  FOR EACH ROW BEGIN
  SET @tcsql_result_json = (SELECT json_object(feedid as pkey,appid,icon,uid,username,dateline,friend,hash_template,hash_data,title_template,title_data,body_template,body_data,body_general,image_1,image_1_link,image_2,image_2_link,image_3,image_3_link,image_4,image_4_link,target_ids,id,idtype,hot)
FROM sns_feed WHERE feedid = OLD.feedid limit 1);
  SET @tcsql_result_eval = (SELECT http_post(‘192.168.8.34′, ‘3888′, ‘command=insert’, urlencode(@tcsql_result_json)));
  DELIMITER ;
  TCSQL“从库”delete触发器
  DELIMITER |&
  DROP TRIGGER IF EXISTS sns_feed_
  CREATE TRIGGER sns_feed_delete
  AFTER DELETE ON sns_feed
  FOR EACH ROW BEGIN
  SET @tcsql_result_eval = (SELECT http_post(‘192.168.8.34′, ‘3888′, concat(’command=delete&where=pkey:NUMEQ:’, OLD.feedid), ”));
  DELIMITER ;
  TCSQL的数据update更新优化
  TCTDB+Tokyo Tyrant时,如果只更新一条记录中的某个字段的值,PHP客户端需要先读回Tokyo Tyrant中该记录的全部字段内容到一个PHP数组,再修改此数组中该字段的值,最后再将该数组写回Tokyo Tyrant ,来回通过网络传输记录全部字段内容,速度慢、效率低。
  TCSQL可以对部分字段内容进行更新,在TCSQL内部处理完成修改操作,没有不必要的TCP传输。
  一般数据库缓存分为四种:
  1、Key/Value单个对象缓存,技术不难,Memcached、Squid均能实现。
  2、列表缓存,就像论坛里帖子的列表、SNS中的Feed信息,要求实时更新。
  3、记录条数的缓存,比如一个论坛板块里有多少个帖子,这样才方便实现分页。
  4、复杂一点的group,sum,count查询,比如一个论坛里按点击数排名的最HOT的帖子列表。
  TCSQL主要用于解决上页提到的第2、3类应用,即带条件的列表页、列表页记录数的实时缓存。
  TCSQL在金山逍遥网的典型应用:
  游戏论坛:原版Discuz!论坛使用的MySQL内存表存放Session,在线5万人的时候,大量的并发update操作导致内存表锁死。后改用TCSQL,轻松解决了这个问题。从MySQL改为TCSQL,迁移成本也非常低。
  SNS社区:Feed信息采用从MySQL同步到TCSQL的方式,利用TCSQL来解决好友动态的查询压力。
  用户行为分析:需要按UID、通行证、昵称、时间等条件查询基础用户信息表,采用TCSQL来存储超过2亿条数据,每次页面访问将有一次select查询。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34812次
排名:千里之外
原创:12篇
评论:11条
(1)(1)(1)(2)(4)(5)2957人阅读
在编译&&时会报&configure:
error: bzlib.h is required 的错误。
解决方法是: &&yum install bzip2-devel
configure:
error: zlib.h is required
原来没有zlib包&
rpm -ql zlib命令查询后发现存在&
[root@cenosvmbase tokyocabinet-1.4.41]#&rpm -ql zlib
/usr/lib64/libz.so.1
/usr/lib64/libz.so.1.2.3
/usr/share/doc/zlib-1.2.3
用./configure --help知道可以手工指定则用命令
如果没有安装源码包会找不到文件
装源码包的命令是 sudo yum install zlib-devel
Tokyo Cabinet和Tokyo Tyrant安装和调用手记&&
07:24:50|&&分类:&字号&
rpm -ivh bzip2-devel-1.0.3-4.el5_2.i386.rpm
wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.41.tar.gz
tar zxvf tokyocabinet-1.4.41.tar.gz
cd tokyocabinet-1.4.41/
./configure --enable-off64&#启动64位偏移,因为我机器是32位,如果数据库文件超过2G,不加此参数ttserver会崩溃
make install
2、然后编译安装tokyotyrant
wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.39.tar.gz
tar zxvf tokyotyrant-1.1.39.tar.gz
cd tokyotyrant-1.1.39/
./configure
make install
1、创建Tokyo Tyrant数据文件存放目录
mkdir -p /ttserver/
2、启动Tokyo Tyrant主进程
运行之前要设置lib搜索路径,否则会提示找不到库文件
echo '/usr/local/lib' && /etc/ld.so.conf
ldconfig -v
1)单机模式
ulimit -SHn 51200
ttserver -host 127.0.0.1 -port 11111 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch
2)互为主辅
注:数据库类型由后缀决定,因为我只需要key-value的功能,所以采用功能简单,速度快的hash database
Hash Database :.tchB+ tree database :.tcbfixed-length database :.tcftable database :.tct内存Hash Database :*内存B+ tree database :+
服务器 192.168.1.110
ulimit -SHn 51200
ttserver -host 192.168.1.110 -port 11111 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid&110 -mhost 192.168.1.92 -mport 11111 -rts /ttserver/ttserver.rts /ttserver/database.tch
服务器 192.168.99.111
ulimit -SHn 51200
ttserver -host 192.168.1.111 -port 11111 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid&111 -mhost 192.168.1.91 -mport 11111 -rts /ttserver/ttserver.rts /ttserver/database.tch
3)参数说明
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [dbname]&
  -host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
  -port num : 指定需要绑定的端口号。默认端口号为1978&
  -thnum num : 指定线程数。默认为8个线程。&
  -tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。&
  -dmn : 以守护进程方式运行。
  -pid path : 输出进程ID到指定文件(这里指定文件名)。
  -log path : 输出日志信息到指定文件(这里指定文件名)。
  -ld : 在日志文件中还记录DEBUG调试信息。
  -le : 在日志文件中仅记录错误信息。
  -ulog path : 指定同步日志文件存放路径(这里指定目录名)。
  -ulim num : 指定每个同步日志文件的大小(例如128m)。
  -uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
  -sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)&
  -mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
  -mport num : 指定主辅同步模式下,主服务器的端口号。
  -rts path : 指定用来存放同步时间戳的文件名。
3、停止ttserver进程
ps aux | grep ttserver | grep -v 'grep' | awk -F ' ' '{print $2}' | xargs kill -TERM
1、使用memcached兼容协议
2、http调用
写 curl -X PUT http://127.0.0.1:11111/key -d &value&
读 curl http://127.0.0.1:11111/key
删 curl -X DELETE http://127.0.0.1:11111/key
3、使用C调用
1)直接写文件
我使用的是hash database 所有函数带tch前缀,如果是其他数据库请参考tokyocabinet-1.4.31\doc下spex-en.html的函数接口说明
#include &tcutil.h&#include &tchdb.h&
#include &stdbool.#include &stdlib.h&h&
#include &stdint.h&
int main(int argc, char **argv){TCHDB *
char *key, *&/* create the object */hdb = tchdbnew();&/* open the database */if(!tchdbopen(hdb, &casket.tch&, HDBOWRITER | HDBOCREAT)){&&&&&&&&ecode = tchdbecode(hdb);or: %s\n&, tchdberrmsg(ecode));
}&&&&&&&&fprintf(stderr, &open err&/* store records */if(!tchdbput2(hdb, &foo&, &hop&) ||!tchdbput2(hdb, &bar&, &step&) ||&&&&&&&ecode = tchdbecode(hdb);
!tchdbput2(hdb, &baz&, &jump&)){
&&&&&&&&&fprintf(stderr, &put error: %s\n&, tchdberrmsg(ecode));}&/* retrieve records */value = tchdbget2(hdb, &foo&);if(value){ntf(&%s\n&, value);
&&&&&&&&fr&&&&&&&&priee(value);} else {
ecode(hdb);
&&&&&&&&fprintf(stde&&&&&&&&ecode = tchd
brr, &get error: %s\n&, tchdberrmsg(ecode));
}&/* traverse records */tchdbiterinit(hdb);ernext2(hdb)) != NULL){
&&&&&&&&value = tchwhile((key = tchdbitdbget2(hdb, key);&&&&&&&&if(value){
&&&&&&&&free(value);
&&&&&&&&&&&&&&&&&&&&&&printf(&%s:%s\n&, key
,&&free(key);
}&/* close the database */if(!tchdbclose(hdb)){code(hdb);
&&&&&&&&fprintf(stder&&&&&&&&ecode = tchdber, &close error: %s\n&, tchdberrmsg(ecode));}&/* delete the object */tchdbdel(hdb);return 0;}2)使用网络读写
请参考tokyotyrant-1.1.33\doc下index.html的函数接口说明
#include &tcrdb.h&
#include &stdlib.h&
#include &stdbool.h&
#include &stdint.h&
int main(int argc, char **argv){
/* create the object */
rdb = tcrdbnew();
/* connect to the server */
if(!tcrdbopen(rdb, &localhost&, 1978)){
& & & & ecode = tcrdbecode(rdb);
& & & & fprintf(stderr, &open error: %s\n&, tcrdberrmsg(ecode));
/* store records */
if(!tcrdbput2(rdb, &foo&, &hop&) ||
!tcrdbput2(rdb, &bar&, &step&) ||
!tcrdbput2(rdb, &baz&, &jump&)){
& & & & ecode = tcrdbecode(rdb);
& & & & fprintf(stderr, &put error: %s\n&, tcrdberrmsg(ecode));
/* retrieve records */
value = tcrdbget2(rdb, &foo&);
if(value){
& & & & printf(&%s\n&, value);
& & & & free(value);
& & & & ecode = tcrdbecode(rdb);
& & & & fprintf(stderr, &get error: %s\n&, tcrdberrmsg(ecode));
/* close the connection */
if(!tcrdbclose(rdb)){
& & & & ecode = tcrdbecode(rdb);
& & & & fprintf(stderr, &close error: %s\n&, tcrdberrmsg(ecode));
/* delete the object */
tcrdbdel(rdb);
四、构建密码破解web平台,自动生成数据
1、构建web平台
web界面上我就采用了cmd5的风格,改了下颜色。。不太熟悉美工方面,只能改成这样。。。
//md5.php(使用memcached-client.php里面有操作memcached的类,包含之后直接调用,网上都可以下载到)
require_once('memcached-client.php');
include('config.php');
$key = $_POST['key'];
if(isset($key))
& & & & &if(strlen($key) == 32)
& & & & &{
& & & & & & & & & $key = substr($key, 8, 16);
& & & & &}
& & & & &$key = strtolower($key);
& & & & &$mc = new memcached($links);
& & & & &$value = $mc-&get($key);
& & & & &if(!isset($value))
& & & & &{
& & & & & & & & & $value = '未查到';
& & & & &}
&//config.php
$links = array(
& & & & &'servers' =& array('192.168.99.111:11111'),
& & & & &'debug' =& false,
& & & & &'compress_threshold' =& 10240,
& & & & &'persistant' =& false
2、自动插入密码数据
//autoaddnet.c
#include &tcrdb.h&
#include &stdlib.h&
#include &stdbool.h&
#include &stdint.h&
#include &md5lib.h&
int main(int argc, char **argv)
char *source, *
int length = *argv[1] - '0';&//字符长度
int mode = *argv[2] - '0';&//字符组合类型
int len = 0, count = 1, i = 0, tonext_value = 0, no = 0;
int series[62] = {0};
rdb = tcrdbnew();
if(!tcrdbopen(rdb, &192.168.99.111&, 11111))&//打开数据库连接
& & & & ecode = tcrdbecode(rdb);
& & & & fprintf(stderr, &open error: %s\n&, tcrdberrmsg(ecode));
switch(mode)&&//选择字符的组合
& & & & source = &&;
& & & & source = &abcdefghijklmnopqrstuvwxyz&;
& & & & source = &ABCDEFGHIJKLMNOPQRSTUVWXYZ&;
& & & & source = &ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&;
& & & & source = &abcdefghijklmnopqrstuvwxyz&;
& & & & source = &ABCDEFGHIJKLMNOPQRSTUVWXYZ&;
& & & & source = &ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&;
len = strlen(source);&//计算字符长度
for(i = 0; i & i++)
& & & & count *=&//计算所有组合的总数
for(i = 0; i & i++)
& & & & char word[20] = {0};&//word为组合出的字符串
& & & & tonext_value = 1;
& & & & word[length] = '\0';
& & & & for(no = length-1; no &= 0; no--)
& & & & & & & & word[no] = source[series[no]];&//循环填充word字符数组中的每个字符
& & & & & & & & series[no] += tonext_
& & & & & & & & if(no&0)
& & & & & & & & {
& & & & & & & & & & & & if(series[no] == len)&//如果已经到达source末尾则从新开始
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & series[no]=0;
& & & & & & & & & & & & & & & & tonext_value=1;
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & tonext_value=0;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & char *md5 = MDString(word);&//word原始字符转换成md5
& & & & value = tcrdbget2(rdb, md5);&//得到此MD5在db中的value
& & & & *(md5+24) = '\0';&//截取32位md5的8-24位
& & & & if(!value)&//如果db中没有此value,进行插入
& & & & & & & & if(!tcrdbput2(rdb, md5+8, word))
& & & & & & & & {
& & & & & & & & & & & & ecode = tcrdbecode(rdb);
& & & & & & & & & & & & fprintf(stderr, &put error: %s\n&, tcrdberrmsg(ecode));
& & & & & & & & }
& & & & & & & & printf(&%s\n&, word);
& & & & else
& & & & & & & & printf(&%s-16 exist\n&, word);
& & & & & & & & free(value);
if(!tcrdbclose(rdb))&//关闭数据库连接
& & & & ecode = tcrdbecode(rdb);
& & & & fprintf(stderr, &close error: %s\n&, tcrdberrmsg(ecode));
tcrdbdel(rdb);&//删除数据库对象
编译方法:
gcc -I. -I/usr/local/include autoaddnet.c -o autoaddnet -L/usr/local/lib -ltokyotyrant -lz -lbz2 -lrt -lpthread -lm -lc
./autoaddnet length mode
length为字符长度,mode为字符组合
注:&提供免费MD5查询,以后还会陆续推出mysql等密码免费查询平台,敬请期待
文章来源:
原文地址:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:123424次
积分:1535
积分:1535
排名:千里之外
原创:20篇
转载:64篇
评论:16条
(2)(4)(6)(15)(11)(3)(1)(4)(14)(17)(5)(2)

我要回帖

更多关于 qq账号和密码大全真的 的文章

 

随机推荐