LINUX.ORG.RU

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

 ,


0

3

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

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

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

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

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

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

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

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

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

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

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

да у него вообще много перлов. и не только на тему программирования

Я его знаю только по поводу бреда в адрес C++. Но в адрес C++ столько фигни говорят, что это как бы не показатель.

Тут же явно что-то нездоровое.

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

ууу, как всё запущено! там либо вещества, либо уже от возраста крыша поехала. хотя 50 лет - какой там возраст? но у некоторых из-за особенностей наследственности даже в 50 лет начинаются проблемы с интеллектом. кстати, шизофрения часто манифестирует в момент, когда человек выходит на пенсию.

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

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

Вроде бы обратное читал - если до late-20s не манифестировала, то скорее всего пронесло. У пенсионеров тама деменция всяческая да альцгеймер)

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

БД к программированию слабо относится

Конечно же БД к программированию очень сильно относится.

SQL это язык программирования. Специфический, но тем он и интересен. Пролог тоже специфический. РСУБД это реализация этого языка программирования.

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

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

Если всё это делать надо эффективно, по сути тебе просто придётся изобрести что-то вроде своей уникальной СУБД. Так не проще ли взять готовую тогда?

Я могу, конечно, ошибаться, но я предполагаю, что Столярову интересно переизобретать велосипеды. В его проектах можно встретить те же реализации связного списка там и сям, хотя казалось бы - на C++ это уж можно реализовать один раз и переиспользовать.

Если рассматривать в этом контексте, то всё становится понятно. Очевидно, что любую СУБД можно реализовать в своём проекте. Частично, конечно. Причём в этом есть смысл, т.к. когда тебе от СУБД нужно конкретное подмножество функций, когда ты знаешь железо, на котором работает твоя СУБД, вполне может случиться, что ты реализуешь всё эффективней, чем это делает универсальный продукт.

К примеру СУБД проводит лексический анализ SQL запроса, строит план выполнения, использует накопленную статистику, выбирает индексы, которые разумно с её точки зрения использовать. Но если ты всё пишешь сам, тебе не нужен никакой SQL. Может быть у тебя ткаой простой запрос, что ты просто сам в индексе вытащишь смещение, и по смещению вытащишь данные. Тебе не нужно парсить SQL. Тебе не нужно строить план выполнения запроса, он у тебя уже в коде. Тебе не нужно обеспечивать мультиверсионность или блокировки, у тебя, например, смартфон с одним пользователем по определению.

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

А это чудо правда учило студентов в МГУ?

Да, у меня коллега у него училась. Сообразительная, Столярова вроде уважает. Хотя высказывалась сдержанно, скажем так, не хвалила, но и не критиковала.

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

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

Но если ты всё пишешь сам, тебе не нужен никакой SQL.

СУБД вовсе не обязательно предполагают SQL. Они бывают разные.

Тебе не нужно обеспечивать мультиверсионность или блокировки, у тебя, например, смартфон с одним пользователем по определению.

Да, в таком случае тебе скорее всего не нужна СУБД, как я собственно и говорил.

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

либо уже от возраста крыша поехала

Вряд ли. Он давно… довольно специфично мыслит, скажем так.

Впрочем, конкретно с этой «церковью», думаю больше тупо пиар, чтобы не забывали + тонкий троллинг.

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

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

Золотые слова, Юрий Вендиктович. А то где останавливаться-то? libc выкидываем и переизобретаем через сисколлы? Так и ядро тоже надо выкидывать, сколько там всего лишнего, взяли и запрограммировали регистры. SSD выкидываем, там контролеры, припаяли микросхемы с NOR-памятью и по даташиту щёлкаем там биты, как нам нравится. В микропроцессеоре куча лишнего функционала, выкидываем, делаем свои микропроцессоры, без лишнего мусора, заточенные под конкретный проект. Хе-хе. Да уж, останавливаться где-то надо…

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

есть три типа: редкая врождённая (ювенальная), подростковая (до 20 лет) и «возрастная» - обычно после пенсии. психиатры поясняют это тем, что человек, вышедший на пенсию, оказывается без обычной занятости и начинает думать головой, который обычно не думал, когда был занят. ну и едет крыша. плюс в это время обычно случается половая инволюция (обратное пубертату) и там на фоне гормональных сдвигов тоже может случиться всякое. ну и в процессе работы, может, шизофрению не так и заметно, а когда человек ничем не занят, она больше проявляется. недаром в психиатрических заведениях трудотерапия всегда была одним из способов снижения обострений и рецидивов.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug
  1. софт способен упасть. и падает намного чаще, чем, например, стол или стул.

Единственный спорный пункт. Думаю, у меня всё же стул падает чаще, чем софт. Не потому что часто стул роняю, а потому что уже даже не помню, когда софт последний раз падал.

CrX ★★★★★
()

Я так понимаю, речь идёт о случаях вида «создадим музыкальный плеер и засунем туда PgSQL», или создадим сайт-заглушку на три страницы и там будет MySQL, схему положим отдельно, удачи с установкой. Тут я с автором согласен.

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

СУБД вовсе не обязательно предполагают SQL. Они бывают разные.

Я думаю, в этом топике речь преимущественно про традиционные РСУБД и про язык SQL, как стандартизированное средство взаимодействия с ними.

Тебе не нужно обеспечивать мультиверсионность или блокировки, у тебя, например, смартфон с одним пользователем по определению.

Да, в таком случае тебе скорее всего не нужна СУБД, как я собственно и говорил.

