Вопрос, связанный с Java ORM - SQL против Google DB (Big Table?) GAE - PullRequest
2 голосов
/ 03 марта 2010

Мне было интересно узнать о следующих двух вариантах, когда один использует не таблицы SQL, а базы данных на основе ORM (пример - при использовании GAE)

Будет ли второй вариант менее эффективным?

Требование: Есть объект. У объекта есть коллекция похожих предметов. Мне нужно хранить этот объект. Например, скажем, объект является деревом, и у него есть коллекция листьев.

Вариант 1: Традиционная структура типа SQL:

  • Таблица для дерева (с TreeId в качестве идентификатор строки в таблице.)
  • Стол для листьев (где каждый лист имеет TreeId и показать листья дерева, я запрашиваю все листья где TreeId - это идентификатор дерева.)
  • Здесь древовидная структура НЕ есть поле с листьями.

Вариант 2: ORM / GAE Таблицы: Используя тот же пример выше,

  • У меня есть объект для дерева, где у объекта есть коллекция (Set / List в Java / C ++) листьев.
  • Я храню и извлекаю Дерево вместе с листьями (так как листья реализованы как объект Set в дереве)

Мой вопрос: будет ли второй вариант менее эффективным, чем первый?

Если так, то почему? Есть ли другие альтернативы?

Спасибо!

1 Ответ

1 голос
/ 25 мая 2010

Было бы лучше использовать Hibernate (для java) или другую среду ORM, чем ORM db.
1. orm db's в основном любительские.
2. никто не ценит это. Вы будете гораздо лучше специалистом, если вы знаете PostgreSQL с фреймворком orm, чем просто какой-нибудь orm db.
3. в мире rdbms много стандартов. нет стандартов в orm dbs.
4. Поддержка rdbms и сообщество делают этот выбор более безопасным в долгосрочной перспективе.
5. Эффективность - это сложный вопрос. почти 80% уверены, что если вы хотите найти строку с именем "name = 'Alex'", она будет быстрее в rdbms, чем в orm db, потому что orm db потребуется распаковать объект для этой операции.
PS: я понимаю, мой пост почти оффтоп, но я думаю, что он содержит некоторые хорошие вещи, чтобы подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...