MPTT, как реализовать в Google App Engine с использованием JDO?

Я перехожу с PHP/MySQL на Google App Engine и использую JDO в качестве интерфейса с хранилищем данных. Каков рекомендуемый способ переноса таблицы с поддержкой модифицированного обхода дерева предзаказов (MPTT) в модель JDO?

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:

Вы можете взглянуть на эту реализацию MPTT в JPA и применить те же идеи к JDO:

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

Другие вопросы по тегам