我正在考虑为我的GAE应用程序使用拼写检查器,我们已经有一个算法用于拼写检查,但我正在试图弄清楚如何最好地存储和加载字典文件以获得最佳性能。
我正在考虑以下策略:
open()
,read()
等)加载/读取它们。ndb.model()
并加载/缓存信息我不太了解的一个缓存是上下文缓存 - 这个缓存是否附加到给定的实例?即如果我有一个旋转的驻留实例,我可以继续将字典数据加载到实例的RAM中,因此访问数据应该非常快(微秒与毫秒寻找/获取时间)?字典数据可能是某种我们将针对性能进行优化的分片列表。是否有其他数据存储方法/结构我在这里不考虑可能更合适?感谢。
答案 0 :(得分:0)
缓存(或其全名memcache)并不完全是RAM,但类似。当与NDB一起使用时,它就像一个缓冲区。写入时,首先写入Memcache然后写入DB。虽然这听起来可能要慢一点,因为写入数据库需要一段时间才能访问它们。当它读取它检查memcache时,如果它存在,那么它使用该信息,否则它从数据库中提取,将其存储在Memcache中,然后为您提供数据。就像RAM虽然它的易变性,因此你无法保证信息总是可以接受,它有限(取决于你拥有的实例类型)并且可以在没有警告或理由的情况下冲洗。你可以在这里阅读更多内容:
https://developers.google.com/appengine/docs/python/memcache/ https://developers.google.com/appengine/articles/scaling/memcache
最终Memcahe将是所有实例中共享的最快且最易访问的,因此如果一个实例从数据存储中提取一些数据,那么所有数据都可以快速访问它。即使它不在memcache中,它仍然是所有选项中最快的,因为其他选项将填满你的记忆,并可能导致错误和性能问题。