8

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

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

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

我有点困惑什么时候,如果它更快,我们不应该查询 Haystack 吗?!

4

1 回答 1

6

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

除了另一篇文章中提到的要点之外,还有一些要点需要考虑:

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

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

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

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

于 2013-06-06T13:49:54.393 回答