LINUX.ORG.RU

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

 ,


0

5

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

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

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

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

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

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

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

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

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

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

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

Еще один важный критерий – это параллельная работа с данными.

Если транзакции не нужны, то на файлах работает лучше. Я же приводил пример: https://habr.com/ru/companies/softpoint/articles/941666/ — на файлах легко можно читать данные и писать в конец файла, а SQLite стопорит запись.

Атомарность на файлах делается достаточно легко. Устойчивость тоже. А вот остальные две буквы из ACID уже сложнее. Но если база достаточно мала, то строго последовательное выполнение транзакций на сервере приложений, где необходимые данные в памяти, может оказаться быстрее, чем параллельное выполнение на SQL.

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

новый паркет лучше старой fs

Бекман программист навигатор :)

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

а Parquet лучше!

ваще структуры(хранения) данных

по факту бд это персистентные данные

и да sql предназначен для интерактивной работы

то что всякие expect «технологии» позволяют автоматизировать текстовые интерактивности и прИводит к «потерям тактов» к которым так болезненен Croco

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

кто пишет историю тот и победитель

знаменитая Победа друг друга промеж фараона и переднеазиата

Кадеш битва ага

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

К слову сказать, профессиональные историки много клевали покойного математика Фоменко, который к несчастью для себя полез в историю,

Не думаю, что историки «клеветали» на Фоменко. Тут ситуация точно такая-же как с преподами и борьбой с Python. Берется ограниченный набор фактов и из этого набора фактов формируется логически стройная умозрительная теория.

  1. Программы должны работать быстро.
  2. Быстро работают программы написанные на С, на Python работает медленно.
  3. Python не нужен, так как он работает медленно.

Вуаля! Логически стройная теория. Но в этой теории не учтено множество нюансов. И при этом данная теория в подобном изложении очень хорошо заходит обывателям. Обыватель даже не понимает где на самом деле должны быть быстро: в разработке или в выполнении.

На сколько мне известно, примерно то же самое делал Фоменко. Брал усеченный объем фактов, на основе этих фактов конструировал внутренне не противоречивую логичную математическую модель. Как в примере C и Python. Что вызывало раздражение у историков которые ворочали полным объемом фактов.

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

так упасть-то могло и не в «мухосранске». а работало оно везде, от мухосранска до нерезиновска. на любых системах. и это было требованием к софту.

Так они и в Москве падают. Внезапно выпавшее отделение это не КАТАСТРОФА, это ежедневная рутина.

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

Мой сарказм исключительно в сторону твоего завышенного ЧСВ.

anonymous
()
Ответ на: комментарий от lbvf50txt

Фоменку суперпаразит но не над Историей как наукой

а историей как школьным предметом в котором примеры разных стран показывают можно ваще про берега забыть ибо школию любой гарипотер зайдёт на уря

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

машкода как антидот Сфилии

очень позновательно когда слабости пифона на фоне Сяшки оказываются неустранимыми преимуществами (b)Cpl над кодами - особенно в исполнения какой фонатки из катера - не нравится мне каруза мойша напел

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

машкода как антидот Сфилии

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

Эта мода уже прошла. Раньше место Python занимал С, а место C занимал Assembler, еще раньше «настоящие программисты» писали в двоичном коде.

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

Фоменку суперпаразит но не над Историей как наукой

С работами Фоменко я знаком шапочно. Возможно его научный эксперимент, который изначально был научной гипотезой, был переведен в формат «бульварного чтива». Сначала это был инструмент исторического анализа, а потом, на его основе написали десятки томов псевдо-научного фентези.

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

там «забавная» спайка Носовский-Каспаров - ваще реально версаль заверсалили

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

Если транзакции не нужны, то на файлах работает лучше.

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

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

Не надо питухон с С сравнивать. Ближайшее, с чем его можно сравнить - nodejs. Хотя, синтаксис змеюки порвал все мыслимые и немыслимые шаблоны. Даже Кулиньксяо такое не снилось…

