3

我是 Python 新手,已经学习了 3 个月的基础知识,学习类型、函数和算法。现在我开始练习使用 GAE 框架开发 Web 应用程序。

目标:拥有一个非常大的字典,可以从整个 Web 应用程序中的所有 .py 文件中访问它,而无需多次存储或在每次有人访问应用程序的 URL 时重新创建它。

我想将一个简单的 DB 表渲染到字典中,希望能够提高速度,因为它会在内存中。

我也计划在内存中创建一个 DAWG - TRIE

我不希望每次调用页面时都创建这个字典,我希望它在内存中存储一​​次,保存在那里并由所有会话使用和访问,如果可能的话也进行修改。

我怎样才能做到这一点?就像一个简单的内存数据库,但实际上是一个 Python 字典?

谢谢你。

4

3 回答 3

7

使用内存缓存。您可以将腌制的字典存储在内存缓存中,但您也可以直接将键/值存储在内存缓存中。编写一个包装类,确保从数据存储中加载值(如果它们尚未在内存缓存中)。

或者更好的是,只需使用ndb,它会自动为您在 memcache 中缓存值。这样您只需从数据存储中查询值,ndb 会自动为您缓存内存中的值(跨多个请求)。

于 2012-06-13T11:35:17.257 回答
0

我将对此进行尝试并提出标准的python搁置模块。这提供了一个由 dbm 文件支持的简单持久字典。

有一些特别与并发相关的警告。如果启用了回写,它确实提供了一些缓存,但同样可能存在内存消耗问题。另一个限制是键必须是字符串。

不过,它可能值得一看。它绝对符合“纯 Python hack”的描述。

简单的例子:

import shelve

d = shelve.open('my_shelf')
for i in range(100000):
    d[str(i)] = 'Item %s' % i
d.close()
d = shelve.open('my_shelf')
>>> d['50000']
'Item 50000'
于 2012-06-13T12:19:08.280 回答
-2

这是不可能的(没有外部服务)。为此,DB 可以存储比一个请求更长的数据。您可以做的是保护用户会话“中”的字典,但我不建议这样做。除非您有数百万个条目,否则每个 DB 都足够快,即使是 sqlite。

于 2012-06-13T11:30:06.280 回答