ElasticSearch作为主要数据存储的可靠性如何,可以抵御写入损失,数据可用性等因素

我正在开发一个项目,要求提供一个通用仪表板,用户可以在其中进行不同types的分组,筛选和向下钻取。 为此,我们正在寻找一个允许切片和骰子数据的search商店。

将有多个数据源,并将其存储在search存储中。 源数据可能需要一些预先计算,这可以通过中间组件完成。

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

  • 每年大约有3亿条logging,1-2 KB。
  • 假设存储1年的数据,我们现在有300 GB的数据,但随着数据的增长,用例可能会高达400-500 GB。
  • 截至目前还不确定,我们将如何推动数据,但是大致上,每5分钟可以达到2-3百万条logging。
  • search请求很低,但需要复杂的查询,可以search过去6周到6个月的数据。
  • 文档将在文档中的几乎所有字段中被索引。

有些博客表示,它足够可靠,可以用作主数据存储 –

  • http://chrisberkhout.com/blog/elasticsearch-as-a-primary-data-store/
  • http://highscalability.com/blog/2014/1/6/how-hipchat-stores-and-indexes-billions-of-messages-using-el.html
  • https://karussell.wordpress.com/2011/07/13/jetslide-uses-elasticsearch-as-database/

有些博客说,ES有一些限制 –

  • https://www.found.no/foundation/elasticsearch-as-nosql/
  • https://www.found.no/foundation/crash-elasticsearch/
  • http://www.quora.com/Why-should-I-NOT-use-ElasticSearch-as-my-primary-datastore

有没有人使用Elastic Search作为数据的唯一事实,而没有像PostgreSQL,DynamoDB或RDS这样的主存储? 我曾经看过ES有一些问题,比如分裂的大脑和索引腐败,那里可能会有数据丢失的问题。 所以我想知道是否有人使用过ES,并且遇到过数据上的麻烦

谢谢。

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

较长的回答:您应该真正了解所有可能出现的弹性和数据丢失问题。 弹性有这些问题的一些伟大的文档 ,你应该真正理解之前使用它作为主要的数据存储。 另外Aphyr在这个话题上的post是一个很好的资源。

如果您了解您正在采取的风险,并且您认为这些风险是可接受的(例如,因为小数据丢失对您的应用程序不是问题),那么您应该随时尝试。

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

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

亚马逊Lambda提供了很棒的function:

许多开发人员将对象存储在Amazon S3中,同时使用Amazon DynamoDB存储和索引对象元数据并启用高速search。 AWS Lambda通过运行一个函数,在每次从Amazon S3添加或更新对象时自动更新Amazon DynamoDB中的索引,从而使所有内容保持同步变得非常容易。