Но с другой стороны в том же sqlite много хорошего. К примеру даже простая задача сохранения данных на практике приводит к многим вопросам. Просто перезаписывать? Батарея сдохла на середине перезаписи и юзер потерял все данные. Нехорошо. Сохраняем в новый файл и переименовываем? Очень неэффективно. Если данные в память не хочется грузить целиком - сразу возникает куча интересных проблем, давно решённых в sqlite. Когда проект развивается, развивать схему СУБД с миграциями это понятный и простой путь. Когда схема где-то неявно описана в коде, это сложно.

Так что про «не нужна» многие поспорят. Где провести границу между оправданностью велосипеда - очень нетривиальный вопрос.

Я видел мнение, что в 100% случаев для хранения данных надо использовать sqlite. Т.к. он строго лучше любого другого формата. Даже для передачи данных надо передавать sqlite файл, а не XML/JSON/Protobuf.

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

В таком случае тебе скорее всего не нужна СУБД.

Где-то надо хранить данные. Допустим, я пишу гипотетическую читалку RSS. Мне надо хранить информацию о фидах, о постах в фидах, о времени последнего обновления фида, поста, и т.п.

Гораздо проще и надёжнее заюзать sqlite, нежели изобретать свой формат хранения данных, или даже хранить это всё в виде xml/json/yaml.

Chiffchaff
()

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

Пошучу

Какое низкое коварство
Полуживого забавлять,
Ему подушки поправлять,
Печально подносить лекарство,
Вздыхать и думать про себя:
...
anonymous
()

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

thesis ★★★★★
()

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

Я не знаю биографию Столярова, но по его высказываниям, кажется, что нет - не писал.

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

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

Iron_Bug ★★★★★
()

Многим не понравился мой комментарий относительно Столярова. Жестоко, наивно и глупо?

Ну чтож, а как вам такое изречение маэстро?

за саму идею задействования внешней СУБД нужно убивать на месте

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

Персонаж из раза в раз повторяет угрозы разработчикам, приравнивает их к международным террористам и желает им смерти. Вот теперь к списку, в который входит стандарт C++ и systemd, добавились программисты, использующие СУБД в своих программах. И он это всерьёз.

У него в профиле полно этих изречений, но это самое красноречивое (последний параграф).

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

Где-то надо хранить данные. Допустим, я пишу гипотетическую читалку RSS. Мне надо хранить информацию о фидах, о постах в фидах, о времени последнего обновления фида, поста, и т.п. Гораздо проще и надёжнее заюзать sqlite, нежели изобретать свой формат хранения данных

Чувак, регенты Беркли даровали тебе шикарное key-value хранилище, которое долго было основой MySQL. Есть куча древних и проверенных (verified and ancient (c)) способов пихать туда Dict. SQL-то зачем?

IMHO это всё от JS пошло, где всё хранили на бэке с SQL.

Пока что-то такое на перле делали, были популярны способы хранить структуры данных в BDB.

С другой стороны, SQLite от BDB со структурами отличается только наличием парсера, и почему бы его не использовать, если кода меньше писать??

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 3)
Ответ на: комментарий от rtxtxtrx
В редакцию «Сектаинфо» житель города Тулы прислал видео, на  
котором пастор местной секты «Церковь Тулы «Дом Отца» Константин  
Столяров в состоянии наркотического опьянения ведет себя крайне  
неадекватно. Под воздействием наркотиков Столяров сам снял себя на   
видео и выложил у себя на странице в одной из соцсетей. Видео   
провисело менее суток, после было удалено.
anonymous
()
Ответ на: комментарий от Shadow

Я не против KV, сам давно думаю приспособить для чего-нибудь libmdbx. SQLite предложил как вариант.

В посте ведь говорится о том, что любая БД - лишняя, а BDB/lmdb/libmdbx - они тоже БД.

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

ИМХО лучше удалить этот тред.
Не потому, что ТС плох, а флуд Столярова нет смысла обсуждать.
Конкретики нет.
Если бы были сужения и объяснение Столяровым своих суждений, то может быть и можно было бы вести какой-то диалог.
Впрочем честно скажу Столярова не читал.
Вроде на этом форуме его книги хвалят.
Наверное есть польза от них, но вот когда человека заносит в крайности, то скорее всего без чёткого объяснения почему он советует так имеем лишь флуд,

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

Там есть объяснения. Только вопреки перечисленным техническим особенностям, тема упирается не в них, а в его понятие об «информационном насилии».

Он желает смерти программистам, использующим СУБД. Вот конкретика.

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

ам есть объяснения. Только вопреки перечисленным техническим особенностям, тема упирается не в них, а в его понятие об «информационном насилии».

Значит с нашей стороны нет диалога о его суждениях, а лишь критика.

Можете привести текст в котором он объясняет свои суждения?

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

Это не троллинг, он отстаивает эту позицию довольно долго, последовательно, принципиально. В его мнении про СУБД прям почти ничего нового.

Поищи в его профиле в комментариях такие слова как «смерть», «враг», «понос». Я уж не знаю какой более откровенный язык ему нужно использовать, чтобы его воспринимали всерьёз.

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

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

Информационное насилие - это реклама и маркетинг. Мне, конечно, часто не нравится реклама, но есть значительная разница между «не нравится» и лишением свободы. Лишение свободы для борьбы с информационным насилием - это не метафора и не преувеличение в концепции Столярова, а обычная практика, которую следует воспринимать буквально. (Он неоднократно об этом заявлял.)

Можете на просторах интернета поискать его материалы. В интервью на ютубе некому Бороде он тоже это объяснял.

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

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

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)