热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ElasticSearch多渗透性能

如何解决《ElasticSearch多渗透性能》经验,为你挑选了1个好方法。

我只有一个专用的过滤器索引.
那里有3000疑问.这是一个典型的查询:

 {
    "index": "articles_percolators",
    "type": ".percolator",
    "body": {
        "query": {
            "filtered": {
                "query": {
                    "bool": {
                        "should": [
                            {
                                "query_string": {
                                    "fields": [
                                        "title"
                                    ],
                                    "query": "Cities|urban|urbanization",
                                    "allow_leading_wildcard": false
                                }
                            },
                            {
                                "query_string": {
                                    "fields": [
                                        "content"
                                    ],
                                    "query": "Cities|urban|urbanization",
                                    "allow_leading_wildcard": false
                                }
                            },
                            {
                                "query_string": {
                                    "fields": [
                                        "url"
                                    ],
                                    "query": "Cities|urban|urbanization",
                                    "allow_leading_wildcard": false
                                }
                            }
                        ]
                    }
                },
                "filter": {
                    "bool": {
                        "must": [
                            {
                                "terms": {
                                    "feed_id": [
                                        3215,
                                        3216,
                                        10674,
                                        26041
                                    ]
                                }
                            }
                        ]
                    }
                }
            }
        },
        "sort": {
            "date": {
                "order": "desc"
            }
        },
        "fields": [
            "_id"
        ]
    },
    "id": "562"
}

映射(PHP数组).为简洁起见,不包括过滤器,分析器和标记器:

    'index' => 'articles_percolators',
    'body' => [
        'settings' => [
            'number_of_shards' => 8,
            'number_of_replicas' => 0,
            'refresh_interval' => -1,
            'analysis' => [
                'filter' => [
                ],
                'analyzer' => [
                ],
                'tokenizer'=> [
                ]
            ]
        ],
        'mappings' => [
            'article' => [
                '_source' => ['enabled' => false],
                '_all' => ['enabled' => false],
                '_analyzer' => ['path' => 'lang_analyzer'],
                'properties' => [
                    'lang_analyzer' => [
                        'type' => 'string',
                        'doc_values' => true,
                        'store' => false,
                        'index' => 'no'
                    ],
                    'date' => [
                        'type' => 'date',
                        'doc_values' => true
                    ],
                    'feed_id' => [
                        'type' => 'integer'
                    ],
                    'feed_subscribers' => [
                        'type' => 'integer'
                    ],
                    'feed_canonical' => [
                        'type' => 'boolean'
                    ],
                    'title' => [
                        'type' => 'string',
                        'store' => false,
                    ],
                    'content' => [
                        'type' => 'string',
                        'store' => false,
                    ],
                    'url' => [
                        'type' => 'string',
                        'analyzer' => 'simple',
                        'store' => false
                    ]
                ]
            ]
        ]
    ]

然后,我一次将文档发送到mpercolateAPI 100.这是mpercolate请求的一部分(1个文档):

{
    "percolate": {
        "index": "articles_percolators",
        "type": "article"
    }
},
{
    "doc": {
        "title": "Win a Bench Full of Test Equipment",
        "url": "\/document.asp",
        "content": "Keysight Technologies is giving away a bench full of general-purpose test equipment.",
        "date": 1421194639401,
        "feed_id": 12240778,
        "feed_subscribers": 52631,
        "feed_canonical": 1,
        "lang_analyzer": "en_analyzer"
    }
}

100文章~1 second在我的MacBook Pro 2.4 GHz Intel Core i7(4核,8 HT)上处理,所有核心最大:

ES过滤器利用所有核心

这对我来说似乎相当缓慢,但我没有与之比较的基础.
我有一个常规索引具有相同的映射(但有6个分片),超过30亿个文档(仍然)存在于具有24 coreXeon和128GBRAM 的单个服务器上.此类查询在整个索引中搜索的内容少于100ms(在热服务器上).

