Sphinx 1.10-beta实时索引等新特性的体验报告——sphinx新特性体验(二)

sphinx 1.10推出了不少新特性:html

好比:实时索引,字符串属性,prefork 和 threads支持,及SphinxSE 中的option添加等mysql

详细请查阅原文:http://www.sphinxsearch.com/docs/manual-1.10.html#rel110sql

我的以为 sphinx 1.10-beta 两个最大的新特性:字符串索引和实时索引。对sphinx使用来讲是一个很大的飞跃数据库

字符串索引:能够很方便的存储,若是结合实时索引的话,就已经造成了貌似nosql同样的数据缓存层。并且,不少数据没必要二次在数据库中查询,天然对
程序开发和运维有很大的帮助。检索出来后直接使用其数据,不过这个和全部缓存数据同样,注意在数据更新操做的时候须要同步更新这里的sql_attr_string
或rt_attr_string缓存

实时索引(Real-time indexes):
优势:
此功能是我的对sphinx的最大期待。在正式部署中,sphinx real-time 能够当成一个相似 memcache的数据存储插件,充分利用其查询、分布式
部署的便捷性,作到数据层次化管理。缓解数据库的压力。同时还支持事务操做,这个在不少nosql中是所缺乏的。这,简直就是sql和nosql的混合体啊^_^并发

不足:
今天特别对实时索引进行了功能性的测试。虽然此功能很新颖且实用。但现阶段,若部署在生产环境下可能会遇到如下几个问题:运维

a、数据插入问题:Real-time的功能采起的是相似 标准sql的语句执行数据存储。如:nosql

insert into(id,gid,title,content) values(1,234,’hello sphinx ‘,’I am superman!’);分布式

这里的id必须人工计算:不能像mysql的auto_increment对主键进行自动累加。
另外,不能使用标准sql 的函数 max获取最大值,如:select max(id) from testrt,(sphinxQL中提示可使用函数,但我在尝试过,系统提示语法错误,可能暂时只针对 非实时索引sphinxSE方式)
若是数据多的话,并且并发量比较大的话,在程序端实现起来天然会出现异常。函数

我这里暂时采用了一个办法处理这个问题:
查询 最大的id,并每次进行累加

select * from testrt order by id desc limit 1;

获取结果集的 id即为最大,至关于mysql中的auto_increment 变量。而后再对每次数据插入进行累加。具体作法能够参照前一篇的程序代码

b、数据删除:只能使用惟一的语句 delete from testrt where id=123; 若是数据量大的话,必须在逻辑层循环删除。并且不支持 in操做,不过文档中已提到,in操做已经在
计划中了,期待着。 另外,不能所有清空数据,不能像 数据库操做的 truncate table那样便捷。若索引很大并想重建索引的话,那就。。。等着抓狂吧

c、索引数据更新:sphinx没有提供标准sql的update操做(其实也不必),而是采起了相似mysql 的replace 语法。
实例:repalce into(id,gid,title,content) values(1,234,’hello sphinx ‘,’I am superwomen!’); 不过遗憾的是不能进行条件更新

d、查询:Real-time的sql查询仍是很方便,或者很健全,好比:对字段查询、属性过滤、分组聚合、排序、评分等。彻底知足一个搜索引擎的查询需求。但此版本仍是缺乏支持一些
数据库的经常使用函数。正如刚才提到的max、min等;以及对字段的较复杂的操做。
好比:select count(gid) as amount from testrt;就会报语法错误,这个例子能够采起变通的方式处理

select * from testrt group by gid;

其结果集中存在 @groupby @count变量值

文档中有说起在sphinxSE中可使用函数,不过在这里暂时用不了,仍是期待!

综上所述:sphinx的实时索引特性,暂时在生产部署上功能可能欠缺一些,必须采用其余办法变通,故,生产需谨慎,仍是期待正式版吧!

以上便是对sphinx 1.10的2个新特性的体验报告^_^。固然以上的结论只是因我的在工做中可能会遇到的问题而提出的,我不能指望sphinx彻底取代数据库 可是,sphinx小弟弟,你能帮就多帮帮你大哥mysql吧,你看他天天累得cpu冒汗,还分布式的累,不容易啊!

相关文章
相关标签/搜索