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



我正在使用一组有点大的数据(~30000条记录(,我的Django应用程序需要定期检索这些数据。 这些数据并不经常更改(可能每月一次左右(,并且所做的更改是批量完成的,因此我尝试得出的数据库解决方案几乎是只读的。

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

我认为最简单的解决方案是将所有对象加载到内存中

cached_records = Record.objects.all()
list(cached_records) # by using list() we force Django load all data into memory

然后,您可以在应用程序中自由使用此cached_records,也可以使用QuerySet方法,例如filter等。但是对缓存记录filter将触发数据库查询。

如果要根据条件查询这些记录,则最好使用缓存。

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

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

最新更新