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: