分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]

由lucene集群想到

[不指定 2008/04/11 11:58 | by edwardproAdmin ]
你的搜索可以集群吗?这是一个突然发来的问题。。。其实lucene说实话什么都好就是集群不方便。。。

查看了些资料基本上做集群都是利用系统的集群文件系统等实现的,这个效率不会好。

突然我觉得可以这样的结构来做集群:

一台单机做索引,索引文件存在这台物理机上

然后利用nfs将索引文件映射到多台子机,子机将nfs的内容用RAMDirectory读到内存索引中,然后子机各自使用web服务提供前台访问

前端再使用集群服务器实现前台的集群

当索引更新的时候可使用jms通知子机及时同步nfs和RAMDirectory的内容

这样的集群从性能上应该能有一定的提高。
Tags: ,

关于group by

[不指定 2008/03/22 10:30 | by edwardproAdmin ]

周五因为在搜索引擎中要使用group by操作,原有的 count发似乎会出现很大的效率问题,所以也简单考虑了下groupby的实现,在sql里我猜想(我对这个算法完全没有概念),首先利用矩阵算法将所有的row排序好,然后以此顺序取出,然后再加入聚合函数count或者sum,也就是说在sql中实际上他是先把按groupby字段索引排序然后再进行数据聚合,最后再拉出需要的数据(这个猜想是基于group by字段需要索引得到的,不知道是否正确)
而在lucene中也是类似的状况,现在我们考虑lucene 大家知道在lucene中得到的结果集是hits,hits实际上和sql中的结果集recordset是一个概念的,即使你得到了一个数百万的结果集,数据也并没有立即从中拉出(这应该就是为什么表需要有主键的原因)。但lucene中有个问题,我无法得到一个多结果集,也就是说我无法得到一个按groupby排序的某个中间结果,我得到的只是输出,因此在group中我只能选择先将所有数据全部读出这条路,那么读出来的数据怎样groupby?我实现的是基于hash表的 数组遍历。是这样的过程:
hash<字段名,groupby结果集>  
groupby结果集<字段值,聚合值>
用这样的hash嵌套实现,算法中我只使用了一次hash循环,但比较大的伤害是,数据集似乎被从头到尾取了一次,会产生很多io,并且由于我的group和查询是一种并行算法,因此等于结果集被取出了两遍(目标中的group是类似taobao的产品列表的类别归类查询页面,所以group是一个独立结果集并非输出结果集),目前测试下来还没有感觉内存消耗有极其大的影响,但不知道在高负荷状态下的水平,因此还需要继续查看。
关于group的算法,如果有更好的办法和算法或者在lucene下有更好的解决方案欢请路过不要吝啬你的idea告诉我吧。

Tags: , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]