LINUX.ORG.RU

Его крокейшество о вредности СУБД, если архитектурно она для программ, а не живого человека

 ,


0

7

Давно уже что-то про Столярова Croco ничего не было =) А тут он повод недавно дал, расписав почему считает недопустимым использовать СУБД в архитектуре при проектировании софта. То есть, если для каких-то программ нужно хранение данных, его надо индивидуально под программу делать, а не подключать базы данных.

Можно обсудить. В принципе я сам не люблю для локальных данных применять базы данных, часто достаточно просто текстовых файлов и это даже надежно и быстро. Но в целом каким-то луддизмом отдает. Его сообщение ниже:

http://www.stolyarov.info/guestbook#cmt97

==============

Я придерживаюсь принципа несколько более узкого: недопустимо создание, распространение и использовние программ, для работы которых требуется СУБД.

Причины можно назвать, например, такие:

  1. СУБД — это лишняя внешняя зависимость, при том что вообще любые внешние зависимости суть хамство в отношении пользователей и мейнтейнеров;
  2. СУБД требует трудозатрат на установку, настройку и дальнейшее администрирование;
  3. СУБД способна упасть (и да, падает намного чаще, чем, скажем, тот же апач — вообще пока мои сайты жили на «традиционной» CMSке, именно СУБД была причиной всех случаев downtime моих сайтов, за исключением одного, когда на сервере физически осыпался жёсткий диск);
  4. СУБД требует от пользователя постоянно обновлять навыки, которые, возможно, больше ни для чего не нужны;
  5. СУБД хранит информацию пользователя в неочевидном для него виде; этим грешат не только СУБД, конечно, но СУБД мало того что хранят всё в бинарных файлах, которые без самой СУБД даже думать нечего разобрать, они ещё и вводят дополнительный слой хаотизации в виде схемы БД, провоцируя разработчиков софта на внедрение «решений», единственное «описание» которых остаётся в голове у автора;
  6. СУБД требует изрядных вычислительных мощностей и крадёт (а вовсе не повышает, как почему-то многие уверены) производительность.

Я, заметим, не рискну утверждать, что СУБД как сущность вообще никогда не может ни для чего применяться. Тут вопрос в том, кто на ком стоял: если главной целью является база данных как таковая, то есть вот имеется какой-то значительный объём разнородной, но при этом взаимосвязанной информации и стоит задача обеспечить его хранение и в нём поиск, причём никто заранее не знает, какие именно задачи будут решаться на этом массиве информации, какие именно поисковые запросы будут делаться и вот это вот всё, то да, СУБД вполне может оказаться адекватным решением, и даже для работы с ней могут создаваться вспомогательные программки. Это, конечно, не оправдывает существования языка SQL, который в любых его проявлениях представляет собой надругательство над здравым смыслом, но в целом СУБД как вид софта существовать, наверное, всё-таки может — но лишь в случаях, когда либо вообще нет никаких программ кроме неё самой, либо программы делаются для неё, а не она сама поддерживается для работы какой-то программы.

Всё это можно выразить и короче: СУБД, по-видимому, вполне имеет право на существование в ситуации, когда основным способом работы с ней будет непосредственное вбивание запросов на её языке запросов живым человеком. То есть когда именно вот это — основное, а всё остальное вспомогательное. В подавляющем большинстве случаев мы видим прямо противоположное: с СУБД как-то там общается некая программа (намного реже — больше одной программы, и это уже пограничный случай), а живой человек делает запросы либо только в рамках обслуживания всей системы, либо вообще никогда.

Когда же пишется некая программа, предполагающая применение для конкретных задач (а программы иначе, собственно, и не пишутся), и данные возникают исходя из этих задач, а не наоборот, то за саму идею задействования внешней СУБД нужно убивать на месте. Сугубо из санитарных соображений.

★★★★★
Ответ на: комментарий от firkax

Эм, нет. Конкурентный доступ к данным как раз реализуется за 5 минут своим кодом.

Вообще-то поддержание транзакционной целостности данных при одновременном доступе к ним - это чуть ли не самая сложная часть у СУБД.

Простейший подход с исключительной блокировкой слишком неудобен уже при совсем небольшом количестве пользователей.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от firkax

Я даже не сомневался, что ты опять будешь нести чушь.

Значимых преимущества СУБД ровно эти два, и оба они относятся исключительно к ускорению разработки.

Нет, не исключительно. Помимо скорости разработки, всегда есть вероятность совершить множество ошибок в реализации. А еще, поддержка самописного решения банально дороже в сопровождении. Говоря о скорости, ты занимаешься софистикой. Всё всегда сводится к скорости, вопрос в промежуточных и последующих проблемах.

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

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 2)
Ответ на: комментарий от liksys

Я даже не сомневался, что ты опять будешь нести чушь.

Да нет, чушь несёшь ты, как всегда.

А еще, поддержка самописного решения банально дороже в сопровождении.

Это и есть скорость разработки. Кто-то потратил и оплатил 10 часов разработки, а кто-то 100.

Всё всегда сводится к скорости, вопрос в промежуточных и последующих проблемах.

