相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能。传统的sql查询只能使用like 或者FIND_IN_SET来实现、后者性能稍微好点但是必须要逗号分隔才可以实现匹配、甚至多条件的话还可能用到OR这是极影响系统性能的。
最近公司项目需要、主要是系统查询缓慢、并且查询精度不敢恭维。一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中。当时闲暇时间大概搞了将近一个星期的时间、索引的增删查改以及中文分词IKAnalyzer。但是数据量大了问题就来了、Lucene是不支持集群的。谷歌了半天找到一个叫solr的东西、它是基于Lucene的全文搜索服务器并且支持集群。然后就是各种搭环境配置中文分词、搭建zookeeper服务器、搭建solr服务器、然后是服务器之间的各种整合。期间出现的问题可谓是数不胜数、只能用2个字来形容”繁琐”。说了那么多顺便说说solr的安全性问题、SolrJ没有提供访问控制接口,也就是说只要知道solr服务器信息,任何人都可以连接solr服务器来进行索引增加、修改、删除操作。虽然有多种方式可以限制、但总觉得心里不踏实、但是阿里云的Opensearch就不一样了(见后面代码)。
趁着阿里云搞活动、也是公司业务需要于是申请了Opensearch内侧资格。
一:创建应用
1、创建应用名以及描述。
2、选择结构类型、因为是测试所以选择自定义结构。输入表明以及字段点击继续即可。
3、继续后会看到一个静态展示的表结构这时点击下一步即可。
4、因为没有购买阿里云的OSS和ODPS所以这里选择手动上传。
5、应用结构展示。
6、创建后还要激活应用。
7、这里你可以自定义配额、以后也可以自行修改(很人性化的功能)。
8、同第四步没有OSS和ODPS这里直接选择完成即可、至此整个应用配置完毕。
9、因为本人是做javaWeb开发的所以这里选择java的SDK下载。
二:创建demo
1插入数据
本地测试插入1000条数据、push以后花费时间为4565ms
本地测试插入10000条数据、push以前花费时间106ms、push半天报错
复制代码
感觉应该是阿里云服务端做了限制、一次性push 10000条记录就会中断、选择每1000条数据push一次、测试插入10000条数据:71940ms。
本地测试插入五万条数据一次push 1000条数据花费时间:210267ms
本地测试插入十万条数据一次push 1000条数据到6万的时候中断、不清楚是否阿里云服务端限制、如果后台定时任务一次性构建百万或者千万条数据是否还有影响。
具体一次性push多少数据、我没有详细的测试、应该是越多越好、以上是测试数据仅供参考、并不是十分准确。
至此一共插入124147条数据也算是10万级别的了。
2、查询数据
以上为查询关键词VPS分页查询10条数据查询时间为0.009275秒几乎可以忽略不计了。
三:系统测试
1、目前系统测试
系统为单核非集群、服务器为tomcat、数据库数据为5000条。
页面数据包括基础查询条件以及表数据展示、单表字段为47个。
并发100人,页面搜索反应时间为0.73秒
并发120人,页面搜索反应时间为1.18秒
并发150人,页面搜索反应时间为5.08秒
应用服务器:CPU<50%左右,内存使用较小
根据以上12万数据的查询大体可以得出结论并发150应该会控制到ms级别。
特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。