- PVSM.RU - https://www.pvsm.ru -

Я не буду учить твой Garbage Query Language

Я не буду учить твой Garbage Query Language - 1

Это будет немного напыщенная речь, но меня действительно раздражает софт, в котором люди пытаются изобрести очередной собственный язык запросов. У нас уже есть триллион различных ORM, еще триллион баз данных с собственным языком запросов каждая, и еще триллион SaaS-продуктов, для доступа к которым нужно освоить какой-нибудь очередной DSL, которые они придумали.

Верните мне мой SQL обратно. Это язык понятный каждому, существует аж с 70-х и за это время успел стать стандартом. Он прост в чтении и может использоваться кем угодно, от бизнеса до инженеров.

Однако вместо этого мне приходится изучать целый ворох разных "garbage query language", потому что люди по-прежнему пытаются изобрести колесо заново.

Начнем с ORM. Их основная фича — это сокращение времени разработки. Но вместо того, чтобы писать понятный всем SQL, мне приходится штудировать документацию конкретного ORM, чтобы выяснить, как писать для нее мои запросы. Кроме того, мне приходится тратить время на отладку, выяснять почему этот ORM перевел мой запрос в какой-то чудовищный SQL, который объединяет 17 таблиц, используя полное их сканирование. Вместо того, чтобы придерживаться стандартного SQL, где достаточно легко рассуждать об эффективности ("старайтесь использовать в предикатах индексированные столбцы", "не перебарщивайте с join'ами в одном запросе" и пр.), мне приходится иметь дело с дополнительным мутным слоем, который скрывает оригинальный SQL-запрос. В конечном итоге вы останетесь с распухшими классами данных более высокого уровня, вместо того чтобы иметь дело с простыми для понимания и обработки структурами БД.

Не говоря уже о том, что существует около пяти тысяч ORM, поэтому вместо изучения SQL один раз я должен изучить 34 разных ORM. Это не значит, что люди изучают ORM, это значит, что они просто не изучают SQL.

А еще все эти продукты SaaS. Я просто выбрал несколько из стека моей компании:

  • Splunk — SPL [1]
  • Mixpanel — JQL [2]
  • Rollbar — RQL [3]
  • New Relic — NRQL [4]
  • Adwords — AWQL [5]

Что может быть хуже, чем свалка данных? Свалка данных, которая изобретает свой собственный язык запросов.

Справедливости ради следует сказать, что некоторые из таких запросов все-таки являются SQL-like или, по крайней мере, претендуют на эту роль, но с собственными причудами, которые заставляют меня отбросить все, что я знал о SQL ранее. Иногда до такой степени, что это эти прошлые знания могут оказаться практически бесполезными.

Кроме того, каждая база данных, также старается заново изобрести язык запросов. У Mongo есть свой ужасный язык запросов [6], который я никогда не понимал, у Lucene свой [7] и т.д.

Что я прошу? На самом деле не много:

  1. Каждый SaaS-продукт должен предоставлять возможность скопировать все данные в мою собственную SQL БД (в моем случае Postgresql/Redshift). Я не хочу использовать их DSL. Возможно, Европейский союз сможет установить это в качестве следующего требования после принятия директивы по открытым банковским услугам PSD2 [8].
  2. Необходим 30-летний мораторий на изобретение новых языков запросов.
  3. Нужно развеять миф о том, что ORM делают код чище. Переходите на сторону чистого SQL и вы получите гораздо более простое и прозрачное взаимодействие с вашей БД.

На этом все. Я понимаю, что похож на старого ворчуна, но я беру этот риск на себя.

PS

Этот пост получил достаточное количество просмотров, поэтому должен вызвать живой интерес среди публики. Следите за обсужденим на Hacker News [9] и комментариями на Reddit r / programming [10].

Автор: Максим Грамин

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/292011

Ссылки в тексте:

[1] SPL: https://www.splunk.com/en_us/resources/search-processing-language.html

[2] JQL: https://mixpanel.com/help/reference/jql

[3] RQL: https://docs.rollbar.com/docs/rql

[4] NRQL: https://docs.newrelic.com/docs/insights/nrql-new-relic-query-language/nrql-resources/nrql-syntax-components-functions

[5] AWQL: https://developers.google.com/adwords/api/docs/guides/awql

[6] ужасный язык запросов: https://docs.mongodb.com/manual/reference/sql-comparison/

[7] свой: https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

[8] открытым банковским услугам PSD2: https://en.wikipedia.org/wiki/Payment_Services_Directive

[9] обсужденим на Hacker News: https://news.ycombinator.com/item?id=17890760

[10] Reddit r / programming: https://www.reddit.com/r/programming/comments/9bxwba/i_dont_want_to_learn_your_garbage_query_language

[11] Источник: https://habr.com/post/422667/?utm_source=habrahabr&utm_medium=rss&utm_campaign=422667