GWT + JDO + GAE, как упорядочить мои данные для производительности - PullRequest
0 голосов
/ 14 февраля 2011

Вот моя структура, которую я хочу сохранить в базе данных

GrandFather-> Отец [] -> Ребенок []. Дедушка содержит список отца, а отец содержит список детей.

Как лучше всего это организовать -> встраивать или свои столы?

И как бы я заполнил Дедушку [] на стороне клиента. (Я посмотрел через объективацию, запрос фабрики и даже сортировку как DTO). В настоящее время у меня 2400 дедов, у каждого из которых 5 отцов, и у каждого из них 5 детей.

Мои запросы несколько, и это занимает много времени, чтобы получить объекты. для (дедушка ...) queryAllfather для (отец ...) queryAllChildren

Для каждого запроса это pm.newQuery (GrandFather.class); pm.execute.

Это занимает много минут.

1 Ответ

1 голос
/ 13 января 2012

Прежде всего, если вы используете хранилище данных с высокой репликацией, не используйте JDO или JPA. Это урок, который я усвоил трудным путем. Он просто не предназначен для этого.

Вместо использования JDO или JPA я выбрал гораздо более простую, понятную и эффективную библиотеку под названием Objectify.

Что касается хранения ваших данных в HRD, вы должны рассказать больше о ваших случаях использования. Если у вас есть модель с одним предком, вы можете сохранить ее в HRD. Если ваша модель также будет содержать «материнскую» линию, вам придется сделать это по-другому.

Наличие иерархического (если возможно) может дать вам 2 преимущества: - Возможность совершать транзакции по иерархии. - Избегание дополнительного индекса для родительского объекта, потому что выборка по предку не потребует индексирования родительского поля.

Есть также 2 недостатка: - Вы можете иметь только одного родителя. Таким образом, вы должны решить, какой из них является лучшим кандидатом для этого. Например, если у вас есть мать, грандиозная материнская линия, вам придется выбрать либо отца, либо мать, но не обоих, чтобы быть родителями. - Есть некоторые недостатки в размещении / получении объектов с более длинными иерархическими ключами. Например, родительский ключ всегда должен быть выбран. Я предлагаю вам прочитать об этом в документации, потому что, возможно, я вас дезинформирую.

Важно помнить, что вам могут не понадобиться преимущества, в то время как недостатки могут серьезно повлиять на ваш проект. Таким образом, ответ на ваш оригинальный вопрос: только вы можете сказать. :)

...