何时使用Haystack / ElasticSearch与Django的ORM

时间:2013-06-06 12:05:17

标签: django elasticsearch django-haystack django-orm

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

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

如果我们看一下这个答案Django: Haystack or ORM,我们都同意让数据库检索和写入数据。但是,我们可以说,一旦搜索引擎更新,Haystack / ElasticSearch的检索速度会更快吗?

我有点困惑的是,如果它更快,我们是否应该查询Haystack?!

1 个答案:

答案 0 :(得分:6)

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

除了the other帖子中提到的要点之外,还需要考虑一些要点:

  • 在处理全文搜索时,像Elasticsearch这样的搜索引擎是高度优化的(当使用SQL做某事时,它在很大程度上取决于您使用的数据库/引擎)

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

  • ES在某种程度上很容易扩展,而扩展SQL数据库可能会更复杂。

  • 这很可能是一个很大程度上取决于您的用例,要处理的数据量以及您打算运行的查询的决定。所以当然最好的是 - 一如既往 - 自己做一些基准测试并比较这两个解决方案。但是不要做任何过早的优化,因为ORM的一大优势就是保持简单 - 您不必太在意数据的完整性并维护其他系统。