我正在处理我的Django应用程序需要定期检索的大量数据集(约30000条记录)。这些数据并没有经常发生变化(可能每个月左右一次),并且所做的更改是批量完成的,因此我尝试到达的数据库解决方案几乎是只读的。
这个数据集的总大小约为20mb,我的第一个想法是我可以将它加载到内存中(可能作为对象上的单例)并以这种方式非常快地访问它,尽管我想知道是否有其他更有效的方法是通过避免磁盘I / O来减少获取时间。 memcached会是最好的解决方案吗?或者将它加载到内存中的SQLite DB更好?或者在app启动时将其作为内存变量加载?
答案 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自动缓存在内存中。