记录学习过程中的点点滴滴
kfs的搜索结果
GDB调试stl的利器脚本
七 10th
今天在weibo上发现了GDB调试STL容器类的利器,这里记录下:
脚本地址:这里
使用方法:将链接里的文件内容保存到home目录的.gdbinit中,然后启动gdb时就可直接使用相关命令.
提供以下的方法:
#std::vector -- via pvector command #std::list -- via plist or plist_member command #std::map -- via pmap or pmap_member command #std::multimap -- via pmap or pmap_member command #std::set -- via pset command #std::multiset -- via pset command #std::deque -- via pdequeue command #std::stack -- via pstack command #std::queue -- via pqueue command #std::priority_queue -- via ppqueue command #std::bitset -- via pbitset command #std::string -- via pstring command #std::widestring -- via pwstring command
测试用例:
iMacros工具用法介绍
五 4th
iMacros是作为浏览器的插件,通过录制对网页的操作,然后进行回放,这样可以避免大量的重复性的劳动;目前已支持Firefox、Chrome和IE,我试用了一下Firefox的插件,感觉还挺方便的,与类似12306的刷票插件的原理基本是一样的,不过iMacros提供了自己的脚本,你可以直接图形界面录制,当然你也可以通过自己修改脚本来进行录制并回放,是实现浏览器自动抓取的利器。
本文主要介绍iMacros的基本用法,最后以一个比较的小的例子作为说明。
安装
1. Firefox插件下载地址:这里
2. Chrome插件下载地址:这里
使用
安装完成后,你会看到增加了这个图标,然后点击该图标,你就会看到iMacros展开的样子
可以看到上面一栏是对应的脚本,下面分为三栏:“运行”, “记录”, “编辑”
- “运行”: 选中某个录制的脚本,点击运行,就会回放对应的操作
- “记录”: 点击“记录”按钮,此时iMacros会开始录制你再浏览器上做的操作,然后会保存在Current.iim脚本中,比如我首先打开baidu.com, 并点击录制,然后输入”firefox imacros”搜索,最后“停止”;
- “编辑”:选中“Current.iim”文件,选择“编辑宏”按钮,你会看到如下的内容:
VERSION BUILD=8300326 RECORDER=FX TAB T=1 URL GOTO=http://www.baidu.com/ TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:kw CONTENT=firefox<SP>imacros TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:f ATTR=ID:su
上述脚本的大致意思:
- “URL GOTO”: 进入该页面
- “TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:kw CONTENT=firefoximacros”:在input表单中输入”firefox imacros”, 这里主要是TAG这个命令,选中html中该标签,可使用TYPE, ATTR, FORM进一步指定,最常用的一个命令,详情点击这里
- “TAB T=1″: 在第一个标签中打开URL, “TAB OPEN”在新的标签页打开,详情
iMacros中其它比较常用的命令
- 变量赋值SET: SET today {{!NOW: dd-mm-yyyy}} 将当前的日期赋值给today这个变量,后续通过{{}}来引用该变量
- WAIT SECONDS=3: sleep 3s.
- 填充表单:使用TAG命令, 同时增加CONTENT选项即可:
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=ID:SearchWord CONTENT={{today}} - 提取文本:TAG+EXTRACT 如
TAG POS=1 TYPE=TD ATTR=TXT:当页汇总 EXTRACT=TXT - 模拟点击:比如要点击一个超级链接,同时知道其anchor,则就非常简单:
TAG POS=1 TYPE=A ATTR=TXT:入口页面 - 保存提取的文本到文件:在提取文本后,其内容会自动添加到EXTRACT变量中,你可以通过ADD或者SET命令来修改{{!EXTRACT}}这个变量,最后通过SAVEAS来保存提取的文本,以逗号分隔
SAVEAS TYPE=EXTRACT FOLDER=D:\ FILE=report_{{yestoday}}.txt - 读取文件数据:有些情况下,比如要搜索大量的query,此时你就需要使用数据文件,然后使用{{!COL1}} {{!COL2}}来访问对应数据的列,默认列是以逗号进行分隔
SET !DATASOURCE d:\datasource.txt
SET !DATASOURCE_COLUMNS 2
最后运行时要点击”播放(循环)”按钮,否则只会执行一行就会退出了,同时设置最大的行数
google早期的索引结构介绍
三 1st
最近一直在做索引压缩方面的事情,无意中看到了Jeff Dean大牛分享的google早期的索引结构,对于我们这种刚刚起步的搜索公司,还是很有启发意义的,收获还是比较大,所以就简单记录下。
1. 索引压缩常用的压缩算法
淘宝的一篇技术blog分享了一些比较常用的压缩算法:
- varint (变长压缩): 字节对齐,压缩比不高
- group varint: 变长压缩的变形,比varint的解压速率高很多,这里有它的实现
- Gamma: 对比较小的数字压缩比会比较高,将数值分为两个部分: 一元编码(num_bits)+二进制编码
- Simple9 + simple16: 对于32bit的空间进行组织,可存储多个数值
- PForDelta + NewPForDelta: 比较新的压缩算法,压缩比和解压缩比都比较高效,适合于docid_delta的压缩
关于这些算法的相关介绍可以看下www.wikipedia.org,或者搜下对应的paper.
2. Google的索引结构
可以看到,对于token的doclist是以Block的方式进行组织的,如果doclist比较长,还会使用skip table来快速查找;
Block的组织方式:
a. block header: 使用变长存储与上一个block的delta, 并存储block 实际的存储长度(可能是作为验证)
b. 第二行使用Gamma来压缩编码类型及在block中出现的docs的数目(因为这些数值都比较小)
c. 使用Rice压缩对应docld delta, 其实这里可以使用比较新的压缩算法PFDelta,更高效一些
d. 使用Gamma来压缩对应token在doc中出现的frequence, 即hit的数目
e. 使用length-limit Huffman 来存储Hit Attribute信息,这里主要是利用Attribute的重复的比例会很高,也就是说大部分hit attribute
都会是相同的,所以用到了Huffman压缩,然后对length进行了限制
f: positions用Huffman-Int 来压缩位置信息,由于position分布不确定性很多,对position的压缩一直是业界的难题,压缩比不会很高。
Huffman-Int : 类似于Gamma压缩,但是对于一元编码部分,使用了Huffman code.
优化
这里其实可以将doclist和hit 信息进行分离存储,因为只有在打分的时候才会用到hit的相关信息,访问次数会比较少,而doclist就会访问比较频繁
可以对其进行Cache,这样Cache命中率会更高一些

