Django:更大的查询集和小号。数据库命中率,反之亦然
Django: bigger querysets & small no. of database hits or vice versa
我正在 django 和 MySQL 上开发一个网站,它在复杂性和功能方面与 linkedin 类似,预计几个月内会急剧增长。
我有一个问题。在设计模型和视图时,我有两个选择。要么寻求更少的数据库命中数并处理更大的查询集(通过进行更复杂的查询和更多的连接),要么处理更小的查询集,从而增加数据库命中数。例如,当我使用 prefetch_related() & select_related() 时,没有。数据库命中率显着降低,但查询集的大小和对表执行的连接次数增加。这只是一个例子。
所以考虑到生产条件,我应该选择以上两个中的哪个。稍微解释一下会更好。
最好选择较少的数据库命中次数,因为当性能至关重要时,这也可能成为您的瓶颈。
点击次数多了,就好像每想读一行都要去硬盘找一个文件一样。当然,最终的答案取决于您的使用频率和您将查询放在一起所获得的实际收益。例如,这是否意味着您必须将数据缓存更长时间?如果它必须为大量用户做同样的事情,它将如何影响您的应用程序?
开始的一种方法是尝试减少同一函数中查询集的数量 - 如果一个函数正在执行 100 个单独的查询,那么如果可能的话,将它们放在一起可以做得更好。
我正在 django 和 MySQL 上开发一个网站,它在复杂性和功能方面与 linkedin 类似,预计几个月内会急剧增长。
我有一个问题。在设计模型和视图时,我有两个选择。要么寻求更少的数据库命中数并处理更大的查询集(通过进行更复杂的查询和更多的连接),要么处理更小的查询集,从而增加数据库命中数。例如,当我使用 prefetch_related() & select_related() 时,没有。数据库命中率显着降低,但查询集的大小和对表执行的连接次数增加。这只是一个例子。
所以考虑到生产条件,我应该选择以上两个中的哪个。稍微解释一下会更好。
最好选择较少的数据库命中次数,因为当性能至关重要时,这也可能成为您的瓶颈。
点击次数多了,就好像每想读一行都要去硬盘找一个文件一样。当然,最终的答案取决于您的使用频率和您将查询放在一起所获得的实际收益。例如,这是否意味着您必须将数据缓存更长时间?如果它必须为大量用户做同样的事情,它将如何影响您的应用程序?
开始的一种方法是尝试减少同一函数中查询集的数量 - 如果一个函数正在执行 100 个单独的查询,那么如果可能的话,将它们放在一起可以做得更好。