elasticsearch,Search,elasticsearch" /> elasticsearch,Search,elasticsearch" />

Search 弹性搜索中使用长度为100个字符的字符串作为_Id列对性能的影响

Search 弹性搜索中使用长度为100个字符的字符串作为_Id列对性能的影响,search,elasticsearch,Search,elasticsearch,我计划在elastic search中存储事件。它在任何时候都可能有大约1亿个事件。为了消除重复事件,我计划通过连接以下字段来创建长度为100个字符的_id列 实体id-UUID(37个字符)+ 事件创建时间(30个字符)+ 事件类型(30个字符) 此存储将具有正常读取和写入以及聚合查询(无更新/删除) 请告诉我使用如此长的字符串id列而不是默认id是否会对性能产生任何影响或其他副作用 谢谢, Harish默认情况下,该字段未编制索引且未存储,因此在存储方面没有性能问题 由于您将索引数百万个文档

我计划在elastic search中存储事件。它在任何时候都可能有大约1亿个事件。为了消除重复事件,我计划通过连接以下字段来创建长度为100个字符的_id列 实体id-UUID(37个字符)+ 事件创建时间(30个字符)+ 事件类型(30个字符)

此存储将具有正常读取和写入以及聚合查询(无更新/删除) 请告诉我使用如此长的字符串id列而不是默认id是否会对性能产生任何影响或其他副作用

谢谢, Harish

默认情况下,该字段未编制索引未存储,因此在存储方面没有性能问题

由于您将索引数百万个文档,因此您将面临的唯一主要性能问题是while
批量索引
。您必须确保您的
\u id
有一个
顺序模式。从

  • 如果您没有每个文档的自然ID,请使用Elasticsearch的自动ID功能。它经过优化以避免 版本查找,因为自动生成的ID是唯一的
  • 如果您正在使用自己的ID,请尝试选择一个可用的ID。示例包括零填充顺序ID、UUID-1、, 和纳米时间;这些ID具有一致的、连续的模式 压缩良好。相反,像UUID-4这样的ID本质上是 random,提供较差的压缩并降低Lucene的速度
在那篇博客中,长期担任Lucene委员的Michael McCandless比较了不同的
\u id
生成方式,在我看来,这是我读过的最好的文章之一


希望这有帮助

我不需要索引_id列,因为我永远不会直接查询它。然而,如果我正确理解上述建议,即确保序列模式是一般最佳实践,并且我的建议混合这些指数完全打破了这一点,因为它们是随机生成的。所以,即使我不使用批量索引,我也不应该按照我在帖子中说的去做,对吗?请澄清。是的,如果它不是应用程序关键的东西,那么最好让ES处理_idgenerationOK。但识别重复事件是我的系统的主要要求,到目前为止,我发现这是在ElasticSearch中实现这一点的唯一方法。你能建议是否有更好的方法来达到同样的效果吗?哦,如果是这样的话,你的方法是正确的。我在自己的应用程序中进行一些哈希运算。另外,根据我们的观点,没有限制。博客上不是说如果我们不选择一些对Lucene友好的东西,那么阅读速度会很慢,但不会写作吗?我试图理解,如果我为每个文档选择say random hash,那么批量写入的速度会有多慢?