Posted by summersmile1984 in 企业搜索on 三 31st, 2011 | 0 comments
在基于lucene的项目中,有与数据库结合的,比如compass,hibernate search,有企业搜索的,如solr。现在又发现一个类nosql的项目 elastic search。这个项目的设计非常符合当下潮流,那就是以lucene为底层架构,建立一个nosql的数据库。它拥有现在流行的nosql数据库如cassandra,mongodb等。地址是http://www.elasticsearch.org/
国内http://log.medcl.net/有关于这个的文章,是比较早研究这个项目的中文博客了
几个亮点包括:
基于json格式的service交互方式,不限定与某个驱动类库,比如你要使用oracle,mysql数据库,就必须要使用对应的jdbc驱动,与服务器交互使用的是其特有的二进制格式,但是使用json方式传递数据,你可以使用任何语言,在任何机器上对访问你的数据库,直接在js上访问都可以,符合cloud的特性
replication和sharding,每份数据都有多台机器存有副本,而不是传统的双机备份的方式。当有更多的数据时,只需要加服务器就可以了,基于server farm架构的集群比起传统的cluster的方式更高效的利用了服务器,可管理性和容错性更强。比如我现在项目中遇到海量数据需要加入索引中,基于现在的Autonomy搜索引擎的架构,没有sharding,需要规划那些数据放在哪台服务器上,然后再乘以2做双机备份,可能会有200-500台服务器,而且他们不能统一维护,运维人员负担大,开发人员也要想办法把这些服务器上的N多个索引库规划成一个接口提供给前端消费者。如果有了replication和sharding的架构,只需要往server farm中加入这几百台服务器即可了。
当数据量在几台服务器上的时候,不容易感觉到其优点,但是当数据量增速非常快的时候,这种架构的优越性就相当明显。这非常适合提供云服务的架构,那就是可以很轻易的扩展,同时可以以一个统一的视图维护,也不需要修改任何代码。所有需要做的就是加上服务器,然后配置即可,就像拧大水龙头的开关一样简单。
了解lucene的人都知道,lucene是既可以处理需要全文倒序索引的文本,也可以处理数字,时间,字符串,地理位置等各种数据结构的,它可以提供和SQL一样的简单查询语句接口,编程非常方便。传统的应用都是用RDBMS作为数据存储和访问的引擎,但是遇到需要全文索引的数据,用like不能解决的问题的时候,才引入搜索引擎,这时往往要维护两套数据,一套是实际数据,一套是索引数据,并且还要在程序中去同步他们。如果采用elasticsearch作为数据引擎,就一举两得了。拥有了你需要处理的各种数据的解决方案。
而且基于lucene意味着它可以处理其他nosql不适太擅长的range查询,多个key的索引。
这么好的东东,是不是什么都可以通吃呢?和大多数nosql项目一样,它比较适合用在数据量会很大或者将会扩展到很大的时应用场景,并且它也不适合处理在线交易这类transaction的应用中。但是特别适合应用于对数据可找到性要求较高,同时也对插入的频繁度和实时性要求不那么高的场景,虽然项目宣言中说real-time search,但是毕竟还是准实时的,而且因为插入的时候要进行index,所以插入的性能应该是比不上nosql数据库或者RDBMS数据库的。
基于多租户的提供云应用服务的内容系统,比如wiki,论坛,cms,资料管理系统等等以内容文本为主要业务实体的系统中。
软件行业真是一个后发优势表现得淋漓尽致的行业,曾经投入巨大人力物力建设维护的产品,随着时代的变化,对于新的环境的适应变得艰难起来,而基于新的设计理念和架构设计的软件忽然就解决了曾经那么难以解决的问题。除了久经使用证明稳定性外,忽然优势丧失全无。众多的业务规则和巨大的已有投资,以及潜在的风险又让重写变成很艰难的决策。所以软件行业的选购不能和别的产品一样,可能越新越好。