将编码的密钥映射到appengine中的较短标识符

Ril*_*ark 3 performance google-app-engine network-efficiency

我想向客户端发送唯一引用,以便客户端可以引用特定对象.编码键appengine提供有时50个字节长,我可能只需要两个或三个字节(我可能希望需要四个或五个,但这将不会有一段时间!).

发送较大的密钥实际上非常昂贵,因为我可能一次发送400个引用.

所以,我想将这些长键映射到更短的键.一个明显的解决方案是在数据存储区中存储映射,但是当我发送400个对象时,我正在进行400个额外的查询,对吧?也许我通过在memcache中保留映射的副本来减少费用.有没有更好的办法?

我是否可以从appengine创建的未编码密钥中抽出数字并使用它?我只需要我使用的任何ID,每个实体类型都是唯一的,而不是整个应用程序.

谢谢,

Dav*_*ill 5

数据存储区密钥包含您不需要的额外信息 - 例如应用程序ID.所以你绝对不需要发送整个密钥.

如果这些引用属于数据存储区中的特定种类,那么您可以做得更好,只需发送key_name或数字ID(无论您使用哪个密钥).如果是后一种情况,那么您可以只用几个字节传输每个密钥(您可以选择可变长度或固定长度的整数编码,具体取决于哪种情况对于您的特定情况更紧凑[可能是前者直到您发送的大多数ID都非常大]).

当您从用户收到这些部分密钥时,应该很容易重建从数据存储区检索实体所需的完整密钥.如果您使用的是Python运行时,则可以使用db.Key.from_path(kind_name, numeric_id_or_key_name).

像这样的方案应该比尝试使用数据存储区/内存缓存来存储自定义映射更简单,并且(很多)更快.