【问题标题】:When to use Haystack/ElasticSearch vs Django's ORM何时使用 Haystack/ElasticSearch 与 Django 的 ORM
【发布时间】:2013-06-02 10:26:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: django elasticsearch django-haystack django-orm


    【解决方案1】:

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

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

    • 像 Elasticsearch 这样的搜索引擎在处理全文搜索时进行了高度优化(使用 SQL 执行某些操作时,很大程度上取决于您使用的数据库/引擎)

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 1970-01-01
      • 2014-11-26
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      相关资源
      最近更新 更多