【问题标题】:Caching/storage strategies for implementing a word dictionary in App Engine在 App Engine 中实现字典的缓存/存储策略
【发布时间】:2014-10-05 00:05:34
【问题描述】:

我正在考虑为我的 GAE 应用程序使用拼写检查器,我们已经有一个用于拼写检查的算法,但我正在尝试找出如何最好地存储和加载字典文件以获得最佳性能。

我正在考虑以下策略:

  1. 将字典数据放在本地应用引擎存储中的文本文件中,并使用标准 IO 方法(open()read() 等)加载/读取它们
  2. 将字典数据放入 GCS 并使用 GCS IO 方法加载/读取
  3. 将字典数据放在ndb.model() 中并加载/缓存信息

我不太明白的一个缓存是上下文缓存——这个缓存是附加到给定实例的吗? IE。如果我有一个旋转的常驻实例,我可以继续将字典数据加载到实例的 RAM 中,因此访问数据应该非常快(微秒与毫秒的查找/获取时间)?字典数据可能是某种我们将针对性能进行优化的分片列表。是否还有其他我在这里没有考虑的可能更合适的数据存储方法/结构?谢谢。

【问题讨论】:

  • 字典有多大?

标签: google-app-engine caching


【解决方案1】:

缓存(或它的全名 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 中,它仍然是所有选项中最快的,因为其他选项会填满您的内存并可能导致错误和性能问题。

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2011-11-23
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多