Сравнение хранимых процедур и JDO для проекта хранилища данных

StackOverflow https://stackoverflow.com/questions/2146891

Вопрос

Раньше мы имели доступ к базе данных через хранимые процедуры.Их считали «лучшим» способом управления данными.Мы храним данные в базе данных, и любой язык/платформа может получить к ним доступ через JDBC/ODBC/и т. д.

Однако в последние годы стали популярными механизмы извлечения данных из хранилища на основе отражения во время выполнения и метаданных, такие как Hibernate/DataNucleus.Первоначально мы беспокоились, что они будут медленными из-за дополнительных шагов (отражение стоит дорого) и того, как они извлекают ненужные данные (весь объект), когда нам нужно только одно поле.

Я начинаю планировать большой проект по хранилищу данных, использующий J2EE, но я немного не уверен, стоит ли использовать хранимые процедуры или JDO/JPA и тому подобное.В последнее время я работаю с Hibernate и, честно говоря, не скучаю по написанию хранимых процедур CRUD!

По сути, это сводится к:

Хранимые процедуры
+ Возможна оптимизация на сервере (правда только запросы)
- Вероятно, будет более тысячи хранимых процедур:добавлять, удалять, обновлять, getById и т. д. для каждой таблицы.

JDO
+ Я не буду тратить следующие несколько месяцев на написание параметров.add("@firstNames", customer.getFirstName());...
- Будет медленнее, чем SP (но большинство поддерживает пейджинг)

На что бы вы плюнули в моей ситуации?В данном случае я думаю, что это очень много.

Спасибо,

Джон

Нет правильного решения

Другие советы

«JDO — будет медленнее, чем SP (но большинство поддерживает пейджинг)»

Это предположение часто оказывается ложным.У SP нет причин быть особенно быстрыми.Я провел несколько измерений, и они не быстрее, чем код вне базы данных.

Хранилище данных характеризуется загрузкой только вставки и длительным выполнением. SELECT...GROUP BY... запросы.

Вы не пишете обработку транзакций OLTP.Вы не используете 3NF как способ предотвращения аномалий обновления в транзакциях обновления/удаления.

Поскольку вы выполняете массовую вставку, SP определенно будет медленнее, чем утилита массовой загрузки.Массовые загрузчики часто являются многопоточными и потребляют все доступные ресурсы ЦП.SP является частью БД и может совместно использовать только ограниченные ресурсы БД.

Поскольку вы в основном делаете SELECT GROUP BY, ИП здесь тоже не сильно поможет.Оператор SELECT не получает преимуществ от включения в процедуру.

Они вам не нужны.Они не помогают.

Вы можете легко протестировать массовую загрузку и запрос, чтобы продемонстрировать, что SP не помогают.

Род Джонсон в своей книге «Проектирование и разработка J2EE» написал очень четкий анализ ORM/StoredProcedures.Он сказал, что

Хранимые процедуры следует использовать в системе J2EE только для выполнения операций, которые всегда будут интенсивно использовать базу данных, независимо от того, реализованы ли они в базе данных или в коде Java, который обменивается большим количеством данных с базой данных.

Поскольку вы планируете реализовать хранилище данных, я думаю, что подход с использованием хранимых процедур — правильный выбор.

Я бы предложил использовать метаданные для создания сценариев, которые вы используете для загрузки в хранилище данных.Это позволяет вам получить выигрыш в производительности за счет использования специализированных инструментов загрузки и, возможно, хранимых процедур (если вы используете достаточно древнюю базу данных).Кроме того, вам, вероятно, придется вручную писать хотя бы немного кода SQL.Выполнение общих сценариев в виде хранимых процедур позволит вам планировать их все одинаковым образом и не беспокоиться об изменении способа их вызова, когда вы переписываете сгенерированный код, чтобы он работал лучше.

Что касается получения данных, то если то, что вы создаете в J2EE, является инструментом отчетности, то вам, возможно, лучше использовать JDO.Хотя я не очень хорошо знаком с отчетностью, я вижу одно преимущество: вашим конечным пользователям будет проще создавать собственные отчеты, которые вы не ожидали заранее (хотя вам все равно придется иметь некоторые ограничения на то, что они могут делать, чтобы не отключать базу данных в процессе).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top