【发布时间】:2015-02-18 00:06:46
【问题描述】:
所以我有一个基于每个用户的网站,它预计会查询一个非常大的数据库,并翻阅结果。由于返回的条目数量的大小,我运行一次查询(这需要一些时间......),将结果存储在全局中,然后让人们根据需要遍历结果(或下载它们)。
当然,这是不可扩展的,因为全局变量是跨会话共享的。在 Django 中执行此操作的正确方法是什么?我查看了会话管理,但我总是遇到“xyz 在 json 上不可序列化”的问题。我是否要研究如何使用会话正确执行此操作,或者是否有其他首选方法可以执行此操作?
【问题讨论】:
-
为什么不使用缓存层? Memcached、redis 等
-
每个人的查询都一样吗?
-
您可以使用数据库作为缓存层 - 获取初始“艰苦工作”查询的结果并将它们保存在新表中......然后从该表中检索结果会很快并且您仍然可以通过 SQL/ORM 进一步过滤它们,如果您使用单独的缓存层(并且也避免了整个序列化问题),您会放弃这一点
-
您还应该考虑到 Django ORM 在您运行查询时不会抓取所有行(除非您通过执行
list(queryset)之类的操作来强制它抓取)它将使用游标并从遍历查询集时的数据库
标签: python json django mysql-python