понедельник, 18 января 2021 г.

Опять Oracle

После 15-ти летнего перерыва опять пишу километровые SQL-запросы в Oracle. Ну и отстой, честно говоря...

В 2000 году, когда я выучил Oracle, ситуация очень отличалась от сегодняшней. Это был мой пропуск в буржуинство - все серьезные банки им пользовались. Причем на Западе немного сдерживала цена, а в Украине в те годы всё было как бы "бесплатно".

Альтернатив Oracle почти не было. FoxPro для бедняков, застрявших в MS-DOS. Microsoft SQL? Ну, это было несерьезно - и по функциональности, и по надежности, и по производительности. MySQL - да, очень быстрый, но в те годы был настолько урезанный, что по функционалу больше напоминал NoSQL. Postgres - в зачаточном состоянии. Единственной стоящей альтернативой был Interbase, но не для критически важных задач: там не было, например, transaction log. Да и встроенных функций маловато (впрочем, их можно было написать самому). 

Но шли годы - конкуренты не теряли времени. MS SQL, MySQL, Postgres - сейчас вполне серьезные продукты. Привык к хорошему, и очень раздражает, что в Oracle какие-то каждодневные вещи надо писать гораздо длинее. Например, почему нет EXISTS в PL/SQL (только в SQL)? Или эта проклятая проверка на NULL, где все допускают ошибки - почему бы не сделать IS DISTINCT OF, как в Postgres? Почему, когда в MERGE делаешь WHEN MATCHED, нельзя добавить там ещё дополнительное условие, как в MS SQL? Или сравнивать записи с помощью выражения (a, b, c) = (a1, b1, c1), как в Postgres?

Конечно, Oracle будет жить еще многие десятилетия. Он по-прежнему аксакал в плане надежности и производетельности. Но снизу его будут грызть младшие реляционные братья, а сверху (со стороны Big Data) - всяческие NoSQL....

3 комментария:

KEHT комментирует...

У нас в говернмент остался только Oracle Financials, всё остальное MS SQL. Postrgres я активно пытаюсь "убить" у себя везде, FoxPro уже "убил" успешно.

Z комментирует...

На мой взгляд, MS SQL уже если не превзошёл Oracle, то уж точно догнал. И по производительности и по масштабируемости. Так что он уже давно не младший брат :)
Если бы у меня был выбор писать ли новое приложение на MS SQL, MySQL, Postgres, Oracle, SQLite, DB2 или ещё на какой-то приблуде, я бы в 99 случаев из 100 выбрал MS SQL. Оставшийся 1% я бы отдал MySQL (а точнее MariaDB последней версии) но только потому что большинство дешевых хостеров поддерживают его, а не MSSQL.

Valik комментирует...

Мне кажется, что Oracle все же превосходит MS SQL кое в чем: больше наворотов с транзакциями и индексами, кластерами и восстановлением после сбоев. Ну, и он же под Linux изначально работал, хотя в наше время и Windows тоже вполне годится для серверов. Т.е. при работе с очень большими или очень критичными базами данных Oracle теоретически может лучше... но только если найдется дорогой и опытный человек, который потратит кучу времени и правильно все настроит и напишет.

Другое дело, что если у тебя гигантский объем данных или сверх-требования по производительности или доступности, то стоит задуматься, а подходят ли тебя вообще реляционные базы? Может, лучше что-то natively distributed, типа Cassandra? Как иногда на собеседовани по C# начинают задавать вопросы типа векторизации или работы с ОЗУ напрямую. А я тогда их спрашиваю: "Если у вас такие жесткие требования к производительности, так может, надо просто перейти на C++ и не мучаться?"

Ratings by outbrain