anonymous
()
Ответ на: комментарий от lbvf50txt

Не тот ли это Фоменко, у которого «атланты» болгарками камни для египетских пирамид выпиливали?

Это завихон даже покруче, чем у Ксанфомалити…

anonymous
()
Ответ на: комментарий от lbvf50txt

а потом, на его основе написали десятки томов псевдо-научного фентези.

Так суть проблемы в том, что школьная история тоже является псевдо-научным фентези. Потому что для школьников не подходит научный подход с ворохом разрозненных известных фактов и полудюжиной гипотез по отдельным частям истории. Поверх накладывается политическая повестка. И результат пишется в школьный учебник. А иллюстрации к этому фэнтези совсем фэнтезийные: https://cs12.pikabu.ru/post_img/big/2021/04/03/5/1617431095180249544.png

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

У дочки в прошлом году история началась (5 класс). Я дико возмущался, что историю древности они «проходили» по шумерским, финикийским, еврейским и греческим СКАЗКАМ! Пипец…

anonymous
()
Ответ на: комментарий от lbvf50txt

тэйк (в контексте вышеприведённых исторических вторичных источников вокруг cs/ee/информатики)

что есть железо - оно даёт вычь-мощь достаточно быстро оказывается что необходимости манипулировать кварково-глюоным бульоном нет - ибо экономика та ещё продажная барышня - положительная обратная возникает когда удешевление вычь-мощи используется в сервисе - и не нужны только phD достаточно Сшколиё

прост даже Algol был не догмой на скрижалях - Вон plex Муратори который ща зафорсил не взлетел ибо опоздали - как и форт - который прийди он в гойлову Бэкосу

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

а ни фига исторически сначала появились интерпретаторы как расширение рантайма и ток-мо через пятилетку устоялас копуляция в целевое железо

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

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

Возьми любой http-сервер или прокси-сервер. Он обеспечивает работу с сервером данных (которые хранятся в виде файлов) с сотен тысяч компьютеров в параллель. А если вместо файловой системы в качестве хранилища данных для apache или squid сделать Oracle или SQLite, то скорость работы упадёт.

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

А если вместо файловой системы в качестве хранилища данных для apache или squid сделать Oracle или SQLite, то скорость работы упадёт.

Безусловно, так как архитектура хранения и доступ к данным ориентированная на таблицы, …, да и много иных причин почему медленнее будет работать.
А если попробуете протоколы WWW использовать для обработки таблиц, то иной эффект будет.

anonymous
()
Ответ на: комментарий от No

В 80-х частенько «знатоки» утверждали, что файловые системы это по сути базы данных …

anonymous
()
Ответ на: комментарий от No

Многие структуры хранения данных ориентированы на уменьшение количества обращений к данным, хранящимся в файлах.
Что касаемо SQLite, то он улучшает скорость доступа для частных случаев хранения данных.
В целом они конечно не умеет эффективно хранить и иметь доступ к данным отличным от таблиц.
Да он для этого и не предназначен …

anonymous
()
Ответ на: комментарий от No

Многие структуры хранения данных ориентированы на уменьшение количества обращений к данным, хранящимся в файлах.
Что касаемо SQLite, то он улучшает скорость доступа для частных случаев хранения данных.
В целом они конечно не умеет эффективно хранить и иметь доступ к данным отличным от таблиц.
Да он для этого и не предназначен …

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

Возьми любой http-сервер или прокси-сервер.

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

А если вместо файловой системы в качестве хранилища данных для apache или squid сделать Oracle или SQLite, то скорость работы упадёт.

Если работа идет только на отдачу статического контента – то да. Только вот суть СУБД в том, чтобы работать не со статическим контентом.

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

100млн товаров? Интересно что за ниша.

anonymous
()
Ответ на: комментарий от eao197

Только не в виде SQL-сервера, а в виде какого-то другого сервера.

