`
liuInsect
  • 浏览: 133418 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

lucene3.5与mysql 查询性能的对比

阅读更多


由于最近做毕设,需要做一个商品查询模块,用到了lucene来做商品索引的查询,原因为:

1.marks(商品标签)字段含有多个标签,当针对某个标签查询时,或许只能用like 查询,这样的查询慢!
2.没用过lucene,想用来测试下性能

可能结果早就显而易见,但是这次测试我要的是数据,不仅仅是结果,所以别说什么你们知道答案类似的话~

言归正传,我的设计是这样的:


 



而,性能对比,对比的就是搜索条件,是在lucene快,还是直接去mysql快!
我的lucene模块提供了两种索引方式,
     一种是创建索引在文件中,需要查询时在索引文件中去查询
     二是在内存中创建索引,需要时直接再内存中查询

由于第二种方式明显快于第一种(设计第一种的原因是,索引仅仅在内存是不够的,需要持久化,不能每次都重新拉数据再创建索引),所以仅仅是放上测试数据,仅作对比!

说明:
1.MYSQL只有主键索引,marks字段建有索引,但是通过
explain  select * from t_baobei   t where     t.baoBeiMarks like '%手'  ;
explain  select * from t_baobei   t where     t.baoBeiMarks like '%手%'  ;
explain  select * from t_baobei   t where     t.baoBeiMarks like '手%'  ;

三种情况确认,该SQL语句没有用到索引

2.lucene分词器用的是
StandardAnalyzer()

测试1: (1W条数据)
创建索引在文件中:
           index's num is 10000
           create  use : 1953 ms
           search  use : 547 ms
创建索引在内存中:
           index's num is 10000
           create  use : 1046 ms
           search  use : 94 ms
MYSQL中:
SQL 语句为 SELECT * from t_baobei t  WHERE t.baoBeiMarks like   '%手机%'
   search  use : 16ms --40ms

测试2: (3W条数据)
创建索引在文件中:
                      第一次
           index's num is 30000
           create  use : 2641 ms
           search  use : 609ms
           第二次          
           index's num is 30000
           create  use : 3063 ms
           search  use : 563ms
           第三次
           index's num is 30000
           create  use : 3704 ms
           search  use : 547ms

           第四次:删除已有索引,索引大小3M
           index's num is 30000
           create  use : 2500 ms
           search  use : 531ms
           
           可以看出:
           1.创建索引的耗时随记录数的增加而增加,3W条数据的平均耗时为3S以上,数据量是原来的3倍,耗时自是1.5倍          
           2.从1W到3W,搜索耗时增加不大

创建索引在内存中:
           index's num is 30000
           create  use : 1687 ms
           search  use : ~94 ms(搜索'手');
           search  use : ~110 ms(搜索'手机');
           可以看出:
           1.和1W数据在内存中创建和搜索比,数据量是原来的3倍,创建耗时是原来1.5倍,搜索耗时比本没有差别
           2.和在文件中创建和搜索索引比,同样的数据量(3W),创建耗时减少一半,搜索耗时,减少一个数量级!!
           3.和MYSQL 相比四种like方式来说,基本没有竞争优势,除最耗时的第一条SQL外,其余mysql均只有lucene的20%

MYSQL中:
 * (30000条数据)
      [SQL] SELECT * from t_baobei t  WHERE t.baoBeiMarks like   '%手%'
      时间: 140ms
      [SQL] SELECT * from t_baobei t  WHERE t.baoBeiMarks like   '手%'
      时间: 30ms
      
      [SQL] SELECT * from t_baobei t  WHERE t.baoBeiMarks like   '%手机%'
      时间: 16ms --40ms
      
      [SQL] SELECT * from t_baobei t  WHERE t.baoBeiMarks like   '手机%'
      时间: 16ms --40ms

    PS: 发现一个有趣的现象,不同的like方式的写法,搜索时间差距这么大.字符越少,%越多,粒度就越细.耗时越严重










  • 大小: 23.6 KB
分享到:
评论
2 楼 liuInsect 2013-05-11  
妍然一笑2010 写道
数据量小没有必要用lucene。

恩 是的 ,仅仅是自己的小小研究
1 楼 妍然一笑2010 2013-05-09  
数据量小没有必要用lucene。

相关推荐

    Lucene3.5源码jar包

    3. **查询解析**:`QueryParser`类负责将用户的查询字符串转化为 Lucene 可识别的查询对象。源码中包含了对布尔查询、短语查询等多种查询类型的处理逻辑。 4. **搜索过程**:`Searcher`类实现了搜索功能,包括`...

    lucene3.5的各种包

    5. **其他组件**: 除了上述组件,Lucene 3.5还可能包含了其他实用工具,如倒排索引构建工具、性能测试工具、示例代码等,帮助开发者更好地理解和使用Lucene。 使用Lucene 3.5时,开发者需要注意的是,虽然这是一个...

    lucene 3.5 官网 源代码

    在这个版本中,Lucene已经展现出了其在文本分析、索引构建和查询执行等方面的卓越性能。本文将围绕Lucene 3.5的源代码进行深入探讨,以帮助读者理解其核心机制和工作原理。 一、Lucene架构概述 Lucene的架构主要由...

    luke3.5 查看lucene3.5索引

    luke3.5 可查看lucene3.5索引

    lucene3.5的创建和增删改查

    本文将详细介绍如何在Lucene 3.5中进行索引的创建、文档的添加、删除、修改和查询操作。 一、创建索引 1. 初始化环境:首先,我们需要导入Lucene的相关库,包括核心库(lucene-core-3.5.0.jar)、分析库(lucene-...

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词

    lucene3.5全文检索案例lucene+demo

    本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、关键功能以及如何通过实例进行操作。 一、Lucene 3.5核心概念 1. 文档(Document):Lucene中的最小处理单元,相当于数据库...

    Lucene3.5实例

    《Lucene3.5实例详解:构建全文搜索引擎》 Apache Lucene是一个开源的全文检索库,为Java开发者提供了强大的文本搜索功能。在本实例中,我们将深入探讨如何使用Lucene 3.5版本来构建一个基本的全文搜索引擎,主要...

    Lucene 3.5 api HTML版

    Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了高级文本检索功能,广泛用于构建搜索引擎和其他需要高效全文检索能力的应用。Lucene 3.5 API 是该库在2011年发布的一个版本,包含了对当时...

    lucene3.5高亮jar

    lucene3.5高亮

    Lucene3.5的学习研究报告

    总之,Lucene 3.5版本的更新带来了诸多改进,包括性能优化、新的查询功能和更好的多线程支持,使得开发者能够构建更强大、更高效的搜索引擎。同时,理解和解决在实际应用中遇到的问题也是优化Lucene性能的关键步骤。

    Lucene3.5帮助文档

    chm格式的Lucene帮助文档,Lucene3.5

    lucene3.5源码

    Lucene 3.5是Apache Lucene项目的一个重要版本,它是一个高性能、全文本搜索库,为开发者提供了强大的文本搜索功能。作为开源软件,Lucene的源码对学习和理解搜索引擎技术具有极高的价值。下面我们将详细探讨Lucene ...

    lucene3.5中文分词案例

    《Lucene 3.5中文分词案例解析》 Lucene是一个开源的全文搜索引擎库,广泛应用于各种信息检索系统中。在3.5版本中,Lucene已经支持了中文分词,这对于处理中文文档和搜索需求显得尤为重要。本文将深入探讨Lucene ...

    lucene 3.5学习笔记

    Lucene 3.5是该系列的一个稳定版本,具有较高的性能和灵活性。 二、Lucene 3.5主要特性 1. **索引结构**:Lucene采用倒排索引,将文档中的词汇与包含这些词汇的文档进行关联,极大地提高了搜索速度。 2. **分词器...

    lucene3.5的API

    总结来说,Lucene 3.5 提供了一整套完整的文本检索工具,包括索引、查询、过滤和排序等功能。开发者可以通过 API 快速构建自己的全文搜索引擎,尽管英文文档可能会对初学者造成一定的困扰,但是通过深入学习和实践,...

    Lucene 3.5&API,最新版

    ### 三、Lucene 3.5 的优化与扩展 1. **内存优化**:3.5 版本支持 RAMDirectory,允许在内存中构建索引,提高速度但消耗更多内存。 2. **多线程支持**:IndexWriter 支持多线程并发写入,提高了索引构建效率。 3....

    关于lucene3.5的使用

    在“关于lucene3.5的使用”这个主题中,我们将深入探讨Lucene 3.5的关键特性、核心组件以及如何通过实例进行应用。首先,我们需要了解以下几个核心概念: 1. **索引(Index)**:Lucene 的工作基于索引,就像书籍的...

    lucene3.5学习笔记

    以上是对 Lucene 3.5 的学习笔记总结,涵盖了从索引构建到查询操作的基础和高级功能。通过深入理解这些概念和实践应用,可以帮助开发者更好地利用 Lucene 和 Solr 构建高效且功能强大的搜索应用。

    Lucene3.5视频教程(内含分享链接)

    Lucene3.5视频教程(内含分享链接) 一共50集, 包含各部分讲解及源码

Global site tag (gtag.js) - Google Analytics