用户提供简单的数据模型:存储基本信息(键,姓名,电话号码等)
关系:形容,例如两个用户(供应relationship_type +两个用户键)
评论之间的友谊:用户发布的(键,注释文本,USER_ID)
我越来越表现很差,举例来说,如果我尝试打印所有用户的朋友的名字。假设用户有500个朋友:我可以很容易地在一个查询中获取好友user_id的列表。但是,为了拔出名字,我必须前往数据存储区执行500次往返访问,每个访问时间似乎约为30毫秒。如果这是SQL,我只需要加入并快速获得答案。
据我所知,在JDO的轻松实现中(如http://gae-java-persistence.blogspot.com所述)在非关系中执行双向连接的基本设施,但它们听起来是实验性的和非标准的(例如,我的代码无法工作任何其他的JDO实现)。
更糟糕的是,如果我想抽出用户朋友发布的所有评论,该怎么办。然后,我需要从用户 - >关系 - >评论,即三向连接,甚至没有实验性支持。来回500次来获得朋友列表的额外开销+另外500次来查看是否有来自用户朋友的任何评论已经足以推动运行时间> 30秒。
人们在真实数据存储支持的JDO应用程序中如何处理这些问题? (或者他们?)
有没有人在这种(很常见)的情况下从JDO/Datastore中提取了令人满意的性能?
-Bosh
除非AppEngine支持对Collection字段的contains()调用,否则看起来您有最佳解决方案。 – Gunslinger47 2010-04-17 07:45:37