2

我正在处理我的 Django 应用程序需要定期检索的一组较大的数据(约 30000 条记录)。这些数据并不会经常更改(可能一个月左右一次),并且所做的更改是分批完成的,所以我试图达到的数据库解决方案几乎是只读的。

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

4

2 回答 2

2

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

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

然后您可以在您的应用程序中自由使用它cached_records,您也可以使用 QuerySetfilter等方法。但是filter在缓存的记录上会触发数据库查询。

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

于 2013-10-11T04:33:17.930 回答
0

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

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

于 2013-10-11T06:27:02.690 回答