`
kernaling.wong
  • 浏览: 78995 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

tokyocabinet与lucene在搜索上的应用

    博客分类:
  • java
阅读更多
开场白:一个多月没有写博客了,今天就写点这一个月工作情况吧.新的公司搜索框架最后却不能成功上线运行这点令我很遗憾,结果还是使用旧有的.
背景:
   现在公司一直使用的搜索框架由于内存的使用上及搜索速度和索引的切换方面有比较大的缺憾,首先这里简单说一下以前的搜索框架吧,采取双索引机制,一搜索,一存储。缺点显然而见
   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
2
0
分享到:
评论

相关推荐

    tokyocabinet-1.4.30.tar

    Tokyocabinet的工作原理主要基于文件系统,数据存储在磁盘上,这使得它能处理非常大的数据集。其设计目标是尽可能减少内存消耗,提高I/O效率。Tokyocabinet还支持多线程访问和事务处理,确保了在并发环境下的数据...

    再说tokyocabinet 及其扩展

    6. **应用案例**:展示Tokyo Cabinet在实际项目中的应用场景,如日志管理、缓存服务等。 7. **扩展与优化**:讨论如何通过编程手段或配置调整来优化Tokyo Cabinet,以适应更大规模的数据处理需求。 8. **`test.sh`...

    tokyocabinet-1.4.47.tar.gz

    Tokyo Cabinet在内存管理和I/O操作上做了大量优化,如缓冲机制、预读取策略等,确保在磁盘操作上也能保持高效。此外,Tokyo Cabinet支持多线程并发访问,可以应对高并发场景。 6. API接口: Tokyo Cabinet提供了...

    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.45.tar.gz

    在本文中,我们将深入探讨Tokyo Cabinet的主要特性和它在IT领域的应用。 Tokyo Cabinet的核心特点: 1. **键值对存储**:Tokyo Cabinet使用键值对(key-value pair)的数据模型,允许快速的插入、查询和删除操作。...

    tokyocabinet

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

    tokyocabinet安装配置总结(Ubuntu)

    在Ubuntu操作系统上安装和配置Tokyocabinet,可以分为以下几个步骤: 1. **系统准备**: 在安装Tokyocabinet之前,确保系统已经更新到最新版本,以获取所有必要的依赖项。打开终端并运行以下命令: ``` sudo apt...

    tokyotyrant/tokyocabinet/gpac

    结合“描述”中的信息,“对数据库的使用方式进行了修改,使得开源软件能够支持分布式的访问”,我们可以理解为TokyoTyrant 和 TokyoCabinet 被用作分布式数据库系统的一部分,可能与 GPAC 集成,以提供多媒体内容的...

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

    在这个测试中,作者可能使用了 `spymemcached` 这个Java库来与Tokyo Cabinet这个键值存储系统进行交互。Tokyo Cabinet是一个流行的数据存储系统,适用于快速、大量数据的存取。而 `spymemcached` 是一个基于...

    tokyocabinet源码分析

    综上所述,Tokyocabinet作为一个灵活多变的DBM系统,不仅提供了丰富的数据存储选项,还允许用户通过合理的参数配置来优化性能表现。通过对源码的深入分析,我们可以更好地理解其内部机制,并据此设计出更加高效的...

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

    这些测试结果对于开发者选择合适的数据库引擎非常有价值,可以指导他们在追求速度与保持数据有序性之间做出权衡。 “源码”标签表明这篇文章可能深入解析了tokyocabinet的内部实现,包括HDB和BDB引擎的代码结构和...

    tokyocabinet.cr:TokyoCabinet的Crystal客户端

    6. **并发支持**:TokyoCabinet支持多线程环境,`tokyocabinet.cr`库可能提供了线程安全的API,使得在多线程 Crystal 应用中也能正确地使用TokyoCabinet。 7. **数据备份与恢复**:TokyoCabinet支持数据库的备份和...

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

    在IT行业中,消息队列(Message Queue)是一种重要的软件组件,用于在分布式系统中解耦应用程序,通过异步处理提高系统的可扩展性和稳定性。本文将详细介绍`httpsqs`,一个基于`libevent`和`tokyocabinet`的消息队列...

    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

    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`库,版本1.1.41,它是一个为Python 3.8编译的 wheel 包,适用于macOS 10.9及更高版本...

    Tokyo-Cabinet.tar.gz

    由于哈希表的特性,HDB在插入和查询操作上有着极高的性能,但在数据更新和删除时可能需要进行全表扫描。HDB适用于需要快速访问数据但对数据一致性要求不高的应用。 4. **内存映射技术** Tokyo Cabinet的一大亮点...

    httpsqs安装包和依赖包

    在这个安装包中,包含了HTTPSQS本身以及两个关键的依赖库:TokyoCabinet和Libevent。 1. **HTTPSQS** HTTPSQS 的主要特点在于它的高性能和低资源消耗。它使用非阻塞I/O和多事件机制来处理请求,这使得它在处理大量...

Global site tag (gtag.js) - Google Analytics