【发布时间】:2012-08-06 03:28:51
【问题描述】:
我的 django 应用程序处理 25MB 的二进制文件。它们每个都有大约 100,000 条“记录”,每条 256 字节。
从磁盘读取二进制文件并使用 python 的 struct 模块对其进行解码大约需要 7 秒。我将数据转换成一个包含大约 100,000 个项目的列表,其中每个项目都是一个包含各种类型(浮点数、字符串等)值的字典。
我的 django 视图需要搜索这个列表。显然 7 秒太长了。
我尝试使用 django 的低级缓存 API 来缓存整个列表,但这不起作用,因为任何单个缓存项的最大大小限制为 1MB。我尝试单独缓存 100,000 个列表项,但这需要超过 7 秒的时间 - 大部分时间都花在解开这些项上。
有没有一种方便的方法可以在请求之间将大列表存储在内存中?你能想出另一种方法来缓存对象以供我的 django 应用使用吗?
【问题讨论】:
-
是否可以使用 numpy.array?
-
你考虑过使用数据库吗?
-
James R:我看不到 numpy.array 和我的缓存问题之间的联系。 Ignacio:是的,这可行——我将 100,000 个项目中的每一个存储为 django 模型实例,并使用 ORM 来调用后续请求的数据......但我希望找到一个更简单的基于内存的解决方案。
-
numpy.array 在存储大型数字数组时往往很有效。如果您不存储数字,那么它就没有用处
-
另外,如果是平的,你可以考虑使用 mongo 或 casandra。
标签: django caching memcached deserialization pickle