Платформы ORM, используемые только для вставки / запросов только приложений

Я использую Hibernate в течение многих лет и никогда не сталкивался с проблемой, но просто понял, что большая часть моей работы связана с CRUD-подходом, где мне нужны данные, чтобы они сохранялись и изменялись по желанию.

Проблема в том, что есть люди, которые хотят создать 2 отдельных приложения: одно для массовой вставки, а другое для поиска по вставленным данным.

Поскольку в этом случае постоянство немного бесполезно, команда хочет не использовать Hibernate, а использовать необработанные запросы в приложении вставки и, возможно, что-то вроде jOOQ в приложении запросов.

Это правильный звонок? или как я могу убедить их использовать Hibernate, кроме "его моей любимой платформы orm"? Или есть даже другие решения, которые не были приняты во внимание?

4 ответа

Решение

Отказ от ответственности: я создатель jOOQ и, таким образом, этот ответ слегка предвзятый.

JOOQ был разработан именно для того случая использования, о котором говорят ваши коллеги. В вашем проекте вы используете не OLTP (CRUD), а OLAP, который во многих отношениях является очень хорошим вариантом использования jOOQ. jOOQ рекомендует использовать функции OLAP, такие как оконные функции, сводные таблицы, рекурсивные запросы, хранимые процедуры, массивы и неопубликованные массивы и т. д. jOOQ также поддерживает 13 различных баз данных со всеми тонкостями совместимости SQL, которых вы хотите избежать. Некоторые примеры:

  • Как LIMIT .. OFFSET / TOP .. START ATи т. д. пункты сопоставляются с базой данных?
  • Как связаны переменные (с или без приведения)?
  • Как поддерживаются встроенные функции?
  • Нужно ли заключать производные таблицы в скобки?

Все эти аспекты совместимости также очень хорошо освещены в Hibernate. Итак, ваш вопрос сводится к этому:

  • Хотите ли вы использовать Hibernate, который не является идеальным выбором технологии, но который вы хорошо знаете и, таким образом, можете оценить риски? Это тот путь, когда все в команде знают и любят Hibernate, и у них мало времени, чтобы изучать новые вещи.

  • Или вы хотите использовать другую структуру, которая может быть более подходящей, но вы не знаете ее хорошо и, следовательно, не можете оценить все риски? Это может быть путь, если вы единственный, кто поддерживает Hibernate, и у вас есть время, чтобы изучить новые фреймворки. Другие рамки, которые вы можете рассмотреть:

  • Или вы можете смешивать технологии и использовать Hibernate для более простых запросов и простой SQL / jOOQ / Spring / myBATIS / и т. Д. Для более сложных.

  • Или вы можете выполнять массовую обработку и запросы OLAP с помощью хранимых процедур (например, в PL/SQL, если вы используете Oracle) и позволить базе данных выполнять работу? Это может быть хорошим способом, если в вашей команде есть хороший администратор баз данных или специалист по базам данных.

Нет правильного или неправильного ответа. Но вам придется принять прагматичное решение.

Hibernate - это объектно-реляционное отображение. Если они выполняют только массовые вставки и создают отчеты по потокам необработанных данных, возможно, им не нужно никакого представления объектов. Hibernate пригодится, если им понадобится какое-то объектное представление своих данных.

Это очень возможно. Hibernate очень хорошо работает с базами данных, которые одновременно обновляются другими приложениями. Единственный недостаток - тайм-аут внутреннего кэширования в Hibernate. Это означает, что может быть небольшая задержка (пара минут) между обновлением записи в базе данных и отображением обновленных данных в Hibernate. Я считаю, что это настраивается.

Любой аргумент в пользу предпочтения Hibernate над JooQ будет одним из способов концептуализации данных приложением. Hibernate абстрагирует представление строк данных в объекты. Некоторым программистам это не нравится, и они предпочитают делать это вручную. Это может быть причиной того, что они хотят использовать JooQ, поэтому вам нужно поговорить с ними о структуре приложения.

sormula - это готовая к CRUD ORM. Вы можете смешать JDBC с сормулой. Это не делает массовые вставки, но у него есть insertAll(java.util.Collection) для вставки коллекции объектов.

Другие вопросы по тегам