我有一个视图,它通过ORM(MongoEngine)返回大型Mongo文档列表。针对Collection的ORM查询在许多级别(排序,限制,偏移,查询过滤器等)上有所不同。但是,基础数据不会定期更新。
要显示数据,视图会将Mongo文档转换为Pythonic Dict对象。
出于缓存目的,我应该只针对MongoEngine ORM方法调用内置的hash()函数吗?换句话说:
key = hash('Document.objects.filter(user_id__gt=5)')
value = Document.objects.filter(user_id__gt=5)
然后我会使用带有memcache后端的Django缓存API。
这似乎不是线程安全但我不确定这是一个巨大的考虑因素。我更大的担心是为每个查询变体读取/写入Memcache的开销。我想我可以将它限制在最常见的查询中。
我想最大的问题是Mongo是否需要memcache来实现这种低级功能。
答案 0 :(得分:2)
MongoDB使用内存映射文件,底层操作系统处理来往磁盘的分页,并尽可能高效地将数据保存在内存中。如果你有额外的RAM,可以将它用于MongoDB,以最大限度地提高吞吐量并降低代码复杂性。