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