Статьи

Примите SQL с CUBRID и JOOQ

Это гостевая статья Лукаса Эдера, создателя Java API с открытым исходным кодом jOOQ для безопасного моделирования SQL. Если вы разрабатываете или используете приложение с открытым исходным кодом  и хотели бы рассказать об этом миру, проект базы данных с открытым исходным кодом CUBRID  принимает гостевые посты .

Большие данные, Интернет и SQL

В последние годы компании-разработчики программного обеспечения начали привлекать миллионы до миллиардов долларов, приобретаемых крупным игроком, таким как Google, Facebook, Yahoo! или Microsoft. Очень часто предполагаемая ценность таких сделок заключается в том, что  большие данные  могут быть приобретены вместе с такими приобретениями. «Социальные»  большие данные  генерировались миллионами пользователей через Интернет. Он казался слишком большим, чтобы поместиться в классических реляционных базах данных, поэтому покупки также включали покупку проприетарных, довольно недолговечных технологий, используемых для поддержки  больших данных . Таким образом, большинство новых компаний экспериментировали с  NoSQL  в той или иной форме.

SQL, с другой стороны, прошел большой путь. SQL является очень выразительным и мощным языком, используемым для моделирования запросов к любому типу данных, хотя в основном реляционным. В то же время SQL стандартизирован и достаточно открыт. CUBRID является хорошим примером объектно-реляционной базы данных, которая сочетает в себе выразительность SQL с высокой доступностью, сегментированием и многими другими функциями, необходимыми для управления  большими данными ! Другими словами, CUBRID является доказательством того, что SQL может быть адекватной технологией для современного Интернета.

Запрос CUBRID с JOOQ

jOOQ  — это API-интерфейс Java, моделирующий SQL как внутренний предметно-ориентированный язык непосредственно в Java. Он имеет встроенный генератор кода для генерации классов Java из вашей модели базы данных. Эти сгенерированные классы могут затем использоваться для создания безопасных типов запросов SQL непосредственно в Java. Простой пример того, как это работает с CUBRID, можно увидеть в этом  уроке jOOQ CUBRID .

Идея создания свободно работающих API на Java не нова. Обычно Мартин Фаулер берет большинство кредитов за его разработки по этому вопросу . После этого появилось много подходов к созданию внутренних предметно-ориентированных языков, в основном в средах модульного тестирования (например,  JMock  и  Mockito ). Помимо  jOOQ , есть также несколько свободно распространяемых API, которые моделируют SQL как язык в Java. Они включают:

Среди вышеперечисленного, QueryDSL является единственным другим API с сопоставимой тягой к  jOOQ . В то время как QueryDSL скрывает полную выразительность SQL за  API-интерфейсом LINQesque, jOOQ полностью сосредоточен только на SQL. В отличие от любого из вышеперечисленных API абстракции SQL, jOOQ сочетает в себе следующие функции:

BNF определяет свободный API jOOQ

jOOQ использует методы следующего поколения для реализации своего свободного API. Эти методы включают формальную  нотацию BNF,  определяющую тип API и иерархию методов:

jooq-выбрать-02.png

С формальным BNF, свободный API jOOQ намного надежнее и безопаснее типов, поскольку он будет диктовать правильность синтаксиса более формальным способом, чем обычные API-интерфейсы для разработчиков.

JOOQ охватывает использование хранимых процедур

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

JOOQ охватывает использование выражений значения строки

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

SELECT * FROM t1 WHERE t1.a = (SELECT t2.a FROM t2)
-- Types must match:   ^^^^           ^^^^
 
SELECT * FROM t1 WHERE (t1.a, t1.b) IN (SELECT t2.a, t2.b FROM t2)
-- Types must match:   ^^^^^^^^^^^^            ^^^^^^^^^^
 
SELECT t1.a, t1.b FROM t1 UNION SELECT t2.a, t2.b FROM t2
--     ^^^^^^^^^^ Types must match     ^^^^^^^^^^

jOOQ будет использовать компилятор Java, чтобы помочь вам проверить вышесказанное:

select().from(t1).where(t1.a.eq(select(t2.a).from(t2));
// Type-check here: -----------------> ^^^^
 
select().from(t1).where(row(t1.a, t1.b).in(select(t2.a, t2.b).from(t2)));
// Type-check here: ----------------------------> ^^^^^^^^^^
 
select(t1.a, t1.b).from(t1).union(select(t2.a, t2.b).from(t2));
// Type-check here: -------------------> ^^^^^^^^^^

jOOQ эмулирует встроенные функции и предложения SQL

Обеспечение поддержки для простых положений SQL легко:  SELECTDISTINCTFROMJOINGROUP BYи т.д. Реализация «реальный» SQL гораздо сложнее, хотя. Возьмите приведенные выше выражения значения строки, например. В настоящее время они не поддерживаются в CUBRID, но, тем не менее, вы можете использовать их с jOOQ. jOOQ эмулирует отсутствующие функции и предложения SQL для вас, как можно увидеть  в этом синдицированном сообщении в блоге .

jOOQ предоставляет специализированный SQL для 14 основных поставщиков РСУБД

Вместо того, чтобы обобщать и абстрагировать расширенные стандартные и специфичные для поставщика функции SQL, такие как JPA и инструменты, основанные на JPA, jOOQ видит хорошие вещи в каждом элементе синтаксиса конкретного поставщика. Вы хорошо знаете свою базу данных, поэтому хотите использовать ее, а не абстрагировать.

JOOQ — это платформа

jOOQ — это гораздо больше, чем просто библиотека SQL. Например, он имеет очень полезную  консоль jOOQ , которая помогает вам отлаживать и профилировать сгенерированные jOOQ операторы SQL в любой среде без необходимости использования дорогих сторонних инструментов:

jooq-консоль-01.png

Консоль jOOQ также включает инструменты редактирования SQL на лету, а также возможность точек останова для расширенной отладки.

Больше возможностей сравнения

Больше сравнений функций можно найти здесь,  в этом посте .

Быть продуктивным с JOOQ

jOOQ — это видение, где SQL снова имеет значение для разработчика Java. В то время как некоторые называют ORM Вьетнамом компьютерных наук , jOOQ — это  мирный договор между SQL и Java . Используя вышеупомянутое и многие другие функции, вы можете снова работать продуктивно при написании высокопроизводительного специализированного SQL-кода для вашей любимой базы данных непосредственно в Java, скомпилированной вашим компилятором Java.

Автор: Лукас Эдер, создатель jOOQ. Следуйте за ним в Твиттере  @JavaOOQ .

Я — разработчик энтузиастов Java и SQL, в настоящее время работающий по контракту с Adobe Systems в Базеле, Швейцария Происходя из области электронного банкинга, я имею большой опыт работы с Oracle SQL. Я создатель jOOQ, всеобъемлющей библиотеки SQL для Java.

CUBRID 8.4.3 - быстрее и стабильнее