ElasticSearch 作为一个主要的数据存储对抗写损失、数据可用性等因素的可靠性如何

我正在做一个项目,需要提出一个通用的仪表板,用户可以在其中进行不同类型的分组、过滤和钻取不同的字段。为此,我们正在寻找一个搜索存储,允许切片和数据切块。

将有多个数据来源,并将其存储在搜索商店。可能需要对源数据进行一些预计算,这些计算可以由中间组件完成。

我浏览了几个博客,了解 ES 是否也可以可靠地用作主数据存储。它主要取决于我们正在寻找的用例。关于用例的一些信息:

  • 每年以1-2KB 的速度创下约3亿个记录。
  • 假设存储1年的数据,我们现在有300GB,但是考虑到数据的增长,用例可以达到400-500GB。
  • 到目前为止,我们还不确定如何推送数据,但大致来说,它可以达到每5分钟约200-300万条记录。
  • 搜索请求很低,但需要复杂的查询,可以搜索数据的最后6周至6个月。
  • 文档中的几乎所有字段都将被编入索引。

一些博客说,它是足够可靠的主要数据存储使用-

一些博客说,ES 有很少的限制-

有没有人在没有 PostgreSQL、 DynamoDB 或 RDS 这样的主存储器的情况下,使用弹性搜索作为数据的唯一真理?我查过 ES 有一些问题,比如大脑分裂和索引损坏,这些问题可能会导致数据丢失。所以,我想知道是否有人使用过 ES 并且在数据方面遇到了麻烦

谢谢。

30136 次浏览

设计冗余数据存储解决方案通常是一个好主意。例如,它可以是一种快速可靠的方法,首先将所有内容作为平面数据推送到像 s3这样的静态存储,然后从那里获得 ES 拉和索引数据。如果您需要利用一些 ORM 来获得更大的灵活性,那么您可以在两者之间建立一个 RDS 或 Redshift 层。这样数据总是可以在 ES 中重建。

这取决于您的需求和要求,您如何在冗余和灵活性/性能之间设置平衡。如果涉及到很多数据,您可以静态地存储原始数据,然后通过 ES 对其中的一些部分进行索引。

Amazon Lambda 提供了一些很棒的功能:

许多开发人员在使用 AmazonDynamoDB 时将对象存储在 AmazonS3中 存储和索引对象元数据,并支持高速搜索。 AWS Lambda 通过运行一个 函数自动更新 AmazonDynamoDB 中的索引 从 AmazonS3添加或更新时间对象。

简短的回答: 它取决于您的用例,但是您可能不希望将它用作主存储。

更详细的答案: 您应该真正理解所有可能出现的关于弹性和数据丢失的问题。Elastic 有一些 这些问题的大量文件,在使用它作为主数据存储之前,您应该真正了解它。此外,Ahyr 关于这个话题的帖子是一个很好的资源。

如果您了解所承担的风险,并且您认为这些风险是可以接受的(例如,因为小数据丢失对您的应用程序来说不是问题) ,那么您应该尽管尝试。

自从2015年这个问题最初被发布以来,很多弹性问题已经被 找到并处理解决了,而且近年来增加了很多特性,特别是稳定性和弹性特性,考虑到 正确的用例并以正确的方式利用正确的特性,这肯定是值得考虑的事情。

因此,到2022年,我对这个问题的回答是——是的,你可以,只要你做得正确,用例正确。