Нет, не всё. Да и скорость разная бывает - скорость разработки это одно, скорость работы - уже другое, и оно обычно важнее (в некоторых рамках).

firkax ★★★★★
()
Ответ на: комментарий от firkax

Да нет, чушь несёшь ты, как всегда.

Да нет, дружочек. Это твоя прерогатива, как мы с тобой выясняем каждый раз, но ты об этом постоянно забываешь. Ну ничего, я напомню, мне не лень.

Это и есть скорость разработки. Кто-то потратил и оплатил 10 часов разработки, а кто-то 100.

Нет. Помимо часов, есть еще уровень квалификации сотрудника, от которого зарплата всё так же зависит. Сто часов джуна не равно десяти часам сеньера. После завершения основной разработки последует период сопровождения, в котором стоимость будет в прямой зависимости от количества велосипедов и качества изначального кода.

Ты о коммерческой разработке не слышал, поэтому вот, делюсь опытом. Учись, студент, мотай на ус.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от kaldeon

То не оскорбление, просто констатация факта. Для меня вообще оскорблением не является то что никак не характеризует мою личность то есть какие-то неверные суждения. Я просто знаю что я лучше остальных, и что крысы говорят за спиной кисы меня мало волнует… А у Столярова вообще мания величия ему срать скорее всего вдвойне

rtxtxtrx ★★★
()
Ответ на: комментарий от firkax

Опыт идиотов мне не нужен, делись в другом месте.

Ты вместо того, чтобы дерзить, лучше бы молчал и внимал, пламенный юноша. Сошел бы за умного. А так - как обычно, только чувственные выпады и оскорбления. Ничего нового.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 4)
Ответ на: комментарий от vbr

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

Я давно наблюдаю за тем, что он и ему пишут и пришел к кое-каким выводам. Андрей Викторович может признать свою неправоту, но только по каким-то частным вопросам. Опечатка в книге, даже баг в программе, может не знать какой-то функции в DE и признать это, спросить как что-то сделать даже может.

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

Например, он решил, что все «комитетское» в ЯП - уродство, не имеющее права на существование и бесполезно ему доказывать, что C99 и новее, также как и C++98 и новее имеют не только сомнительные моменты, но полезные фичи.

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

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

praseodim ★★★★★
() автор топика
Ответ на: комментарий от vbr

В любом смартфоне десятки sqlite баз данных, работа с которыми ведётся через тот самый SQL. Найти динамический веб-сайт без СУБД - это постараться надо.

Вот ты и привёл аргументы в пользу позиции Столярова.

spqr ★★★
()
Ответ на: комментарий от praseodim

Вообще-то поддержание транзакционной целостности данных при одновременном доступе к ним - это чуть ли не самая сложная часть у СУБД.

Потому что эту целостность надо поддерживать для произвольного кода пользователя.

Если известно, как твои данные в твоей программе используются, то конкурентный доступ делается намного эффективнее, чем его можно сделать на СУБД. Например, упомянутый выше пример журнала событий, к которому должен быть конкурентный доступ множества читателей (с разными сложными запросами) и одновременно одного писателя новых событий. На файле тривиально, на SQLite программисты 1С не осилили. Или кольцевой буфер: в ядре линукса он даже безблокировочный. На таблице SQL СУБД сделать аналог почти нереально.

monk ★★★★★
()
Ответ на: комментарий от liksys

А еще, поддержка самописного решения банально дороже в сопровождении.

Так не надо его делать совсем самописным. Есть структуры языка программирования, есть множество библиотек к нему. И разнообразие возможных алгоритмов структур и алгоритмов данных гораздо шире, чем можно сделать, пользуясь исключительно SQL.

Не думаю, что сопровождать Erlang + Mnesia дороже, чем Erlang + epgsql + Postgres. А если ещё и добавить требование распределённости БД, то сопровождение Postgres уже станет гораздо дороже.

monk ★★★★★
()
Ответ на: комментарий от monk

Не думаю, что сопровождать Erlang + Mnesia дороже, чем Erlang + epgsql + Postgres.

Это не имеет отношения к теме. Использование мнезии уже само по себе не является велосипедостроением, как и использование какого-нибудь зукипера.

Пациенты велосипедостроительного диспансера обсуждали в первую очередь случай Erlang vs Erlang + Mnesia vs Erlang + epgsql + Postgres.

liksys ★★★★
()
Ответ на: комментарий от liksys

Это не имеет отношения к теме. Использование мнезии уже само по себе не является велосипедостроением, как и использование какого-нибудь зукипера.

Столяров разве призывает полностью отказаться от библиотек? Вроде только от СУБД.

Пациенты велосипедостроительного диспансера обсуждали в первую очередь случай Erlang vs Erlang + Mnesia vs Erlang + epgsql + Postgres.

А я продвигаю свою точку зрения. Что SQL СУБД почти всегда являются злом и вместо них надо использовать средства, предоставляемые языком программирования (разумеется, с учётом библиотек). Исключение: неизвестные заранее запросы и ACID. Но в этом случае лучше дать пользователю доступ к SQL, чем писать прослойку, предоставляющую пользователю ограниченное подмножество этого SQL.

