何时使用Haystack/ElasticSearch与Django的ORM

abi*_*son 8 django django-orm django-haystack elasticsearch

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

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

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

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

Ber*_*ant 6

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

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

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

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

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

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