我的设置中是否存在明显错误,是否有其他人对过滤器的性能进行了基准测试?我没有在网上找到任何关于此的内容......

我的ES版本1.4.2使用默认配置,工作负载完全受CPU限制.

编辑

因为John Petrone's评论是关于在生产环境中进行测试的,所以我已经在我们在生产中使用的相同的24核Xeon上进行了测试.如果没有更糟糕的话,渗透的8个分片索引的结果是相同的.时间介于1s和1.2s之间,而网络延迟低于我的笔记本电脑.
这可能可以通过Xeon的每个核心的较慢时钟速度来解释 - 2.0GHz2.4Ghzi7相比.

它导致几乎恒定的CPU利用率约为800%:

具有8-shard索引的CPU利用率

然后我用24个分片重新创建索引,每100个文档的时间减少到0.8秒,但CPU时间超过两倍:

具有24-shard索引的CPU利用率

我每秒有大约100个文档的持续流量,将来查询的数量会增加,所以这对我来说有点担心.



1> John Petrone..:

所以要明确一点,你不能将24核Xeon和128GB内存的正常Elasticsearch性能与笔记本电脑上的ES渗透性能进行比较 - 非常不同的硬件和非常不同的软件.

有许多大型索引设置(比如你的30亿个文档),在运行查询时,你往往是磁盘或内存绑定.只要您拥有足够的两者,查询性能就会非常高.

渗透是不同的 - 您实际上索引每个文档,然后针对每个文档运行存储在过滤器中的每个查询,所有这些都在内存中的Lucene索引中:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-percolate.html

渗透水平扩展并且往往是cpu绑定 - 通过添加具有足够cpu的其他节点来扩展它.

通过multi percolate api提交的100份文件针对3000个注册的percolate查询,您基本上运行了300,000个单独的查询.我希望在Macbook上绑定cpu - 我认为你最好在一个更受控制的环境(单独的服务器)中进行基准测试,并且可以通过添加额外的节点进行扩展.

UPDATE

因此,为了更好地了解瓶颈是什么以及如何提高性能,您需要从较少数量的注册查询开始,同时减少文档数量,然后再进行调整.这将使您更清楚地了解幕后发生的事情.

我从单个文档(不是100)开始,注册的查询少得多,然后运行一系列测试,一些提高文档数量,一些提高注册的查询数量,多步骤然后超过100个文档和一次以上3000次查询.

通过查看结果,您可以更好地了解性能如何下降与负载 - 线性与文档数量,与已注册查询的数量呈线性关系.

我将尝试的其他配置变体 - 通过批量percolate api而不是100个文档,尝试多个线程中的单个doc api(以查看它是否是多doc api问题).我还尝试在同一系统上运行多个节点,或者使用许多较小的服务器,以查看是否在多个较小的节点上获得了更好的性能.我还会改变分配给JVM的内存量(更多不一定更好).

最终,您需要一系列数据点来尝试确定查询的缩放方式以及拐点的位置.


推荐阅读
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • Summarize function is doing alignment without timezone ?
    Hi.Imtryingtogetsummarizefrom00:00otfirstdayofthismonthametric, ... [详细]
  • 学习笔记17:Opencv处理调整图片亮度和对比度
    一、理论基础在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式:在图像像素中其中:参数f(x)表示源图像像素。参数g(x)表示输出图像像素。 ... [详细]
  • Flutter App 中创建模块并且依赖 Flutter
    在FlutterApp中打开对应的Android工程;并且向Android原生工程添加一个AndroidModule模块,并且在工程根settings. ... [详细]
  • 【Mysql】九、Mysql高级篇 索引
    MYSQL索引一、什么是索引?二、索引数据结构1、mysql数据库的四种索引2、BTREE结构三、索引分类、创建索引、查看索引1、单值索引2、复合索引3、函数索引4、 ... [详细]
author-avatar
我_纯情至上
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有