Django:更大的查询集&小号数据库命中,反之亦然

时间:2015-06-03 06:16:28

标签: mysql django django-queryset django-orm

我正在开发一个关于django& amp;的网站。 MySQL在复杂性和功能性方面与linkedin类似,并期待几个月的急剧增长。

我有一个问题。在设计模型和视图时,我有两个选择。要么进行较少数量的数据库命中并处理较大的查询集(通过进行更复杂的查询和更多连接),要么处理较小的查询集,从而增加数据库命中数。例如,当我使用prefetch_related()& select_related(),no。数据库命中数量显着减少,但查询集的大小和表上执行的连接数增加。这只是一个例子。

因此,考虑到生产条件,我应该更喜欢上述两种。一点点解释会更好。

1 个答案:

答案 0 :(得分:1)

最好选择较少数量的数据库命中,因为这可能是性能至关重要时的瓶颈。

每次想要读取一行时,有更多的命中几乎就像击中硬盘上的文件一样。当然,最终答案取决于您的使用频率以及通过将查询放在一起而获得的实际收益。例如,是否意味着您必须更长时间地缓存数据?如果必须为大量用户执行相同的操作,它将如何影响您的应用程序?

一种开始的方法是尝试减少同一函数中的查询集数量 - 如果一个函数执行100个单独的查询,那么如果可能的话,你可以把它们放在一起做得更好。