【问题标题】:Elastic search vs Dynamodb for Filtering用于过滤的弹性搜索与 Dynamodb
【发布时间】:2020-04-13 07:05:44
【问题描述】:

我正在构建一个包含数百万行数据的服务。我们想对它进行很好的搜索。例如。我们可以通过一些字段值进行搜索。该行的结构如下:

{
   "field1" : "value1",
   "field2" : "value2",
   "field3" : {
       "field4": "value4",
       "field5": "value5"
   }
}

此外,field3 的结构有时会随着 field4 的出现而改变,有时则不会。

我们希望对以下字段 field1、field2 和 field 4 进行过滤。我们可以在 dynamodb 中创建索引来实现这一点。但我不确定我们是否可以轻松地在 dynamodb 中的 field4 上创建索引,而不会使 json 变平。

现在,我的问题是,我们是否应该使用弹性搜索数据存储,据我所知,它将在文档中的每个字段上创建索引,然后可以搜索每个字段?那正确吗?或者我们应该使用 dynamodb 还是完全使用任何其他数据存储?

请提供一些建议。

【问题讨论】:

  • 您不能在 field4 上建立索引:“索引键属性可以由基表中的任何顶级字符串、数字或二进制属性组成。”当然,如果需要,您可以在顶层复制 field4 并维护它。

标签: amazon-web-services elasticsearch amazon-dynamodb


【解决方案1】:

如果搜索是您的应用程序的关键要求,那么请使用搜索产品 - 而不是数据库。 Dynamodb 非常适合做很多事情,但即席搜索不是其中之一——如果你使用 dynamodb,你最终会运行大量非常昂贵(缓慢)的扫描;这就是 ES 的目的。

【讨论】:

  • 同意。但同时,估算持久性 ES 集群的成本,以便了解成本,并查看 UltraWarm。
  • 您可以将索引移动到 S3(每天)并节省成本。
【解决方案2】:

我拥有良好的 dynamoDB 工作经验和丰富的 Elasticsearch(ES) 工作经验。

我们先来了解一下这两者的关键区别:

dynamoDB

Amazon DynamoDB 是一个键值对和文档数据库

Elasticsearch

Elasticsearch 是一种分布式的开源搜索和分析工具 适用于所有类型数据的引擎,包括文本、数字、 地理空间、结构化和非结构化数据。

现在提出问题,让我们讨论一下这些系统如何在内部工作以及它如何影响性能。

DynamoDB 非常适合根据键获取文档,但不适用于过滤和搜索,例如 关系数据库 可以提高您在列,以类似的方式,您必须在 dynamoDB 中创建索引作为其数据库,而不是搜索引擎。动态创建字段索引很痛苦,而且它没有缓存在 DynamoDB 中。

Elasticsearch 通过为所有索引字段创建倒排索引(默认由 OP 提到)以不同方式存储数据,如果您使用与此处相同的用例的过滤器上下文,则对这些字段进行过滤非常快,示例的更多信息是在官方 ES 文档https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html#filter-context 中进行了解释,此外,由于这些过滤器不用于分数计算并缓存在 elasticsearch 中,因此与 dynamoDB 相比,它们的性能(读取和写入)非常快,您可以进行基准测试那也是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2012-11-07
    相关资源
    最近更新 更多