kfs的搜索结果

GDB调试stl的利器脚本

今天在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工具用法介绍

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

上述脚本的大致意思:

  1. “URL GOTO”: 进入该页面
  2. “TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:kw CONTENT=firefoximacros”:在input表单中输入”firefox imacros”, 这里主要是TAG这个命令,选中html中该标签,可使用TYPE, ATTR, FORM进一步指定,最常用的一个命令,详情点击这里
  3. “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早期的索引结构介绍

最近一直在做索引压缩方面的事情,无意中看到了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命中率会更高一些

sheepdog1

sheepdog源码学习笔记一

最近这两天一直在看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目录下是关于网络、日志和事件等处理模型
…..
今天暂时写到这里……待续

12934473758454

一年又一年

今天已经是2011年,真的感觉时间过的好快呀,转眼的功夫一年又过去了,每个人都需要停下脚步,回过头看看这一年的得与失,真的需要好好总结下了。
看到我的去年的总结,还是有种很亲切的感觉,没事写写平时的感受其实还是挺好的,可惜总是贴一些技术的文章,个人的想法的东西去想的还是太少(可能是性格的因素的吧,不希望把一些比较内心的想法表达出来),这个其实真的还是蛮好的,争取2011年能够写一些。
简单的列下流水账吧,太有文采的文字也写不出来
1,今年开学直到九月份一直在百度实习,实习是瞒着老板偷偷地出去的,时间还是挺紧凑的,还得正常去实验室,只能利用上课的时间去公司,基本上研一下半年没有上过课,不过最后还好,课程都过了,呵呵!其实本来没有打算出去实习的,真的想好好利用研究生的时间搞搞科研,正像在Google面试那个工程师所说的那样,既然读了研究生,就应该做一些与正常本科毕业就工作的不一样的事情,如果研究生三年就是再外面实习三年,虽然最后也可能找到很好的工作,但肯定还不如直接工作三年来的更直接一些呢,所以研究生就应该做一些研究生应该做的一些事,比如读读paper、写写论文啥的等;但是我最后还是选择出去实习,主要原因是原来跟着老板做的东西不感兴趣,不能就这样荒废三年对吧,而且我觉得我不是能够主动去学习的那种,需要某种需求进行推动我,我才会去看它学习它的,所以就偷偷摸摸的在百度实习了将近半年。
总的来说,在百度这半年还是挺开心的,挺有收获的,主要参与了Baidu App Engine 项目主要开发工作,因为这个项目是比较新的项目,当时去的时候,加我一共三个人,能够接触比较多的东西,从前端到最后端,而且对整个架构也理解的比较清晰,后来陆续又来了两个同事,这项目在百度内部目前发展的比较好,有个比较有意思的小插曲:当时我将近实习结束,我的mentor居然劝我退学,放弃读硕士,直接工作,并且拿出自己当例子说事(他是硕士毕业,但是我们的项目老大是本科毕业,而且比他还低一届),可惜我最后还是乖乖的回所继续干活了,哈哈~最后还是感谢chuanying,xiaowei还有dongfei zhangyong这些同学的,从你们身上学到了很多!
2,到九月份时,就乖乖的回实验室了,开始了我的正常的研究生生涯,到现在也将近三四个月了,做了一些东西,包括对KFS的改造,有关KVM虚拟机的学习等,这期间我居然开始修改内核代码了,这个是最难以置信的,不过还是太弱了,本科时学的体系结构和微机技术的知识基本上全忘没了,还得从头回忆,但是还真没觉得这个东西能够用到,但是看论文太少,自己的独立思考还太弱了。
3,生活上,十一的时候去了趟大城市铁岭,看望下丈母娘,话说这男女方如果不在同一个地方,真是比较麻烦,下次去不知道得等到啥时候,这结婚后就更纠结了,希望xiaofang同学看到不要有啥想法哦~
同时也给超哥、猛哥和韬哥提醒一声,找对象尽量都找近一点哦

2011年的期望:
1,祝愿小邓同学早日实现她的梦想

2,好好干活与学习,明年找个好工作
3,希望lc lm zt (对号入座)不再寂寞不再mensao, 猛哥也越nb, 超哥和韬哥飞越成功,我和猛哥的儿子的前途就全靠你俩了
写了好多,我发现我也太能墨迹了,不写了,回去睡觉了

CentOS配置NFS服务器的方法

最近搞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安装方法介绍

最近在做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挂载方法【原创】

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搭建步骤【原创】

Hypertable+KFS搭建步骤

0, 前言

KFS是参考GFS文件系统的实现,使用C++编写 http://kosmosfs.sourceforge.net/

Hypertable 参考BigTable系统的实现,使用C++编写 http://www.hypertable.org/

二者都是开放源代码的,KFS+Hypertable == GFS +BigTable

更多 >

分享一片好文–NoSQL数据库笔谈

http://www.yankay.com/wp-content/uploads/2010/02/NoSql%20Database%20Note/#_3648342117667198_092538481578

更多 >