1

我正在从 PHP/MySQL 迁移到 Google App Engine,并使用 JDO 作为与数据存储区的接口。将启用修改的预排序树遍历 (MPTT) 的表迁移到 JDO 模型的推荐方法是什么?

4

2 回答 2

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 数据存储上的分层数据存储的一些有用链接如下:

于 2011-09-03T11:05:43.870 回答
0

您可以查看 MPTT 的这个 JPA 实现,并将相同的想法应用于 JDO:

https://github.com/hacker-works/mptt-jpa

于 2020-07-01T13:22:49.733 回答