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