У меня есть простая модель данных, которая включает
ПОЛЬЗОВАТЕЛИ: хранить основную информацию (ключ, имя, номер телефона и т. Д.)
ОТНОШЕНИЯ: опишите, например, дружба между двумя пользователями (предоставление Relations_type + два пользовательских ключа)
КОММЕНТАРИИ: опубликовано пользователями (ключ, текст комментария, user_id)
У меня очень низкая производительность, например, если я попытаюсь напечатать имена всех друзей пользователя. Допустим, у пользователя 500 друзей: я могу очень легко получить список user_ids друзей с помощью одного запроса. Но затем, чтобы вытащить имена, мне нужно совершить 500 возвратно-поступательных обращений к хранилищу данных, каждое из которых, кажется, занимает порядка 30 мсек. Если бы это был SQL, я бы просто сделал JOIN и быстро получил бы ответ.
Я понимаю, что существуют элементарные средства для выполнения двусторонних соединений через отношения, не принадлежащие владельцу, в упрощенной реализации JDO (как описано в http://gae-java-persistence.blogspot.com), но они кажутся экспериментальными и нестандартными (например, мой код не будет работать ни в одной другой реализации JDO).
Что еще хуже, что, если я хочу вытащить все комментарии, оставленные друзьями пользователя. Затем мне нужно получить от User -> Relation -> Comments, то есть трехстороннее соединение, которое даже экспериментально не поддерживается. Накладные расходы в размере 500 туда-обратно, чтобы получить список друзей + еще 500 поездок, чтобы увидеть, есть ли какие-либо комментарии от друзей пользователя, уже достаточно, чтобы продвинуть время выполнения> 30 секунд.
Как люди решают эти проблемы в реальных приложениях JDO, поддерживаемых хранилищами данных? (Или они?)
Кому-нибудь удалось добиться удовлетворительной производительности из JDO / Datastore в такой (очень распространенной) ситуации?
-Боша