摘要:本篇是本人对Solr的使用进行的调研,具体包括
使用DataImportHandler从数据库中近实时同步数据、测试Solr创建索引的效率、以及测试Solr的搜索效率等。
具体的搜索引擎概念、Solr搭建方法、数据库mysql使用方法,假设读者已有了基础。
1. Solr
1.1 Solr从数据库中读取数据并创建索引速度(使用DataImportHandler)
l 一次性创建索引
在JVM内存配置为256M时,建立索引至1572865时出现Java heap异常;增加JVM内存配置至512M,设置系统环境变量:JAVA_OPTS -Xms256m -Xmx512m,能成功建立2112890条(花费2m 46s)。
平均索引创建速度为:12728/s(两个string字段,长度大约为20字符)。
l 增量创建索引
注意:近实时增量索引需要写数据库服务的时间与搜索引擎服务器时间同步(数据库服务时间先于搜索引擎服务器时间才行)。
使用默认的DIH创建增量索引速度较慢(50/s~400/s),不如全索引(1W/s),因为需要从数据库中读取多遍(1、要更新的IDs;2、每1ID去数据库中重取所有列)。
故需要更改DIH增量索引程序,以全索引的方式读数据;或采取全读出的方式,一次全读出所有列,具体文件配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource name="mysqlServer"
type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
batchSize="-1"
url="jdbc:mysql://192.103.101.110:3306/locationplatform"
user="lpuser"
password="jlitpassok"/>
<document>
<entity name="locatedentity" pk="id"
query="select id,time from locationplatform.locatedentity where isdelete=0 and my_date > '${dataimporter.last_index_time}'"
deletedPkQuery="select id from locationplatform.locatedentity where isdelete=1 and my_date > '${dataimporter.last_index_time}'"
deltaQuery="select -1 id"
deltaImportQuery="select id,time from locationplatform.locatedentity where isdelete=0 and my_date > '${dataimporter.last_index_time}'">
<field column="id" name="id"/>
<field column="time" name="time"/>
</entity>
</document>
</dataConfig>
|
通过这样的配置可以达到增量索引9000/s(两个string字段)(数据库里对时间建立索引,对这里的性能影响不大)。
l 注意:作者不推荐使用DataImportHandler,有其它更好更方便的实现可以使用。
1.2 Solr创建索引效率
-
ConcurrentUpdateSolrServer使用http方式,embedded方式官方不推荐使用。ConcurrentUpdateSolrServer不需要commit,solrServer.add(doc)即可添加数据。SolrServer solrServer = newConcurrentUpdateSolrServer(solrUrl, 队列大小, 线程数)其需要与autoCommit、autoSoftCommit配置搭配使用,网上建议配置如下:
<autoCommit>
<maxTime>100000(1-10min)</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>1000(1s)</maxTime>
</autoSoftCommit>
|
17个各种类型字段(原纯文本Size约为200B,SolrInputDocument对象Size约为930B),以只保存ID、每字段均建立索引的方式创建索引。
如需具体的测试代码可以联系本人。
数据量(W条)
|
线程数
|
队列大小
|
时间(s)
|
网络(MB/s)
|
速率(W条/s)
|
200
|
20
|
10000
|
88
|
-
10.0
|
-
2.27
|
200
|
20
|
20000
|
133
|
-
9.0
|
-
1.50
|
200
|
40
|
10000
|
163
|
-
10.0
|
-
1.22
|
200
|
50
|
10000
|
113
|
-
10.5
|
-
1.76
|
200
|
100
|
10000
|
120
|
-
10.5
|
-
1.67
|
-
速度:Solr创建索引速度与Solr机器CPU正相关,一般情况下CPU占用率能达到接近100%,内存占用率在默认情况下需达到接近100%,网络、磁盘占用率均小。因此创建索引的效率瓶颈在CPU及内存。当内存占用率维持在接近100%,索引大小达到物理内存大小时,插入新的数据容易出现OOM错误,这时需要使用ulimit –v unlimited命令更改virtual memory配置为unlimited再启动Solr便不会出现OOM错误。在64位机器系统上,官方推荐使用MMapDirectory。
-
NRTCachingDirectory速度偏慢,会在某一时间索引添加停滞,Size先大后小,减小后索引添加继续。
-
大小:1亿索引大小约为13-16GB,2亿索引大小约为30GB。
1.3 Solr搜索方式
1.4 亿级数据搜索速度
l精确搜索
数据量(亿条)
|
字段数
|
字段类型
|
时间(ms)
|
1
|
1
|
long
|
1
|
1
|
1
|
double
|
80-1400
|
1
|
1
|
string
|
7-800
|
1
|
1
|
date
|
2-400
|
1
|
2(OR)
|
long
|
2
|
1
|
2(OR)
|
double
|
200-2400
|
1
|
2(OR)
|
string
|
500-1000
|
1
|
2(OR)
|
date
|
5-500
|
数据量(亿条)
|
字段数
|
字段类型
|
时间(ms)
|
1
|
1
|
long
|
2000-10000
|
1
|
1
|
double
|
1000-17000
|
1
|
1
|
string
|
20-16000
|
1
|
1
|
date
|
/
|
1
|
2(OR)
|
long
|
3000-25000
|
1
|
2(OR)
|
double
|
7000-45000
|
1
|
2(OR)
|
string
|
3000-48000
|
1
|
2(OR)
|
date
|
/
|
数据量(亿条)
|
字段数
|
字段类型
|
时间(ms)
|
1
|
1
|
long
|
6-46000
|
1
|
1
|
double
|
80-11000
|
1
|
1
|
string
|
7-3000
|
1
|
1
|
date
|
1000-2000
|
1
|
2(OR)
|
long
|
100-13000
|
1
|
2(OR)
|
double
|
100-60000
|
1
|
2(OR)
|
string
|
3000-13000
|
1
|
2(OR)
|
date
|
7000-10000
|
范围越大,结果数据越多,搜索花费时间越长。
第一次搜索较慢,后来时间花费较少。
来自为知笔记(Wiz)
本人主要从事海量数据处理、搜索,系统消息处理,系统架构设计的工作。 喜欢写些文章,将自己近期的工作经验总结一下。欢迎转载,但转载时请说明出处。 也可以关注我的新浪微博http://weibo.com/aitanjupt,进行交流。
本文出自 “aitanjupt” 博客,请务必保留此出处http://aitanjupt.blog.51cto.com/2839166/1414964
分享到:
相关推荐
【Solr调研总结】 Solr,作为Apache软件基金会下的一个顶级项目,是一个基于Java的全文搜索引擎,它在Lucene的基础上提供了更高级别的服务。Solr不仅具有强大的全文搜索能力,还针对高流量网络进行了优化,支持多种...
Solr调研总结
本篇Solr调研总结涵盖了48页的内容,可能涉及以下几个关键知识点: 1. **Solr架构**:Solr采用分布式架构,支持多节点集群,可以实现数据的分布式存储和处理,提高系统的可用性和性能。通过Sharding(分片)和...
- **急速购网上商城**:张三在这个项目中负责了多个关键模块的开发,包括商品搜索、管理、内容管理等,使用了Dubbo和Zookeeper进行服务治理,以及Nginx、Solr、Redis等提升系统性能和可扩展性。 - **联昊通物流...
在急速购项目中,她负责了多个关键模块的开发,如商品搜索和管理,使用FastDFS进行分布式存储,并进行了代码优化和单元测试。在联昊通项目中,她参与了需求调研到系统测试的全过程,实现了基础设置、受理和调度流程...
他利用Maven提升开发效率,Solr进行商品检索,Nginx部署静态资源,Redis做缓存,FastDFS存储图片,FreeMarker实现页面静态化,ActiveMQ处理消息队列。 【天华物流管理系统】采用Struts2+Spring+Hibernate+MySql+...
它提供了对Hadoop数据的细粒度访问控制,支持多种数据源,包括但不限于HDFS、HBase、Storm、Kafka、Solr等。本文对Apache Ranger的原理进行解析,包括对Hive数据库的权限管理、用户管理、策略的创建、删除和更新等...
- Lucene入门、分词器、索引库操作、Tika工具使用、Solr原理及使用。 #### 五、JavaEE重量级框架应用开发 - **EJB 3.0标准**: 介绍企业级JavaBean的概念和技术特点。 - **JBoss、WebLogic服务器**: 应用部署和配置...
- 在**杭州米人科技有限公司**担任**Java开发工程师**期间,参与了方案讨论和技术调研,编写了软件工程文档和开发文档,并承担了相关产品模块功能的设计、编码开发与单元测试等工作。 #### **项目经验** - **明宇...
在河南酷益软件公司,韩某某担任软件工程师,负责开发任务、需求调研、需求分析、软件系统设计等工作。 2.2 南阳宜家购物商城(2015.10 —— 2016.08) 在南阳宜家购物商城,韩某某担任软件工程师,负责开发工作单...
- 项目调研:需求分析、市场研究 - 数据库表设计:ER图、SQL建表语句 - 需求分析、概要设计与详细设计文档编写 #### 二、高级主题 - **内部类专题** - 内部类的分类:成员内部类、局部内部类等 - 内部类的访问...
* 2016.06 - 2017.02,中国民航信息网络股份有限公司(北京), Java 开发,负责小模块的设计、开发和维护,进行软件设计和编码实现,确保安全、质量和性能。 * 2014.04 - 2016.05,北京齐莱信息技术有限公司,Java ...
需求调研 了解客户的需求和要达成的目标,客户包括运营方,投资方; 了解公司对项目的期望,是想把项目越做越大还是想赚钱?是想做样板project还是干脆想敷衍了事; 了解自己手上的资源和预算,包括人员,设备。 ...