迪纳摩Db与弹性搜索

我刚刚阅读了关于弹性搜索的内容,发现它对文档中的每个术语以及所有字段进行索引。 虽然它有一些缺点,例如无法提供事务处理等。但对于只需从DB读取数据并且没有写入的应用程序,使用Dynamo Db而不是Elastic Search有什么优势。 早些时候,我想使用Dynamo Db,但现在看到它为每个字段编制索引之后,为什么不使用Elastic Search本身。 到目前为止,为我的项目定义的唯一用例是通过一个id进行搜索。 但是将来会出现更多用例,那么在Dynamo Db中添加更多索引将非常困难,但在Elastic Search中已经存在。

有人能告诉我Dynamo Db对Elastic Search的一些优势吗?

请给出你的建议。


我已经使用elasticsearch和MongoDB,但没有太多的Dynamodb。 MongoDB在索引和强一致性方面效果很好。

我对弹性搜索和DynamoDB知之甚少;

elasticsearch是一个搜索引擎,您可以通过任何条件进行搜索,或者根据特定标准汇总记录,但它也可以作为文档存储,但不是主要目的。 对于更少的写入和更多的读取来说绝对是好事

一些elasticsearch的优点

  • 它允许的每个文档的最大大小在lucene级别为2G - > 2G

  • 您可以让分区(称为Shards)默认分配基于_id字段的文档

  • 支持强大的一致性 - 可配置

  • 支持在每个文档上使用版本控制的原子写入。

  • 仅支持文档级原子性

  • 您可以根据标准聚合文档 - 基于JSON的查询

  • elasticsearch的缺点

  • 在多个文档之间没有原子性(A在ACID中)

  • 你可能想检查安全选项,上次我使用它可能是版本3,没有很好的选择

  • 另一方面, Dynamodb是一个数据存储(技术上称为文档存储/ Amazon的MongoDB版本)。

    优点

  • 完全由AWS管理,因为您不必担心服务器故障等。

  • 由Amazon IAM角色保护

  • 您可以使用分区(称为碎片)根据每个文档上的主键来分发文档

  • 支持多项/文档级原子性(A中的A)

  • 支持原子写入 - https://github.com/awslabs/dynamodb-transactions锁定每个文档的属性,它指向当前的transactionId

  • 支持最终一致性和一致性强读取:

  • 将文档写入DynamoDB表并收到HTTP 200响应时,会更新文档的所有副本。 该文件最终将在所有存储位置保持一致,通常在一秒钟或更短时间内。

    当您请求强一致性读取时,DynamoDB会返回包含最新数据的响应,反映所有之前成功执行的写入操作的更新。 在网络延迟或中断的情况下,可能无法获得高度一致的读取。

    但是有一些限制

  • 仅支持1KB大小的文档/每个表格的最大40K写入数=对于100K大小的文档数/秒(在美国东部地区)

    在其他地区只支持10K写入1KB大小的文档/每张表

  • 最大40K读取每张4KB大小的文件/秒(在美国东部地区)

    在其他地区只支持4K大小文档/表格的10K读取

    因此请根据您的平均文档大小计算吞吐量,并参阅DynamoDB

  • dynamodb中的最大文档/项目大小为400KB(如果文档大小超过400KB,参考s3可能会诀窍,但仍取决于您是否真的想要走这条路线)/ MongoDB可能是替代方案,允许高达16M的文档。

  • 您只能在一个请求中从DynamoDB中获取1000 KB的文档

  • 所以,基本上,

  • 预期吞吐量,
  • 符合ACID(DynamoDB + 1),
  • 每个文件的大小(elasticsearch +1,MongoDB +1)和
  • 安全性可能是决定性因素。
  • 我还会考虑研究MongoDB与DynamoDB,因为MongoDB是开源的,在Atomicity中具有除A以外的所有功能,并且也受AWS支持。

    链接地址: http://www.djcxy.com/p/60141.html

    上一篇: Dynamo Db vs Elastic Search

    下一篇: Elastic Search performing slowly