【问题标题】:How does ElasticSearch handle an index with 230m entries?ElasticSearch 如何处理包含 230m 条目的索引?
【发布时间】:2019-12-18 03:02:51
【问题描述】:

我正在查看 elasticsearch 并注意到您可以创建索引并批量添加项目。我目前有一系列包含 2.2 亿条目的平面文件。我正在使用 Logstash 来解析它们并将它们添加到 ElasticSearch,但我觉得它存在于 1 个索引下会很难查询。行数据最多也就1-3个属性。

Elasticsearch 在这种情况下如何运作?为了有效地查询此索引,您是否只需向集群中添加额外的实例,它们将一起工作来处理集合?

我一直在浏览文档,它解释了要做什么,但不一定总是解释它为什么要这样做。

【问题讨论】:

    标签: elasticsearch logstash elastic-stack elk


    【解决方案1】:

    为了有效地查询该索引,您是否只需向集群中添加额外的实例,它们将一起工作以处理集合?

    这正是您需要做的。通常这是一个迭代过程:

    1. 首先放入一部分数据。如果时间和成本允许,您也可以放入所有数据。
    2. 对其施加一些尽可能接近生产条件的搜索负载,例如通过打开您计划使用的任何搜索集成。如果您打算只手动发出查询,那么现在是时候尝试它们并评估它们的速度和结果的相关性了。
    3. 查看查询是否特别慢以及它们的结果是否足够相关。您更改您正在使用的索引映射或查询以获得更快的结果,并确实向您的集群添加更多节点。

    既然您提到了 Logstash,有几件事可能会有所帮助:

    • 查看Filebeat 以持续为数据编制索引。您可能不需要自己完成读取文件和批量索引的工作。
    • 如果它是日志或类似日志的数据,并且您最感兴趣的是最近的结果,那么按日期和时间拆分数据可能会快得多(例如 index-2019-08-11、index-2019 -08-12,索引-2019-08-13)。请参阅 Index Lifecycle Management 功能自动执行此操作。
    • 尝试在映射中的适当位置使用Keyword field type。它会停止对该字段的分析,从而阻止您在该字段内进行全文搜索,并且只允许精确的字符串匹配。对于诸如“标签”字段或具有类似 [“draft”、“review”、“published”] 值的“状态”字段之类的字段很有用。

    祝你好运!

    【讨论】:

    • 需要注意的一点是,虽然您没有很多字段,但有很多不同的可能值(即高基数)和许多分片也会影响您的集群在内存方面的行为作为一般查询性能,在集群规模较大的情况下您可能需要考虑(由于字段数量较少,不确定是否属于这种情况)
    • 我的数据本身是静态的。我试图找到一种更简单的方法来查询它。我只需要确定将其通过管道传输到 elasticsearch 的正确方法。
    • 你的数据是什么@Fallenreaper ? Logstash 非常适合用于类日志数据,但如果您没有使用过它,那么学习和部署一次性静态数据可能需要做很多工作。在这种情况下,使用自定义脚本批量上传,例如总体而言,Python 可能更快。
    • @EmanuilTolev 我正在查看的数据是巨大的、130k 的平面文件和一些 csv。我不介意使用python,但看起来如果我给它一个.txt文件的递归目录,它会做同样的事情。我现在遇到的问题是 ElasticSearch DB 在我的 vm 中,12 小时后硬盘空间将用完。所以我不确定增加 HDD 大小或尝试让 elasticsearch db 指向我的主机共享文件夹 /media/sf_shared/ 作为 ES 数据存储库的位置是否更好。
    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多