分布式搜索方案选型之二:Solandra

 

      我在学校项目实践时使用过solandra,它是一个基于solr和nosql数据库cassandra的分布式搜索引擎。cassandra是由facebook开源的nosql数据库,facebook的信箱搜索就是基于它实现的,它是基于列结构的,不同与关系数据库。它的数学模型基于google的bigtable和Amazon的Dynamo,它的一个重要特性是没有对外没有中心节点,所以不会存在单点故障的问题,如果当前猪节点挂了,那么它余下的节点会进行自动投票,选举出新的节点,这种特性未来必定是所有分布式系统的特性之一。它是当前热门的nosql数据库之一。

       我看了下它的源码,它从底层上重新实现了solr索引的存储,把索引数据保存到cassandra中。它的这种实现方式给了我一个思路,就是lucene和nosql数据库结合的可行性。由于solandra的零配置和自动发现的特性,很容易就部署起来,基本上一启动服务就行了。我把原先用于测试的200万数据导浸solandra中,它完全是黑盒模式的,你根本不知道你的数据分布到了那台机器,你可以设置副本数来冗余数据,增加可用性和容错性。

       导完数据就对它进行性能测试,发现它的第一次查询效率非常低,平均查询时间4秒,比原生的solr低了很多,我猜测这里性能的差距主要是因为它把索引存储cassandra中,原本的是直接保存到文件系统中的,现在是先从数据库读取到文件系统,多了一步,所以查询效率有所差异,不过这样的好处是真正实现了索引的分布式存储。想到如果运行当中有台机器挂了怎么办?于是就开始测试它的容灾性,结果发现,如果是一个3台机的solandra机器,挂了其中一台机还是可以查的,但是如果挂了两台机就搜索不出东西。这是因为我把索引的副本定义为2即集群中有两份完整的索引。由于它索引不可见的黑盒特性我们并不知道它实际上索引的分布情况,这样的话对后期索引的维护并不好。加上它查询效率的问题,最终放弃该方案。

solandra项目地址:https://github.com/tjake/Solandra

你可能感兴趣的:(分布式搜索方案选型之二:Solandra)