Так в этом смысле и файл является СУБД. Столяров писал про СУБД в виде отдельной службы. Я писал про СУБД с SQL-интерфейсом.

Если работа идет только на отдачу статического контента – то да. Только вот суть СУБД в том, чтобы работать не со статическим контентом.

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

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

Кстати, HTTP PUT отлично работает с файлами и не требует SQL СУБД.

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

Так в этом смысле и файл является СУБД.

Да что вы говорите! Здесь вот прямо и «система», и «управления», и даже «база»…

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

facepalm.ico

lavrov.jpg

Ладно, степень тупизны здесь и без моего участия здесь стремится к бесконечности.

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

Да что вы говорите! Здесь вот прямо и «система», и «управления», и даже «база»…

Чем протокол POSIX принципиально отличается от протокола HTTP? Или где «система» и «база» внутри HTTP-сервера?

Ладно, степень тупизны здесь и без моего участия здесь стремится к бесконечности.

То есть Вы считаете, что я неправ, и если будете писать компьютерную стрелялку, все данные будете хранить в SQL СУБД?

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

eao197

имхо

Бахман не Кодд не Дейта не Джеймс Грей, США («Jim» (James) N. Gray; род. 1944){транзакцио!}

http://rkka21.ru/docs/turing-award/cb1973r.pdf

http://rkka21.ru/docs/turing-award/cb1973e.pdf

http://rkka21.ru/docs/turing-award/ec1981r.pdf

http://rkka21.ru/docs/turing-award/ec1981e.pdf

https://amturing.acm.org/award_winners/gray_3649936.cfm

любопытней почему Кроко считает использование локальной фс в монопольном режиме естественным а суБД с мультидоступом и по факту блокировками позволяющими координацию многозадачности не естественным

https://amturing.acm.org/byyear.cfm

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

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

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

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

Чем протокол POSIX принципиально отличается от протокола HTTP?

Я, к сожалению, не знаю, что такое протокол POSIX. Про описанные в POSIX-е вызовы для работы с файлами знаю, про какой-то протокол – нет.

Когда вы отдаете HTTP GET запрос, в котором в заголовках указываете какую часть хотите прочитать – это мне понятно. Когда аналогичным образом через HTTP UPDATE указываете какую часть хотите обновить – это тоже понятно. Как некий «сервер» за фасадом HTTP будет разруливать одновременные обращения GET/UPDATE к одним и тем же частям одного и того же файла – тоже можно понять.

А вот как эту всю хрень делать через POSIX-овские вызовы для файлов, которые лежат на удаленном сервере, а к нему обращаются клиенты (да еще и с разных платформ) – вот это вопрос.

Плюс это мы еще разговариваем о неструктурированной и неиндексированной информации.

Или где «система» и «база» внутри HTTP-сервера?

Она в обработчиках HTTP GET/PUT/UPDATE/DELETE/etc.

То есть Вы считаете, что я неправ, и если будете писать компьютерную стрелялку, все данные будете хранить в SQL СУБД?

Я считаю что вы неправы в утвержении «СУБД всегда работает с редко изменяющимся контентом»

PS. Кроме того, я категорически против ассоциировать термин СУБД исключительно с SQL базами данных. ЕМНИП, сам термин СУБД появился задолго до SEQUEL и SQL.

eao197 ★★★★★
()

Модераторы, пожайлуста перенесите эту тему в Талкс.

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

почему Кроко считает использование локальной фс в монопольном режиме естественным а суБД с мультидоступом и по факту блокировками позволяющими координацию многозадачности не естественным

Потому что локальная фс часть ОС, а СУБД нет.

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

Я, к сожалению, не знаю, что такое протокол POSIX. Про описанные в POSIX-е вызовы для работы с файлами знаю, про какой-то протокол – нет.

Так это он и есть. Протокол = «это набор правил, по которым устройства и программы обмениваются данными». Вот в POSIX есть open, close, seek, read, write. А в HTTP есть GET, PUT, PATCH.

