英文:
How can I store Datastore Query to memcache in Go AppEngine?
问题
我正在使用Golang在Appengine上工作。
我在数据存储中有大约1000个实体。
当我查询所有实体(q.GetAll(...)
)时,数据存储读取操作
或数据存储小操作
的使用率约为2%(1k的50k)。
当我使用KeysOnly()
或Project(..something...)
时,情况是相同的。
我已经阅读了一些文章来解决这个问题,我必须将数据存储查询存储到memcache中。
但是我找不到如何做到这一点。
那么,在Go AppEngine中,我如何将数据存储查询存储/检索到memcache中?
或者是否有其他方法可以减少数据存储读取/小操作的使用率?
我需要你的帮助。
谢谢。
英文:
I'm working on Appengine with Golang.
I have about 1000 entities on datastore.
When I query all entities(q.GetAll(...)
), Datstore Read Operations
or Datastore Small Operations
run about 2% usage(1k of 50k).
It's same when I use KeysOnly()
or Project(..something...)
.
I have read some articles to solve this, I have to store Datastore Query to memcache.
But I cannot find how to do that.
So how can I store/retrieve Datastore Query to/from memcache in Go AppEngine?
Or is there other way to decrease datastore read/small operation usage?
I need your help.
Thank you.
答案1
得分: 0
查询不会被缓存。如果你的实体很小,你可以使用投影查询来减少成本。请查看文章末尾以获取生成必要搜索索引的信息。
英文:
Queries are not cached. If your entity are small, you can reduce use a projection query and reduce to small costs. Check out the end of the article for information about generating the necessary search index.
答案2
得分: 0
最佳实践是使用KeysOnly()
进行查询,并对每次调用datastore.Get()
进行缓存。
算法如下:
- 在添加实体后,通过其自身的键将其添加到缓存中
- 在获取时,首先在缓存中检查
- 如果不存在,则从数据存储中获取,并将其重新添加到缓存中
- 如果存在,则直接从缓存中使用
如何使用内存缓存在文档中有描述。
英文:
The best practice is to make a query with KeysOnly()
and caching each call datastore.Get()
for the key.
The algorithm is as follows:
- after adding entity, add it to the cache by her own key
- in obtaining check it in cache
- if no, then get out it from datastore and add it back into the cache
- if there is use it from cache
How to use memcache described in the documentation.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论