【问题标题】:How can I store Datastore Query to memcache in Go AppEngine?如何将 Datastore Query 存储到 Go AppEngine 中的 memcache?
【发布时间】:2013-12-31 16:46:27
【问题描述】:

我正在使用 Golang 开发 Appengine。

我在数据存储区中有大约 1000 个实体。

当我查询所有实体 (q.GetAll(...))、Datstore Read OperationsDatastore Small Operations 时,使用率约为 2%(50k 中的 1k)。 当我使用KeysOnly()Project(..something...) 时也是一样。

我已经阅读了一些文章来解决这个问题,我必须将 Datastore Query 存储到内存缓存中。 但我找不到如何做到这一点。

那么我如何在 Go AppEngine 中将数据存储区查询存储到/从 memcache 中存储/检索?

或者有没有其他方法可以减少数据存储读取/小操作的使用?

我需要你的帮助。 谢谢。

【问题讨论】:

    标签: google-app-engine go google-cloud-datastore


    【解决方案1】:

    最佳做法是使用KeysOnly() 进行查询并缓存每个调用datastore.Get() 以获得密钥。

    算法如下:

    • 添加实体后,通过自己的key添加到缓存中
    • 在获取缓存中检查它
      • 如果没有,则从数据存储中取出并重新添加到缓存中
      • 如果有从缓存中使用它

    documentation中描述的如何使用memcache。

    【讨论】:

    • 感谢您的回答。但是当我使用“KeysOnly()”进行查询时,“Datastore Small Operation”再次花费了 2% 的使用量。那正确吗? q := datastore.NewQuery("Greeting").KeysOnly()keys, _ := q.GetAll(c, nil)
    • 调用datastore.Get(c, key, &dst时花费的'Datastore Small Operation'),而不是查询,因此您需要缓存这部分代码。只需为函数datastore.Get 创建一个包装器。有我的伪代码:gist.
    • 非常感谢。这很有用
    【解决方案2】:

    查询不会被缓存。如果您的实体很小,您可以减少使用projection query 并减少到small costs。查看end of the article,了解有关生成必要搜索索引的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-22
      • 2014-04-07
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多