sheepdog源码学习笔记一
三 4th
最近这两天一直在看sheepdog的源码,有关sheepdog的用法,请参考我的另一篇博客:KVM分布式共享存储解决方案-sheepdog 总的来说,sheepdog的代码量不是很大,在一万行左右,比起其他的分布式文件系统如kfs,ceph等还是比较轻量级的,而且定位也是针对qemu/kvm等volume的解决方案.
sheepdog原理介绍
1. sheepdog是作为虚拟机kvm的volume使用的,是非普通的文件系统,这点和Amazon的EBS(Elastic Block Store)比较类似
2. sheepdog是一种对称(symmetric)的结构,各个节点的地位相同,没有中心节点,没有meta-server,使用Corosync 对物理节点进行管理
3. sheepdog中的对象存储分为两类,其一是One reader One Writer 其二是No writer multiple reader 而且对象是4M大小分片的,使用“一致性哈希”算法来确定对象存储位置,多副本存储
sheepdog的代码结构
./collie/treeview.c ./collie/collie.c ./sheep/vdi.c ./sheep/store.c ./sheep/sdnet.c ./sheep/work.c ./sheep/sheep.c ./sheep/group.c ./lib/logger.c ./lib/event.c ./lib/net.c
sheep目录下是有关sheepdog的大部分逻辑的处理,部署在各个节点上
collie目录是作为管理管理sheep的代码
lib目录下是关于网络、日志和事件等处理模型
…..
今天暂时写到这里……待续