POSIX-овские вызовы для файлов, которые лежат на удаленном сервере

POSIX изначально определён не для удалённого сервера, а для локального. Впрочем, реализация POSIX для удалённого есть: называется NFS.

Она в обработчиках HTTP GET/PUT/UPDATE/DELETE/etc.

Тогда для POSIX она в обработчиках open, close, seek, read, write.

Я считаю что вы неправы в утвержении «СУБД всегда работает с редко изменяющимся контентом»

Тогда приведите один контрпример для SQL СУБД.

PS. Кроме того, я категорически против ассоциировать термин СУБД исключительно с SQL базами данных. ЕМНИП, сам термин СУБД появился задолго до SEQUEL и SQL.

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

Также, как понятие «объект»: в узком смысле это нечто с полями и методами, что можно создать из описания класса, а в широком это что угодно, с чем можно как-то работать.

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

весь веб сейчас крутится вокруг stateless

Это просто мода. И как раз пример того, против чего протестует Столяров.

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

Так это он и есть. Протокол = «это набор правил, по которым устройства и программы обмениваются данными». Вот в POSIX есть open, close, seek, read, write.

Протокол здесь где?

POSIX изначально определён не для удалённого сервера, а для локального.

Надо же, я вам на это прозначно намекал, и вы даже это заметили.

Впрочем, реализация POSIX для удалённого есть: называется NFS.

И насколько удобно на NFS нескольким клиентам конкурентно работать в одним и тем же фрагментом файла?

Тогда для POSIX она в обработчиках open, close, seek, read, write.

Расскажите мне как на open/close/seek/read/write обеспечить конкурентную работу с куском файла для нескольких клиентов.

Тогда приведите один контрпример для SQL СУБД.

Практически в прошлой жизни отвечал за SMS/USSD шлюз. В этом шлюзе исходящие сообщения записывались в SQL СУБД, при этом их статус регулярно и оперативно обновлялся, а после завершения доставки информация о полностью обслуженных сообщениях удалялась.

Все это дело можно было бы попробовать хранить полностью в ОП (собственно, с этого и начиналось), но тогда остро встают вопросы надежности. А так же балансировки нагрузки (когда сообщения лежат в табличке БД, то несколько рабочих серверов могут разбирать разные их наборы для доставки, а если какой-то из рабочих серверов затыкается или выходит из строя, то оставшиеся объемы обрабатывают другие сервера).

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

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

anonymous
()
Ответ на: комментарий от kaldeon

Почему не 70 или 80?

Не вдавался в подробности. Верхний лимит 80, туда-сюда практически запомнилось 75. Сути не меняет.

P.S. У Столярова есть целая книга по правилам оформления кода, там этот вопрос детально разбирается. Еще вроде в начале Трехтомника тоже есть разбор этого вопроса.

Сейчас я у LLM поспрашивал, 80 символов как ширина текста пошла с перфокарт и телетайпов. Ширина 70+ для того, чтоб оставлять место под отступы.

P.P.S. Как ни крути - Столяров блестящий методист. Но со своими загонами в области современных инструментов. Если говорить о самом начале, о первых базовых принципах, то у Столярова практически нет равных. А вот дальше начинается непотребство. Как следствие отношение неоднозначное до крайности.

Пока он объясняет базовые принципы устройства DNS, IP, маршрутизации, работы в Shell, принципов многозадачности на уровне CPU, раскрывает понятие драйвера, общую культуру программирования. Хочется аплодировать стоя.

Как только он начинает рассуждать о бизнесе, собеседованиях, SQL, Python - тут все настолько же плохо, как было хорошо в первой части объяснений.

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

Это всё равно что делать форматирование кода задачей рисовальщика. Автоматика должна быть предсказуемой.

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

Это всё равно что делать форматирование кода задачей рисовальщика. Автоматика должна быть предсказуемой.

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

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

«А всё таки она вертится».

anonymous
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)