我刚刚阅读有关弹性搜索的内容,发现它会对文档中的每个术语以及所有字段编制索引。虽然它有一些缺点,例如它不能提供事务等。但是对于应用程序,我只需要从DB读取数据而没有写入,使用Dynamo Db而不是Elastic Search是否有任何优势。早些时候,我正在考虑使用Dynamo Db,但现在看到它为每个字段编制索引后,为什么不使用Elastic Search本身。到目前为止,为我的项目定义的唯一用例是按id搜索。但是在将来会有更多的用例,那么在Dynamo Db中添加更多索引会非常困难,但在弹性搜索中已经存在。
有人能告诉我Dynamo Db对弹性搜索的一些优点。
请提出您的建议。
答案 0 :(得分:12)
我使用了elasticsearch和MongoDB但没有使用Dynamodb。 MongoDB在索引和强一致性方面非常有效。
我对elasticsearch和DynamoDB的了解很少;
<强> elasticsearch 强> 是一个搜索引擎,您可以在其中搜索任何条款,或根据特定条件汇总记录,但它也可以作为文档存储,但不是主要目的。对于更少的写入和更多的读取来说绝对是好的。
一些弹性研究优势
每个文档的最大尺寸it allows is 2G - &gt; 2G at lucene level
您可以拥有分区(名为Shards),以便默认情况下根据_id
字段分发您的文档
支持使用versioning on each document进行原子写入。
仅支持文档级别Atomicity
您可以根据标准聚合文档 - 基于JSON的查询
弹性搜索缺点
在多个文档之间没有原子性(ACID中的A)
您可能想检查安全选项,上次我使用它可能是版本3,没有很好的选择
Dynamodb 是一个数据存储区(技术上称为文档存储/亚马逊的MongoDB版本)。
<强>优点强>
完全由AWS管理,因为您不必担心服务器停机或等等。
由亚马逊IAM角色担保
您可以使用分区(称为Shards)根据每个文档的主键分发您的文档
支持multi item/document level Atomicity(ACID中的A)
支持原子写入 - https://github.com/awslabs/dynamodb-transactions 引用当前transactionId
supports Eventually Consistent and Strongly Consistent Reads:
将文档写入DynamoDB表并接收HTTP 200时 响应,文档的所有副本都会更新。该文件将 最终在所有存储位置保持一致,通常在内部 一秒或更短。
当您请求强一致性读取时,DynamoDB会返回一个 响应最新数据,反映来自的更新 所有先前的写操作都是成功的。非常一致 如果出现网络延迟或中断,可能无法读取。
但有一些限制,
每个表仅支持1KB大小的文档/秒的最大40K写入=对于100K大小的文档/秒(在美国东部地区),这将是400次写入
仅支持1KB大小的docs /其他区域中每个表的10K写入
每张桌子最大40K读取4KB大小的文件/秒(在美国东部地区)
仅支持其他地区每个表4KB大小文档的10K读取
因此,请根据平均文档大小计算吞吐量,并参阅
dynamodb中的最大文档/项目大小为400KB(如果文档大小超过400KB,则可以引用s3,但仍然取决于您是否真的想要使用该路径)/ MongoDB可能是替代{ {3}}
您只能在一次请求中从DynamoDB获取1000 KB
个文档
所以,基本上,
我还会考虑调查MongoDB与DynamoDB,因为MongoDB是开源的,具有除原子性A以外的所有功能,并且也是which allows upto 16M of document。