`
aitanjupt
  • 浏览: 2404 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
xsz
社区版块
存档分类
最新评论

Solr的使用进行的调研

    博客分类:
  • Solr
阅读更多

摘要:本篇是本人对Solr使用进行的调研,具体包括

            使用DataImportHandler从数据库中近实时同步数据、测试Solr创建索引的效率、以及测试Solr的搜索效率等。

 具体的搜索引擎概念、Solr搭建方法、数据库mysql使用方法,假设读者已有了基础。 

 

http://www.cnblogs.com/wgp13x/p/3742653.html

 

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、要更新的IDs2、每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不需要commitsolrServer.add(doc)即可添加数据。SolrServer solrServer = newConcurrentUpdateSolrServer(solrUrl, 队列大小线程数)其需要与autoCommitautoSoftCommit配置搭配使用,网上建议配置如下:

<autoCommit>

                 <maxTime>100000(1-10min)</maxTime>

                 <openSearcher>false</openSearcher>

</autoCommit>

<autoSoftCommit>

                 <maxTime>1000(1s)</maxTime>

</autoSoftCommit>

17个各种类型字段(原纯文本Size约为200BSolrInputDocument对象Size约为930B),以只保存ID、每字段均建立索引的方式创建索引。

如需具体的测试代码可以联系本人。

  • 17个字段,四核CPU16G内存,千兆网络

数据量(W)

线程数

队列大小

时间(s)

网络(MB/s)

速率(W/s)

200

20

10000

88

  1. 10.0

  1. 2.27

200

20

20000

133

  1. 9.0

  1. 1.50

200

40

10000

163

  1. 10.0

  1. 1.22

200

50

10000

113

  1. 10.5

  1. 1.76

200

100

10000

120

  1. 10.5

  1. 1.67

  • 速度:Solr创建索引速度与Solr机器CPU正相关,一般情况下CPU占用率能达到接近100%,内存占用率在默认情况下需达到接近100%,网络、磁盘占用率均小。因此创建索引的效率瓶颈在CPU及内存。当内存占用率维持在接近100%,索引大小达到物理内存大小时,插入新的数据容易出现OOM错误,这时需要使用ulimit &ndash;v unlimited命令更改virtual memory配置为unlimited再启动Solr便不会出现OOM错误。在64位机器系统上,官方推荐使用MMapDirectory

  • NRTCachingDirectory速度偏慢,会在某一时间索引添加停滞,Size先大后小,减小后索引添加继续。

  • 大小:1亿索引大小约为13-16GB2亿索引大小约为30GB

 

1.3  Solr搜索方式

  • 交集:{name:亿度 AND address:海淀} {text:海淀 AND 亿度}

  • 联集:{name:亿度 OR address:海淀} {text:海淀 OR 亿度}

  • 排除:{text:海淀 -亿度}

  • 通配符:{bank:中国*}

  • 范围:{num:[30 TO60]}

  • 分页:start rows

  • 排序:sort

  • Group 权重中文分词 ...

 

1.4  亿级数据搜索速度

  • 本节测试是基于1.2节创建的索引上的。

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

0
0
分享到:
评论

相关推荐

    Solr调研总结

    【Solr调研总结】 Solr,作为Apache软件基金会下的一个顶级项目,是一个基于Java的全文搜索引擎,它在Lucene的基础上提供了更高级别的服务。Solr不仅具有强大的全文搜索能力,还针对高流量网络进行了优化,支持多种...

    Solr调研总结.pdf

    Solr调研总结

    Solr调研总结共48页.pdf.zip

    本篇Solr调研总结涵盖了48页的内容,可能涉及以下几个关键知识点: 1. **Solr架构**:Solr采用分布式架构,支持多节点集群,可以实现数据的分布式存储和处理,提高系统的可用性和性能。通过Sharding(分片)和...

    Java开发工程师简历模板(三十八)

    - **急速购网上商城**:张三在这个项目中负责了多个关键模块的开发,包括商品搜索、管理、内容管理等,使用了Dubbo和Zookeeper进行服务治理,以及Nginx、Solr、Redis等提升系统性能和可扩展性。 - **联昊通物流...

    java2年工作经验简历_java简历.doc

    在急速购项目中,她负责了多个关键模块的开发,如商品搜索和管理,使用FastDFS进行分布式存储,并进行了代码优化和单元测试。在联昊通项目中,她参与了需求调研到系统测试的全过程,实现了基础设置、受理和调度流程...

    java简历项目_java简历.doc

    他利用Maven提升开发效率,Solr进行商品检索,Nginx部署静态资源,Redis做缓存,FastDFS存储图片,FreeMarker实现页面静态化,ActiveMQ处理消息队列。 【天华物流管理系统】采用Struts2+Spring+Hibernate+MySql+...

    APACHE RANGER 调研----ranger 原理解析

    它提供了对Hadoop数据的细粒度访问控制,支持多种数据源,包括但不限于HDFS、HBase、Storm、Kafka、Solr等。本文对Apache Ranger的原理进行解析,包括对Hive数据库的权限管理、用户管理、策略的创建、删除和更新等...

    JavaEE学习课程分享精英强化班腾科.doc

    - Lucene入门、分词器、索引库操作、Tika工具使用、Solr原理及使用。 #### 五、JavaEE重量级框架应用开发 - **EJB 3.0标准**: 介绍企业级JavaBean的概念和技术特点。 - **JBoss、WebLogic服务器**: 应用部署和配置...

    Java面试参考简历.docx

    - 在**杭州米人科技有限公司**担任**Java开发工程师**期间,参与了方案讨论和技术调研,编写了软件工程文档和开发文档,并承担了相关产品模块功能的设计、编码开发与单元测试等工作。 #### **项目经验** - **明宇...

    韩某某_嵌入式_java简历_程序员简历模板_计算机相关专业.doc

    在河南酷益软件公司,韩某某担任软件工程师,负责开发任务、需求调研、需求分析、软件系统设计等工作。 2.2 南阳宜家购物商城(2015.10 —— 2016.08) 在南阳宜家购物商城,韩某某担任软件工程师,负责开发工作单...

    java1000题基础百战程序员

    - 项目调研:需求分析、市场研究 - 数据库表设计:ER图、SQL建表语句 - 需求分析、概要设计与详细设计文档编写 #### 二、高级主题 - **内部类专题** - 内部类的分类:成员内部类、局部内部类等 - 内部类的访问...

    java6年工作经验简历_java简历.docx

    * 2016.06 - 2017.02,中国民航信息网络股份有限公司(北京), Java 开发,负责小模块的设计、开发和维护,进行软件设计和编码实现,确保安全、质量和性能。 * 2014.04 - 2016.05,北京齐莱信息技术有限公司,Java ...

    java8源码-MyLearnDiary:记录日志

    需求调研 了解客户的需求和要达成的目标,客户包括运营方,投资方; 了解公司对项目的期望,是想把项目越做越大还是想赚钱?是想做样板project还是干脆想敷衍了事; 了解自己手上的资源和预算,包括人员,设备。 ...

Global site tag (gtag.js) - Google Analytics