`
faiinlove
  • 浏览: 57755 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Tokyocabinet+Lucene搜索框架

    博客分类:
  • Java
阅读更多

这篇文章来自同事的博客,一篇很好的博客,大家没有注意就沉了,趁这次公司新平台开发的机会,被我发现了。重新贴上来,给大家一个惊喜。更多精彩请访问原文地址:

 

原文地址:http://kernaling-wong.iteye.com/blog/477163

原文标题:tokyocabinet与lucene在搜索上的应用

 

开场白: 一个多月没有写博客了,今天就写点这一个月工作情况吧.新的公司搜索框架最后却不能成功上线运行这点令我很遗憾,结果还是使用旧有的.
背景:
   现在公司一直使用的搜索框架由于内存的使用上及搜索速度和索引的切换方面有比较大的缺憾,首先这里简单说一下以前的搜索框架吧,采取双索引机制,一搜索,一存储。缺点显然而见
   1  内存使用方面,明显多加载多一份索引,有相当一部分内存浪费了
   2  合并或切换索引时,明显多合并或者切换索引的时间与CPU占用率了
   3  所有结果缓存均在用内存保证.内存用量明显加大.

   而我当时想设计的思想是,采用单索引机制,索引仅仅用来搜索,采用Tokyocabinet作为索引内容的保存索引.同时使用Tokyocabinet可 以作为其实搜索结果的缓存,目的在于尽量减少对内存的依赖.但经过好几次实验发现tokyocabinet在长时间,高并发及多线程下速度未能令人满意, 特别在硬盘有其他程序不停读写时效率更低下,有时取出一个document对象居然用了20ms所以决定取消这个机制,改用从lucene的索引中直接取 出document,即以前的搜索索引现在增加了保存内容的功能了.索引大小也由以前索引的1G左右猛增到现在的2.7G左右(250W个 Document)[如图]



大家看完这一个图以后,都应该知道整一个搜索框架的性能瓶颈在哪里.同时我也总结一点这一个特点吧

1  搜索出来的结果存入缓存并不是一个阻塞的过程,而是把搜索结果交给其他线程去做,提高搜索反应速度
2  加载及合并与切换索引的时候比以前快约30%,内存使用满负载运行1天1夜,内存不超过2G
3  搜索结果及搜索缓存队列中增加了java.util.concurrent包下的应用,特别在多线程下效果表现不错,CPU占用率比以前低

缺点:
1  最大的缺憾就是搜索索引体积过大令大高负载的时候令返回结果集的时的速度变慢,在低并发量的时候,返回结果一直都没有问题,只是搜索满负载的时候才会出现,这也是我设计时失误了.
2  硬盘的频繁读写,正所谓省了内存害了硬盘.之前测试跑了几天后发现把公司内部服务器的一个硬盘给搞夸了,不知道是不是tokyocabinet的造成的,这个我也不太肯定.反正硬盘读写的灯闪得很厉害.

后记:
   最终,新的搜索框架因为在高负载的表现未如理想所以公司决定不启用这个新的搜索框架,辛苦这一个多月来的工作在这里画上一个句号,不过还是能学到很多东西,起码对tokyocabinet这个怪兽级的东西反而更充满信心.下面就给一此图看看这一个月内工作成果吧.
公司网站
http://www.jobui.com   是一个职位搜索引擎
http://www.baicai.com 是一个人才网站,提供了职位搜索,简历搜索,公司信息搜索等功能
不过很是很感谢我的同事与我的技术总监,他们为我提供了很多帮助.

搜索框架已经在普通负载下的测试结果

第一次 搜索"公司"


第二次 搜索"公司",因为使用了tokyocabinet的作为结果缓存


再来第一次 搜索"经理"


第二次 搜索"经理"



欢迎大家提出宝贵的意见,
欢迎转载  请注明出处 kernaling.wong  http://kernaling-wong.iteye.com/blog/477163

分享到:
评论
4 楼 faiinlove 2009-11-05  
fanfq 写道
我们公司也在做一个垂直搜索,我们用的是三方的api主要在android手机上应用,性能很不错,但是一些个性化的搜索及其他功能很繁琐。

针对个性化和特殊应用,应该使用策略模式,对不同的应用,加载不同的策略!
3 楼 fanfq 2009-11-04  
我们公司也在做一个垂直搜索,我们用的是三方的api主要在android手机上应用,性能很不错,但是一些个性化的搜索及其他功能很繁琐。
2 楼 caoyangx 2009-11-04  
希望有相关文档就可以了。
1 楼 faiinlove 2009-11-04  
有没有demo啊?

相关推荐

    再说tokyocabinet 及其扩展

    标题“再说tokyocabinet 及其扩展”指的是对Tokyo Cabinet这一开源数据库系统的深入讨论,以及可能涉及的对其功能的增强或优化。Tokyo Cabinet是一款高效、轻量级的键值存储系统,广泛用于数据缓存和日志记录等场景...

    tokyocabinet-1.4.30.tar

    Tokyocabinet是一款高效、轻量级且功能丰富的键值对数据库系统,广泛应用于日志存储、缓存服务以及各种数据持久化场景。其1.4.30版本的发布,意味着开发者们可以获取到最新的优化和改进。下面将详细探讨Tokyocabinet...

    tokyocabinet

    东京暴君数据库的客户端封装,使东京暴君可以通过网络连接

    tokyocabinet-1.4.48.tar.gz

    标题中的"tokyocabinet-1.4.48.tar.gz"表示的是Tokyo Cabinet的1.4.48版本的源码压缩包,它采用tar.gz格式进行打包,这是一种在Linux和类Unix系统中常见的文件归档和压缩方式。 Tokyo Cabinet提供了两种主要的数据...

    tokyocabinet-1.4.47.tar.gz

    下载tokyocabinet-1.4.47.tar.gz后,解压并编译源码,通常包括configure、make和make install步骤。安装完成后,可以通过提供的示例代码了解如何使用Tokyo Cabinet的API进行数据库操作。 10. 社区支持与维护: ...

    tokyocabinet-1.4.45.tar.gz

    这个名为"tokyocabinet-1.4.45.tar.gz"的压缩包文件包含的是Tokyo Cabinet的1.4.45版本源代码。在本文中,我们将深入探讨Tokyo Cabinet的主要特性和它在IT领域的应用。 Tokyo Cabinet的核心特点: 1. **键值对存储...

    tokyotyrant/tokyocabinet/gpac

    标题 "tokyotyrant/tokyocabinet/gpac" 提及了三个关键组件:TokyoTyrant、TokyoCabinet 和 GPAC。这三者都是在IT领域中有着特定用途的工具,尤其是在数据存储和多媒体处理方面。下面将详细阐述这三个组件的知识点。...

    tokyocabinet安装配置总结(Ubuntu)

    Tokyocabinet是一款高效、轻量级的键值存储数据库,广泛应用于日志记录、缓存服务、数据索引等领域。Tokyocabinet提供多种数据结构,包括哈希表、B+树和直方图,支持多种数据类型,并且具有高度的可移植性和良好的...

    tokyocabinet源码分析

    ### Tokyocabinet源码分析 #### 概述 Tokyocabinet是一个高效且轻量级的数据库管理系统(DBM),其主要特色在于提供了一系列灵活的数据存储方式,支持多种不同的数据库类型,包括基于哈希表、固定长度数组以及B+树等...

    20091016通过spymemcached调用tokyocabinet网络接口的性能测试

    标题 "20091016通过spymemcached调用tokyocabinet网络接口的性能测试" 暗示了这篇文档可能涉及到的是一个关于优化数据存储和检索性能的技术测试。在这个测试中,作者可能使用了 `spymemcached` 这个Java库来与Tokyo ...

    tokyocabinet.cr:TokyoCabinet的Crystal客户端

    TokyoCabinet是一款高效、轻量级的数据库系统,它主要用C语言编写,提供了多种接口,包括C、C++、Perl、Python等。而`tokyocabinet.cr`是针对TokyoCabinet的一个Crystal语言客户端,使得在Crystal编程语言环境中可以...

    tokyocabinet中HDB和BDB引擎的存储速度比较

    标题中的“tokyocabinet”是一个轻量级的键值对数据库系统,它提供了两种不同的存储引擎:HDB(Hash Database)和BDB(Btree Database)。这两种引擎各有特点,适用于不同的场景。在进行存储速度的比较时,我们需要...

    tokyocabinet-ruby-1.31.tar.gz_TOKYO_TokyoCabinet

    Tokyo cabinet C 库的 Ruby绑定代码API Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。...

    tokyocabinet.jar

    Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几...tokyocabinet.jar是该数据库的接口API

    httpsqs 安装包(httpsqs-1.7,libevent tokyocabinet)附上安装文档

    本文将详细介绍`httpsqs`,一个基于`libevent`和`tokyocabinet`的消息队列系统,以及其安装过程。 `httpsqs`是一个开源的消息队列服务,它设计的目标是提供高并发、低延迟的HTTP接口,以实现快速的消息发布和消费。...

    Tokyocabinet-Tokyotyrant文档大合集

    Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念。 当做为Hash表数据库使用时,...

    Python库 | pydory-1.1.41-cp38-cp38-macosx_10_9_x86_64.whl

    **Python库pydory详解** Python作为一种强大的编程语言,拥有丰富的第三方库支持,极大地扩展了其功能和应用领域。在给定的资源中,我们关注的是`pydory`库,版本1.1.41,它是一个为Python 3.8编译的 wheel 包,...

    tokyocabinet-perl-1.34.tar.gz_TOKYO

    Tokyo cabinet C库的Perl绑定代码API。 Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。...

    tokyocabinet-java-1.24.tar.gz_TOKYO_Tokyo Cabinet java_tokyocabi

    Tokyo cabinet C 库代码的Java绑定接口。 Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。...

    tokyocabinet-lua-1.10.tar.gz_TOKYO_Tokyo Cabinet

    Tokyo cabinet C 库的Lua绑定接口。 Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。...

Global site tag (gtag.js) - Google Analytics