将静态Django数据库加载到内存中

时间:2013-10-11 04:06:27

标签: python django sqlite orm memcached

我正在处理我的Django应用程序需要定期检索的大量数据集(约30000条记录)。这些数据并没有经常发生变化(可能每个月左右一次),并且所做的更改是批量完成的,因此我尝试到达的数据库解决方案几乎是只读的。

这个数据集的总大小约为20mb,我的第一个想法是我可以将它加载到内存中(可能作为对象上的单例)并以这种方式非常快地访问它,尽管我想知道是否有其他更有效的方法是通过避免磁盘I / O来减少获取时间。 memcached会是最好的解决方案吗?或者将它加载到内存中的SQLite DB更好?或者在app启动时将其作为内存变量加载?

2 个答案:

答案 0 :(得分:2)

最简单的解决方案我认为用

将所有对象加载到内存中
cached_records = Record.objects.all()
list(cached_records) # by using list() we force Django load all data into memory

然后您可以在应用中自由使用此cached_records,并且还可以使用filter等QuerySet方法。但缓存记录上的filter将触发数据库查询。

如果您将根据条件查询这些记录,使用缓存将是一个好主意。

答案 1 :(得分:0)

磁盘IO是否真的成为应用程序性能的瓶颈并影响您的用户体验?如果没有,我认为这种优化是不必要的。

操作系统和RDBMS(例如MySQL,PostgresQL)现在非常聪明。磁盘中的数据将由RDBMS和OS自动缓存在内存中。