elasticsearch,django-haystack,django-orm,Django,elasticsearch,Django Haystack,Django Orm" /> elasticsearch,django-haystack,django-orm,Django,elasticsearch,Django Haystack,Django Orm" />

何时使用Haystack/ElasticSearch vs Django';s ORM

何时使用Haystack/ElasticSearch vs Django';s ORM,django,elasticsearch,django-haystack,django-orm,Django,elasticsearch,Django Haystack,Django Orm,因此,我在一周前的测试版应用程序中使用ElasticSearch实现了Haystack。我可以注意到的一点是,通过Haystack,然后是Django的ORM,将一些数据(大量)返回给我们的用户(例如列出应用程序中的所有用户)要快得多。现在,我将发布一个REST服务(使用TastyPie),在未来几周内为可能的平板电脑提供服务,因为我希望能够访问iPad、Nexus平板电脑等的信息 我想知道的一件事是,什么时候应该查询ORM vs Haystack/ElasticSearch?例如,如果平板电脑

因此,我在一周前的测试版应用程序中使用ElasticSearch实现了Haystack。我可以注意到的一点是,通过Haystack,然后是Django的ORM,将一些数据(大量)返回给我们的用户(例如列出应用程序中的所有用户)要快得多。现在,我将发布一个REST服务(使用TastyPie),在未来几周内为可能的平板电脑提供服务,因为我希望能够访问iPad、Nexus平板电脑等的信息

我想知道的一件事是,什么时候应该查询ORM vs Haystack/ElasticSearch?例如,如果平板电脑上的用户正在请求一组特定的用户,我们应该让TastyPie查询ORM,还是转到ElasticSearch

如果我们看看这个答案,我们都会同意DB是用来检索和写入数据的。然而,我们是否可以说,一旦搜索引擎更新,Haystack/ElasticSearch的检索速度会更快


我有点困惑,什么时候我们应该而不是去查询Haystack,如果它快多了

为了清楚起见,我想你说的是通过Haystack查询Elasticsearch,而不是稍后使用数据库中的数据为搜索结果实例化任何对象

除了帖子中提到的点:

之外还有一些要考虑的问题。
  • 像Elasticsearch这样的搜索引擎在处理全文搜索时是高度优化的(当使用SQL执行某些操作时,它在很大程度上取决于您使用的数据库/引擎)

  • 涉及大量关系/联接的查询最像是使用ORM更容易处理,但另一方面,当使用ES时,您可以以非规范化的方式保存外键关系中的数据,这可以提高性能。当然,您也可以对数据库表进行非规范化,但这通常被认为是一种不好的做法,只要您知道自己在做什么,例如在解决性能瓶颈时

  • ES在某种程度上很容易扩展,而扩展SQL DB可能更复杂

  • 这很可能是一个很大程度上取决于您的用例、要处理的数据量和您打算运行的查询的决定。因此,最好的事情当然是——一如既往——自己做一些基准测试,并比较这两种解决方案。但是不要做任何过早的优化,因为ORM的一大优势是让事情变得简单——你不必太在意数据的完整性,也不必维护额外的系统