Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Django:更大的querysets&;数据库命中次数少,反之亦然_Mysql_Django_Django Queryset_Django Orm - Fatal编程技术网

Mysql Django:更大的querysets&;数据库命中次数少,反之亦然

Mysql Django:更大的querysets&;数据库命中次数少,反之亦然,mysql,django,django-queryset,django-orm,Mysql,Django,Django Queryset,Django Orm,我正在django&MySQL上开发一个网站,在复杂性和功能性方面与linkedin类似,我预计在未来几个月内会有大幅增长 我有一个问题。在设计模型和视图时,我有两个选择。要么选择较小的数据库命中数并处理较大的查询集(通过进行更复杂的查询和更多的联接),要么处理较小的查询集,从而增加数据库命中数。例如,当我使用prefetch_related()和select_related()时,数据库命中数会显著减少,但查询集的大小和对表执行的联接数会增加。这只是一个例子 因此,考虑到生产条件,我应该从以上

我正在django&MySQL上开发一个网站,在复杂性和功能性方面与linkedin类似,我预计在未来几个月内会有大幅增长

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


因此,考虑到生产条件,我应该从以上两种中选择什么。稍微解释一下就更好了。

最好是减少数据库的点击次数,因为在性能至关重要的时候,这可能是您的瓶颈

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


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

不,目前没有。因为我在某个地方读到,在网站点击次数增加太多之前,这是不必要的。我猜,你仍然在使用django的默认缓存。当然,对于小型应用程序来说,这是不必要的。但这是推荐的。基本逻辑是在逻辑和数据库之间创建一个附加层。所以你不必为所有的数据点击数据库,你的问题很大程度上取决于很多因素。你存储什么样的数据?您正在执行什么类型的查询?最受欢迎的是什么?你需要他们提供的所有数据吗?您将如何扩展应用程序?没有“总是这样做”的答案。所以,如果我使用memcached,那么在加载新闻源时,当第一个用户点击数据库时,我可以将结果存储在缓存中,而当下一个用户加载新闻源时,在正常情况下,数据库不会被点击?但是,这又是一个几乎相同的问题,缓存将利用RAM,没有缓存,更多的数据库命中。我应该选哪一个。是的,你说得对。但我们回到了许多因素上。你有大量的内存吗?如果是,一切都很好。如果不是的话,我想你明白了。这是一个很好的解释,但目前,我正在做50个连接来加载新闻提要,其中许多正在被重复。随着数据库点击次数的增加,我可以将其减少到15-20次。那我该怎么办呢。使用缓存框架或依赖django默认缓存。软件中最大的错误之一是过早优化。现在请继续使用django默认缓存,除非您找到离开它的理由。有了1gb内存,您将很快发现不足之处(如果有)。