ElasticSearch作为主要数据存储区与写丢失,数据可用性等因素的可靠性如何

时间:2015-04-24 07:32:22

标签: elasticsearch full-text-search search-engine nosql

我正在开发一个项目,需要提供一个通用仪表板,用户可以在不同的领域进行不同类型的分组,过滤和深入分析。为此,我们正在寻找一个允许切片和数据切片的搜索商店。

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

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

  • 每年约有3亿条记录,1-2 KB。
  • 假设存储1年的数据,我们现在有300 GB,但由于数据增长,用例可以达到400-500 GB。
  • 截至目前尚不确定,我们将如何推送数据,但粗略地说,它每5分钟可以达到2-3百万条记录。
  • 搜索请求很少,但需要复杂的查询,可以搜索最近6周到6个月的数据。
  • 文档将在文档中的几乎所有字段中编制索引。

有些博客称其可靠性足以用作主要数据存储 -

有些博客称ES没有什么限制 -

有没有人使用Elastic Search作为数据的唯一真相而没有像PostgreSQL,DynamoDB或RDS这样的主存储?我已经查明ES存在某些问题,例如分裂大脑和索引损坏,其中可能存在数据丢失问题。所以,我想知道是否有人使用过ES并且遇到了数据方面的麻烦

感谢。

2 个答案:

答案 0 :(得分:32)

简短回答:这取决于您的使用案例,但您可能不希望将其用作主要商店。

更长的答案:您应该真正了解弹性和数据丢失可能出现的所有问题。 Elastic有一些great documentation of these issues,在将它用作主数据存储之前,您应该真正了解它。此外,Aphyr's post on the topic是一个很好的资源。

如果您了解自己所承担的风险,并且您认为这些风险是可以接受的(例如因为您的申请不会导致小数据丢失),那么您应该随意尝试。

答案 1 :(得分:6)

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

这取决于您在冗余和灵活性/性能之间如何平衡的需求和要求。如果涉及到大量数据,您可以静态存储原始数据,并通过ES索引其中的某些部分。

Amazon Lambda提供了很多功能:

  

许多开发人员在使用Amazon DynamoDB时在Amazon S3中存储对象   存储和索引对象元数据并启用高速搜索。   通过运行a,AWS Lambda可以轻松地保持所有内容的同步   用于自动更新Amazon DynamoDB中的索引   从Amazon S3添加或更新时间对象。