zoukankan      html  css  js  c++  java
  • 使用ByteRef加速String类型DocValues的载入

    眼下商户索引DocValues很大,warmup时花费70-80秒(在beta环境),有62秒在载入DocValues,发现当中有54秒时间在载入string docvalues,string docvalues涉及的总数达到138M,平均一个字符串13字节,但假设仅仅是读,仅仅要花费大约2秒时间(之前已经通过cat增加page cache),为什么花这么多时间?大部分时间花在String(bytearray,off,len,charset)上(假设仅仅是一个StringBuilder生成的字符串最多也仅仅须要10秒,因此就是这个原因),排除了byte array拷贝的问题(我消除为一次io,没有发现性能提升),我原来以为是jdk那个bug导致的。但是经測试并不是如此,刚好在网上看到Thrift中也提到String Constructor编解码慢的bugzilla,当中交的Utf8Helper说是參考lucene UnicodeUtil写的,于是果断换成BytesRef.utf8ToString,速度果然快了一些。String docvalues如今载入大约须要37秒 , 尽管不算大幅。但也不错哈哈。

    眼下看到大部分时间是花在byte array转string,就是decode慢。假设docvalues仅仅使用byteref就能够降低到大约两秒, 但bytesref虽有compare接口。却没有indexOf等经常使用字符串接口,并且返回的须要交给业务层,恐怕短时间内并不好换。但假设能够换,绝对飙了!

    另外结合intern是个不错的思路,假设反复的字符串较多,能够以bytesref做哈希进行查找,这样对于反复的字符串就能够不用做转码操作。很好的思路!

    第二种简单做法是直接用utf16保存,可是编码是否紧凑,是否占用非常多硬盘也须要考虑。

  • 相关阅读:
    Oracle Merge into
    查询 null 记录
    删除 eclipse 插件
    vs 密钥
    视频网站建设
    eclipse 版本 查看
    让数据库变快的十个建议
    c# WebBrowser 操作
    svn 代码合并
    Android开发者应该深入学习的10个开源应用项目
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7399157.html
Copyright © 2011-2022 走看看