monk ★★★★★
()
Ответ на: комментарий от monk

Столяров разве призывает полностью отказаться от библиотек? Вроде только от СУБД.

Столяров призывает отказаться от всего, чего он не знает, а не от СУБД или библиотек. Я вообще обсуждал пациента выше, который, как обычно, нагенерил чепухи.

Что SQL СУБД почти всегда являются злом

СУБД решают огромное количество типовых проблем. Если они есть в твоем проекте - берешь СУБД и не мучаешься. Если именно для тебя СУБД являются злом, то это значит, что у тебя просто перекос в сторону таких задач (или некоторая предвзятость).

liksys ★★★★
()
Ответ на: комментарий от monk

Что SQL СУБД почти всегда являются злом и вместо них надо использовать средства, предоставляемые языком программирования

Я не понимаю в какой реальности вы живёте, если почти весь интернет работает на SQL СУБД, включая этот сайт.

X512 ★★★★★
()
Ответ на: комментарий от X512

Я не понимаю в какой реальности вы живёте, если почти весь интернет работает на SQL СУБД, включая этот сайт.

Также как весь почти весь мир пользуется Windows, включая многих пользователей этого сайта. SQL СУБД как и Windows это «привычное решение». Такое решение имеет недостатки перед правильным, но когда лень выбирать и в принципе неважно качество результата, а просто нужен какой-то результат (где-то хранить данные в случае СУБД и как-то работать на компьютере в случае Windows), то выбирается именно привычное.

monk ★★★★★
()
Ответ на: комментарий от liksys

СУБД решают огромное количество типовых проблем. Если они есть в твоем проекте - берешь СУБД и не мучаешься.

С этим согласен. Беда в том, что СУБД берут просто по умолчанию почти всегда, когда надо хранить какие-то данные.

Также как с выбором ОС/графического интерфейса/протокола передачи/формата данных. Windows/Electron/HTTP/JSON берут не потому, что они лучше подходят под задачу, а потому что это первое, что приходит в голову.

monk ★★★★★
()
Ответ на: комментарий от monk

CУБД это менеджер(внешней)памяти

забавная загагулина что современные «учебники» sql|nosql редко когда ныряют дальше индексов

нормальные учебники по базам данных же тщательно разбирают несколько частей:

структуры хранения данных - всякие B&*(^%&$ деревья; различные индексы и методы кеширования вот этого всего для увеличение производительности

методы доступа — sql тут важная веха ибо унификация и инкапсуляция(не полная :( ) предыдущих структур

вопросы транзакций и распределённости и прочей хурмы маштабирования(вертикальной; горизонтальной и наискосок)

и да субд это частный случай ос&фс

в целом слой sql оказывается излишним если клиентское приложение может себе позволить копошится с api структур хранения данных

тока вопрос - а в каких областях это лучшее roi чем общепринятое взаимодействие через sql :)

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

лучшее roi

К roi технологии вообще почти перпендикулярны. Там маркетинг рулит. Oracle разрекламировал SQL, приложение с SQL стало автоматически больше цениться в глазах пользователя (даже если тормозило как 1С 7.7 SQL). Сейчас рекламируют микросервисы, приложение с микросервисами ценится больше. Начнут рекламировать хранение в облаке и поиск через запросы к ИИ, будут хранить для большего roi так.

monk ★★★★★
()
Ответ на: комментарий от Chiffchaff

Киньте кто нибудь ссылкой на эту статью, если есть.

cdtemp
()
Ответ на: комментарий от LongLiveUbuntu

Если вы можете сделать что-то не на уровне БД, делайте это не на уровне БД.

vbr ★★★★★
()
Ответ на: комментарий от monk

Windows/Electron/HTTP/JSON

Смешались в кучу кони, люди.

Windows берут тогда, когда есть определенная аудитория, для которой предназначен продукт.

Электрон берут тогда, когда в компании много жаваскриптеров, ради экономии или легкой кроссплатформенности.

HTTP/JSON берут тогда, когда есть хотя бы небольшая вероятность коммуникации с браузером, даже в случае отладки.

Ты просто ищешь удобные примеры для подтверждения своей манятеории, а факт же в том, что большинство решаемых в айти задач - вполне типовые, и типовая БД под них подходит просто идеально.

liksys ★★★★
()
Ответ на: комментарий от liksys

Электрон берут тогда, когда в компании много жаваскриптеров, ради экономии или легкой кроссплатформенности.

Это настолько же верно, как то, что SQL берут тогда, когда в компании много DBA и SQL-программистов. Ради экономии или легкой кроссплатформенности.

факт же в том, что большинство решаемых в айти задач - вполне типовые, и типовая БД под них подходит просто идеально.

Для тех задач уже есть типовые библиотеки, использующие СУБД. А вот когда выбирают решение с СУБД для новой задачи, это часто аналог «выбору» Windows/Electron в качестве интерфейса и микросервисов с обменом JSON по HTTP в качестве движка для управления списком просмотренных фильмов (который, конечно же, хранится в СУБД).

monk ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.