一年又一年
一 2nd
今天已经是2011年,真的感觉时间过的好快呀,转眼的功夫一年又过去了,每个人都需要停下脚步,回过头看看这一年的得与失,真的需要好好总结下了。
看到我的去年的总结,还是有种很亲切的感觉,没事写写平时的感受其实还是挺好的,可惜总是贴一些技术的文章,个人的想法的东西去想的还是太少(可能是性格的因素的吧,不希望把一些比较内心的想法表达出来),这个其实真的还是蛮好的,争取2011年能够写一些。
简单的列下流水账吧,太有文采的文字也写不出来
1,今年开学直到九月份一直在百度实习,实习是瞒着老板偷偷地出去的,时间还是挺紧凑的,还得正常去实验室,只能利用上课的时间去公司,基本上研一下半年没有上过课,不过最后还好,课程都过了,呵呵!其实本来没有打算出去实习的,真的想好好利用研究生的时间搞搞科研,正像在Google面试那个工程师所说的那样,既然读了研究生,就应该做一些与正常本科毕业就工作的不一样的事情,如果研究生三年就是再外面实习三年,虽然最后也可能找到很好的工作,但肯定还不如直接工作三年来的更直接一些呢,所以研究生就应该做一些研究生应该做的一些事,比如读读paper、写写论文啥的等;但是我最后还是选择出去实习,主要原因是原来跟着老板做的东西不感兴趣,不能就这样荒废三年对吧,而且我觉得我不是能够主动去学习的那种,需要某种需求进行推动我,我才会去看它学习它的,所以就偷偷摸摸的在百度实习了将近半年。
总的来说,在百度这半年还是挺开心的,挺有收获的,主要参与了Baidu App Engine 项目主要开发工作,因为这个项目是比较新的项目,当时去的时候,加我一共三个人,能够接触比较多的东西,从前端到最后端,而且对整个架构也理解的比较清晰,后来陆续又来了两个同事,这项目在百度内部目前发展的比较好,有个比较有意思的小插曲:当时我将近实习结束,我的mentor居然劝我退学,放弃读硕士,直接工作,并且拿出自己当例子说事(他是硕士毕业,但是我们的项目老大是本科毕业,而且比他还低一届),可惜我最后还是乖乖的回所继续干活了,哈哈~最后还是感谢chuanying,xiaowei还有dongfei zhangyong这些同学的,从你们身上学到了很多!
2,到九月份时,就乖乖的回实验室了,开始了我的正常的研究生生涯,到现在也将近三四个月了,做了一些东西,包括对KFS的改造,有关KVM虚拟机的学习等,这期间我居然开始修改内核代码了,这个是最难以置信的,不过还是太弱了,本科时学的体系结构和微机技术的知识基本上全忘没了,还得从头回忆,但是还真没觉得这个东西能够用到,但是看论文太少,自己的独立思考还太弱了。
3,生活上,十一的时候去了趟大城市铁岭,看望下丈母娘,话说这男女方如果不在同一个地方,真是比较麻烦,下次去不知道得等到啥时候,这结婚后就更纠结了,希望xiaofang同学看到不要有啥想法哦~
同时也给超哥、猛哥和韬哥提醒一声,找对象尽量都找近一点哦
2,好好干活与学习,明年找个好工作
3,希望lc lm zt (对号入座)不再寂寞不再mensao, 猛哥也越nb, 超哥和韬哥飞越成功,我和猛哥的儿子的前途就全靠你俩了
写了好多,我发现我也太能墨迹了,不写了,回去睡觉了
CentOS配置NFS服务器的方法
十二 31st
最近搞KVM虚拟机迁移,前提是需要一个共享存储的文件系统来存储系统镜像,本来打算使用KFS来作为分布式文件系统的,但是在修改kvm的镜像读写API后,系统是跑起来了,但是奇慢无比,主要是存在对镜像存在大量的随机读写造成的,这个下次再好好总结下。所以就想到了简单易用的NFS文件系统,下面是具体的配置细节:
1,NFS服务器的安装
在CentOS系统中,默认情况下已经安装了NFS文件系统,如果没有安装就需要手工安装了
#rpm –q nfs-utils portmap
2, 查看NFS是否启动
#service nfs starus #service portmap status
3,启动NFS
#service nfs start #service portmap status
更多 >
vsftpd安装方法介绍
九 16th
最近在做KFS文件系统,之前已经可以把Kfs使用fuse挂载到linux文件系统中使用,今天就结合fuse,将kfs作为底层的文件
系统来运行FTP server , 效果还不错,不过在安装vsftpd时遇到了一些问题,记录下~
下载vsftpd源码 vsftpd-2.3.2.tar.gz
1, make
如果是64位机器,可能会出现 /lib/libpam.so.0: could not read symbols: File in wrong format
修改vsf_findlibs.sh vi :0,$ s/\/lib\//\lib64\//g
生成vsftpd 二进制
2,./vsftpd vsftpd.conf & 来运行vsftpd
如果出现could not bind listening IPv4 socket
可能系统中已经启动ftp,找到该进程,然后kill掉
3, 配置具体的vsftpd.conf文件 【比较复杂和繁琐】
http://blog.163.com/xyz_1112/blog/static/3869440220080442851960/
这篇文章介绍的比较详细
vsftpd本地用户不能登录问题的解决
http://www.chinaz.com/Server/Linux/09263945R008.html
总的来说vsftpd 权限认证登陆部分比较麻烦和复杂
KFS[CloudStore] 使用fuse挂载方法【原创】
九 15th
1, 下载fuse-2.8.4.tar.gz
2, tar -xzvf fuse-2.8.4.tar.gz
3, ./configure && make && make install
注:需要root权限
4, echo “/usr/local/lib” >> /etc/ld.so.conf
/sbin/ldconfig
5, /sbin/modprobe fuse
如果出现fuse module not found的话,请使用fuse2.7.*版本,因为Fuse网页上提供下载的版本2.8以前的源码中包含kernel模块部分
,2.8及2.8以后的版本不包含kernel模块源码
6, 修改kfs-0.5中CMakeLists.txt中的
SET(Fuse_LIBRARY_DIR “/usr/local/lib”)
SET(Fuse_INCLUDE_DIR “/usr/local/include”)
7, 重新编译kfs-0.5 会在bin目录下生成kfs_fuse二进制文件
8, 启动kfs
9, 编写kfs.prp
metaServer.name=10.60.1.125
metaServer.port=20000
注:kfs.prp这个配置的路径是在kfs_fuse_main.cc中写的,
注意启动时kfs.prp与kfs_fuse是在同一个目录下
10, ./kfs_fuse /tmp/kfs-fuse -f -o allow_other 启动 #-o allow_other 运行其他用户访问
cd /tmp/kfs-fuse 就可以看到当前kfs下的所有数据了
11. fuse的一些参数:
- 其中,影响比较大的参数有
- -s 禁用多线程
- -o allow_other 允许其它用户访问
- -o allow_root 允许root用户访问
- -o nonempty 允许挂载在非空目录上
- -o auto_cache 开启基于修改时间的cache
- -o kernel_cache 开启内核cache
注:kfs-0.5版本中存在bug以及可优化的地方
1, 在fuse_read 和fuse_write 中调用Seek, 判断返回值status应该是大于等于0 而不是等于0
因为status 的值应该是seek后的文件偏移
2, 可以优化的地方,在每次fuse_read 和 fuse_write 时,都会进行open 和close 操作,这样会导致效率上的问题,加入读取很大的数据,导致进行多次open 和 close操作。
优化方法:使用client->Fileno(path) 来获得已经打开的fd ,如果fd不存在的话,再进行Open 操作,在函数结束时不进行
Close 操作,而是将close操作放到fuse_flush函数中(新增的函数),具体作用请参考fuse手册
结束
Hypertable+KFS搭建步骤【原创】
九 9th
Hypertable+KFS搭建步骤
0, 前言
KFS是参考GFS文件系统的实现,使用C++编写 http://kosmosfs.sourceforge.net/
Hypertable 参考BigTable系统的实现,使用C++编写 http://www.hypertable.org/
二者都是开放源代码的,KFS+Hypertable == GFS +BigTable
分享一片好文–NoSQL数据库笔谈
八 17th
http://www.yankay.com/wp-content/uploads/2010/02/NoSql%20Database%20Note/#_3648342117667198_092538481578
近期评论