Потратив некоторое время на поиск различных способов реализации иерархического хранения данных в хранилище данных 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.: