我正在从PHP / MySQL迁移到Google App Engine,并使用JDO作为数据存储区的接口。将已修改预订树遍历(MPTT)的表迁移到JDO模型的推荐方法是什么?
答案 0 :(得分:1)
在花了一些时间搜索在GAE数据存储上实现分层数据存储的不同方法后,我决定尝试直接MPTT实现。以下代码段显示了模型:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MPTTObject {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String encodedKey;
@Persistent
private String parentEncodedKey;
@Persistent
private int left;
@Persistent
private int right;
如果数据存储区操作是读取密集型的,那么解决方案可以很好地工作,但是当操作是写入密集型时,它非常“重”。这一事实与必须在GAE中完成操作的时间限制相结合,使得该解决方案不那么吸引人。
另一种似乎更有效的方法是为层次结构中的每个节点存储父级和子级的完整列表。
GAE数据存储上的分层数据存储的一些有用链接如下:
答案 1 :(得分:0)
您可以看一下MPTT的这种JPA实现,并将相同的想法应用于JDO: