我正在阅读Elasticsearch教程,然后想到了一个问题,
我该如何处理假设Facebook数据模型的非规范化?
我可以将所有facebook数据都放入ElasticSearch中并且不使用任何关系数据库吗?当我的流量与Facebook相同时?
还是我仍然需要数据库,如果是,出于什么原因?
任何帮助将不胜感激。提前致谢。
最佳答案
Elasticsearch自己说,它是一个分布式的静态搜索和分析引擎。因此,当您同时看到搜索和分析信息时,我们可以得出其等同于NoSQL数据库的结论。
您的问题是对的,当我们考虑在项目中使用elasticsearch时,我们也想到了这个问题。我们在企业集成平台上工作,该平台类似于堆栈溢出,在该平台中,公司中的人员会提出问题,发布查询和答案并对其进行适当标记。所有这些都是知识管理计划的一部分。因此,当我们查看Elasticsearch时,我们知道这可以满足我们简化数据库标准化问题的需求。数据的获取变得非常昂贵,需要大量的联接才能获取某人正在寻找的数据。当我们意识到由于我们的数据库结构限制而无法在某些字段上创建索引时,此查询变得非常昂贵。因此,这种最终变得过度标准化的标准化正在扼杀性能。
我们研究了Elasticsearch及其案例研究。使我们充满信心的是堆栈溢出使用了它。因此,这就是我们决定进行试验并尝试的地方。我们将其用作NoSQL存储,以非规范化方式存储数据。
我们具有其属性作为实体本身的实体。有时,这些属性也可以是多值的。我们评估了数据并创建了适当的mapping,我们将所有内容存储在Lucene索引中,并且仅对那些具有not_analyzed属性的字段建立了索引,我们希望在这些字段上应用过滤器,即查询的where子句。由于我们现在支持复杂的查询,因此需要使用terms和range过滤器的多个并发过滤器,它确实提高了获取的性能。通过应用复杂的过滤器(例如SQL查询中的where子句)来实现这种性能对我们来说是一场噩梦。但是Elasticsearch确实节省了时间。
当您拥有与Facebook相同的流量时,我的投票是您可以肯定地选择Elasticsearch,因为它可以很好地扩展。您可以随时添加更多计算机。您可以执行复杂的查询,而又不影响性能,但可以实现良好的吞吐量。
我想说的一个更重要的一点是,elasticsearch不能替代SQL。您不能放弃SQL。您需要它来保留某些数据的ACID属性,例如使用身份验证和访问控制。您可以像我们一样将SQL与elasticsearch混合在一起,然后尝试一些自己的很棒的东西。现在,只有在您分析并查看数据时才能确定如何做以及我应该在Elasticsearch中添加什么。但是我确信的一件事是它不会让您失望。
关于database - 像Facebook这样的数据模型的非规范化方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22055627/