【发布时间】:2015-08-17 04:44:03
【问题描述】:
我正在开发一个关于 django 和 MySQL 的网站,该网站在复杂性和功能方面与linkedin 相似,并且预计会在几个月内快速增长。
我有一个问题。在设计模型和视图时,我有两个选择。要么选择更少的数据库命中并处理更大的查询集(通过进行更复杂的查询和更多的连接),要么处理更小的查询集,从而增加数据库命中的数量。例如,当我使用 prefetch_related() 和 select_related() 时,没有。数据库命中数显着减少,但查询集的大小和对表执行的连接数增加。这只是一个例子。
所以考虑到生产条件,我应该在上述两个中更喜欢什么。稍微解释一下会更好。
【问题讨论】:
-
不,目前没有。因为我在某处读到,除非网站上的点击次数增加太多,否则没有必要。
-
我猜,您仍在使用 django 的默认缓存。当然,对于小型应用程序来说,这不是必需的。但建议这样做。基本逻辑是您在逻辑和数据库之间创建了一个附加层。因此,您不必为所有数据访问数据库。
-
您的问题在很大程度上取决于很多因素。你存储什么样的数据?您正在执行什么样的查询?什么是最受欢迎的?你需要他们的所有数据吗?您将如何扩展您的应用程序?没有“总是这样做”的答案。
-
所以,如果我使用 memcached,那么在加载新闻源时,当第一个用户访问数据库时,我可以将结果存储在缓存中,当下一个用户加载新闻源时,在正常情况下,数据库不会被击中?但是这又是几乎相同的问题,缓存将利用 RAM,没有缓存,更多的数据库命中。我应该选择哪一个。
-
是的,你是对的。但我们又回到了因素的数量上。你有大量的内存吗?如果是的话 - 一切都很好。如果不是 - 好吧,我想你明白了。
标签: mysql django django-queryset django-orm