performance - 在Elasticsearch中排序

标签 performance sorting elasticsearch

以下是保存在我的索引中的文档的数据模型:{"messageId":1,"commentId":1,"likes":1,"stars":1,"time":time in ms,"category":1,"deleted":false,"userid":1}
每条消息都有多个评论(以我的情况为2000左右)
带有基于messageId的路由的索引文档。
我目前有2亿条大小为31 GB的记录。

  • 分片数量:5
  • 副本数:3
    (商店总大小为180)
  • 节点数:4.每个节点有8GB内存,我正在使用4GB进行Elasticsearch。

  • 我的基本读取操作包括获取按喜欢,星级或时间排序的给定commentIdsmessageId

    搜索查询:curl -XGET localhost:9200/_search?routing=${messageId}&q=messageId:${messageId}&sort=likes:desc&fields=commentId&_source=false
    当我使用1500个线程运行性能测试时,平均时间为6秒,而90%大约为20秒!这是客户端值。响应对象的取值从10ms到15s取决于负载。

    如何提高读取性能?

    最佳答案

    您可能正在达到群集的内存限制。您应该启用Java GC日志记录(例如,使用ES_USE_GC_LOGGING),并查看是否在GC中花费了大量时间。

    听起来您的性能测试正在创建大量同时请求。您可能正在填写thread pools。看一眼:

    $ curl -XGET "http://localhost:9200/_nodes/stats/thread_pool?pretty"
    

    最后,听起来您的分片数量相对较多。 A shard is not free(或see this benchmark)。如果您有index.number_of_replicas: 3,则可以设置index.number_of_shards: 1,但仍然可以获得完整的集群利用率。

    关于performance - 在Elasticsearch中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022735/

    相关文章:

    python - 是否有标准的 Python 数据结构可以使事物保持有序?

    sorting - 如果在范围内,则按不同字段进行条件ElasticSearch排序

    powershell - 配置 Elasticsearch

    java - 在运行 elasticsearch 集群时获取 Perm Gen 空间问题

    python - global 关键字内联全局是否与 python 中的局部变量声明完全相同?

    mysql - 为什么从 MyISAM 转换到 InnoDB 需要很长时间?

    css - CSS Sprite 如何加速网站?

    performance - 使用 Cloudfront 修复 Route 53 CNAME Alias 响应时间缓慢的问题

    javascript - 字典多项选择

    perl - 哈希的自定义排序方法,它将自动使用适当的哈希