3

我读过最好的做法是在查询结果时只返回一个 ID,然后从数据库中填充元数据。这是真的?我担心性能。

4

4 回答 4

4

在我看来,存储和返回尽可能少的字段几乎总是最好的——最好只返回 ID,除非您明确需要高亮等功能。

随着索引的增长,在索引中存储大量数据会对搜索性能产生负面影响。没有比没有数据加载更快的数据。此外,在您选择的主数据存储中,通过 ID 查找对象应该是一项非常便宜的操作。

最重要的是,如果您的应用程序使用 ORM 与其数据存储进行交互,那么在整个应用程序中一致地重用所有域建模的纯粹实用性将很难夸大。

直接从您的搜索引擎返回值可能很有用。但是,如果不使用搜索引擎作为主要数据存储,我需要一个非常有说服力的理由来通过前面的 ORM 来分割我的域逻辑。

于 2012-12-13T23:14:05.653 回答
2

IMO,如果您可以在单个调用中检索搜索结果和数据,与仅获取 id 并进行数据库调用以检索相同的元数据相比,将大大提高性能。
此外,Solr/ES 提供内置缓存解决方案,因此后续查询的响应速度会更快。对于 DB,您可能必须使用解决方案或其他一些选项。

于 2012-12-12T06:44:31.900 回答
1

这一切都取决于您的具体情况。

在某些情况下,你说的可能是真的。例如,Etsy 就是这样做的(或者至少曾经这样做过),他们的理由是他们有一个非常强大的 mysql 集群,他们非常了解如何管理它,而且速度非常快,所以 Solr 只返回 id 是对他们来说足够了。

但是,您可能处于完全不同的场景中,并且调用 db 可能会比在 Solr 中存储所需的所有内容并仅点击 Solr 花费更长的时间。

于 2012-12-12T10:00:51.410 回答
0

根据我的经验,当您突出显示或检索的字段非常大并且网络序列化/反序列化传输开销增加时,Solr 在检索结果时表现不佳。如果是这种情况,最好从数据库中异步检索这些字段。

于 2012-12-12T07:51:38.320 回答