Google app engine 应用程序引擎-实体链生成超长的实体键
我正在编写一个应用程序,允许用户在他们之间发送消息。我使用事务来确保任意两个用户之间只有一条“top”消息,并且此“top”消息具有指向“next”消息的链接,依此类推。。形成一种消息链接列表。这些消息通过引用属性相互引用,并通过声明每个新的“top”a并将以前的“top”作为其父级而放置在同一实体组中 但是,这种方法的问题是,每个新实体都有一个键,其中包含前一个实体的整个键(即:new_top_key==old_top_key+new_stuff)。这会导致实体键以很快的速度增长,并且在单个链中发送几百条消息后可能会出现非常糟糕的行为(但我还没有实际测试) 所以,我的问题是:1)这是应用程序引擎的故意功能吗。2) 我应该避免这种类型的结构吗?还是由应用程序引擎内部高效地处理?3) 对于实体类型结构的链表,您有什么建议吗 谢谢你和亲切的问候Google app engine 应用程序引擎-实体链生成超长的实体键,google-app-engine,key,parent,Google App Engine,Key,Parent,我正在编写一个应用程序,允许用户在他们之间发送消息。我使用事务来确保任意两个用户之间只有一条“top”消息,并且此“top”消息具有指向“next”消息的链接,依此类推。。形成一种消息链接列表。这些消息通过引用属性相互引用,并通过声明每个新的“top”a并将以前的“top”作为其父级而放置在同一实体组中 但是,这种方法的问题是,每个新实体都有一个键,其中包含前一个实体的整个键(即:new_top_key==old_top_key+new_stuff)。这会导致实体键以很快的速度增长,并且在单个链
Alex您使用的是python还是java?详细答案将取决于您使用的API 我敢肯定,让你的钥匙无限期增长不是最好的计划。(这可能是应用程序引擎api的一个很好的测试用例:) 我认为解决方案是将实体组信息与消息链接信息分开。为了在线程/会话/链/任何东西上执行事务,所有消息都需要位于同一个实体组中。但是,它们不需要位于与消息之间的链接结构完全匹配的层次结构中。您应该在平面结构中将所有消息实体的父级(实体组)显式设置为相同。因此,在实体组的意义上,每个实体都是其他实体的兄弟。实体中还需要一个字段来链接到下一条(和/或上一条)消息。所以你们仍然会有一个链接列表(或树或任何东西)在“以前的消息”链接方面 Python和Java都有创建具有特定父/实体组的实体的方法。(事实上,您甚至可以将不存在的实体指定为实体组层次结构的根!) 现在,每条消息的密钥都是固定长度的,因此您的“下一个”和“上一个”引用属性将很好,不会超出密钥长度的某些限制。按顺序:
alexander,我用GoogleAppEngine重新标记了你的问题,这是AppEngine的标准标签。破折号将其转换为一个标记,而不是像“app”和“engine”那样的单独标记。