LINUX.ORG.RU

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

 ,


0

4

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

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

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

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

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

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

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

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

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

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

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

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

Мне больше интересны объяснения Столяровым почему СУБД не следует использовать, … , а о «поносе» вовсе не нужно.

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

мгу. итоги. некогда престижный вуз. топ-10 в мире… а теперь - обитель фимозников… ну столярик хотя бы основам программирования учил… от него вреда, конечно, много, но я не думаю, что кто-то с iq > 100 баллов воспринимал этого чудня всерьез в этих вопросах… а там еще были телепаты, экстрасенсы… институт путешествия во времени… и дугин

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

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

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

Я, конечно, не согласен со Столяровым, но подробный разбор его идеи об информационном насилии — весьма сложная задача. Пока что ограничимся тем, что я сделал его идею более понятной (надеюсь).

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

Пока что ограничимся тем, что я сделал его идею более понятной (надеюсь).

А по темам приведенными ТС, можете привести суждения Столярова в которых он объясняет почему он так считает?

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

Мы все посылаемы бываем на этом форуме, и отписываемся двумя тремя фразами. Просто он человек публичный в сфере IT. Ну мог бы конечно и пооккуратней общаться. Но тем не менее не умоляет его заслуг.

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

препод из уважаемого института

Во-первых из МГУ, университета, а не института.

Во-вторых он уже много лет там не преподаёт.

он просто троллит

Я там учился, в том числе у него. В то время он не высказывал таких резких суждений студентам, по крайней мере я не припомню подобного. Кажется JavaScript ругал, но кто его не ругал. Но в целом его логика остаётся плюс-минус последовательной все эти годы. Хотя как будто бы становится всё более жёсткой и маргинальной (хотя допускаю, что это мир двигается в другую сторону, а не он, к примеру идея об использовании интернета без JavaScript 20 лет назад казалась куда более разумной, нежели сегодня).

В общем не думаю, что он троллит.

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

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

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

Почему? Он это явно не указал, но вывод напрашивается сам: из-за пользователей. Учитывая его фирменное пожелание смерти, можно сделать вывод, что данный акт (привязывание СУБД к программе) — информационное насилие по отношению к пользователю.

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

(привязывание СУБД к программе) — информационное насилие по отношению к пользователю.

Логика типа - «Сегодня в Зимбабве корова усралась. значит у нас после обеда будет дождь».
Такую «логику» нет смысла обсуждать потому, что …

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

плохая схема (это не понял)

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

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

CREATE TABLE Data (
  HeadType Integer,
  HeadIntObj Integer,
  HeadFrac Double,
  HeadString Text,
  TailType Integer,
  TailIntObj Integer,
  TailFrac Double,
  TailString Text)

И работать такая таблица, если на ней строить списки и деревья, будет адски медленно.

monk ★★★★★
()

Дядя не видит разницы между локальной программой и, мать его, сайтом. Интересно, он Андроид-приложениями пользуется? Сильно ли ему, как пользователю, понадобились «навыки администрирования СУБД», при том, что любое приложение может использовать десяток SQLite’овских баз?

(У меня был некоторый опыт взаимодействия с ВУЗовским преподом в качестве разработчика. НА. ХЕР. Больше никогда. Невежество ещё можно было бы простить, но при этом абсолютно непробиваемая уверенность в собственной правоте…)

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

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

Вот кто-то с таким мнением в 1С пришёл. И в платформе 1С:Предприятие сменили формат журнала событий на SQLite. 8 лет страдали и вернулись обратно к текстовому.

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

Вот здесь можно мысленно заменить systemd на «СУБД в программе на моём компьютере».

Спасибо!

Что скажу о прочитанных суждениях Столярова?

  • «Серебряной пули» - нет;
  • Работы у всех нас ВАЛОМ по разработке новых технологий, которые помогли более просто и эффективно решать насущные проблемы.
anonymous
()
Ответ на: комментарий от monk

сменили формат журнала событий на SQLite. 8 лет страдали и вернулись обратно к текстовому.

нагруженный многопользовательский сервер

SQLite

и кто сам себе злобный Буратино, не осиливший даже Appropriate Uses For SQLite? впрочем, понятно, английского же одинэсники не знают…

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

И работать такая таблица, если на ней строить списки и деревья, будет адски медленно.

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

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

Немного витеевато сказано, но где-то так …

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

Мда. Столяров построил теорию вокруг понятия «информационное насилие», и с ее помощью все то, что ему не нравится (по субъективным причинам) становится ненужным по «объективным» причинам. Ну молодец, чо.

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

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

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

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

и кто сам себе злобный Буратино, не осиливший даже Appropriate Uses For SQLite? впрочем, понятно, английского же одинэсники не знают…

Прочитал. Там написано, что как «Replacement for ad hoc disk files» годится.

Is the data separated from the application by a network? нет, журнал там же, где сервер

Many concurrent writers? нет, один поток

Big data? нет, не больше сотни гигабайтов

Otherwise → choose SQLite! ну вот, 8 лет мучались

Где написано, что, в отличие от обычного текстового файла, SQLite будет блокировать добавление записей, если кто-то читает данные?

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

Да ничего он не построил, просто гонит.

Иногда суждения бывают весьма ценны, если они подкреплены опытом, знанием, …
Книги Столярова многие хвалят и благодарят его за них.
Что касаемо вопросов разработки, то не знаю есть ли у него хорошие советы.
О суждениях Столярова, которые привёл ТС что можно сказать, если
нет никакого их объяснения?
Больше на перегибы похожи.
Впрочем книги Столярова не читал, поэтому и обсуждать то нечего (со своей стороны).

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

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

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

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

Ю Я тоже не читал, да мне и не надо. Просто заступиться за человека.Мне не надо, я и так в теме.

Суждения Столярова интересны, но без его объяснения их они смотрятся «не ахти».

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

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

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

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

Я не выходил за пределы обсуждаемой темы. Вопрос о том, использует ли Столяров Андроид, не только личный, а с подтекстом, который звучит примерно так: «совместимы ли его принципы с его практиками, такими как использование смартфонов?» Целью моего ответа является донести, что совместимы.

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

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

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

Собственно, по этой же причине он отрицает C99 из-за VLA, вот драма: Вышел первый том книги А. В. Столярова «Программирование: введение в профессию» (комментарий)

anonymous
()
Ответ на: комментарий от anonymous
В SQLite нет «форков», которые устраняют проблемы блокировки, но есть официальные решения и сторонние инструменты для решения этой ошибки («SQLite database is locked»). Проблема возникает, когда один процесс пытается получить доступ к базе данных, пока другой активно пишет в неё. Это может происходить в различных сценариях, например: 
beekeeperstudio.io
cigatisolutions.com
data-recovery-solutions.com
skillapp.co
несколько приложений, обращающихся к базе данных одновременно;
длительные транзакции, которые не завершаются своевременно;
неправильная обработка соединений и курсоров базы данных.
 
beekeeperstudio.io
Официальная реализация
Встроенный механизм блокировки в SQLite, который предотвращает одновременный доступ к базе данных несколькими процессами. Однако это может привести к ошибке, если блокировки не освобождаются из-за неправильной обработки транзакций. Решение:
Своевременно завершать транзакции — фиксировать или отменять их, как appropriate. 
beekeeperstudio.io
skillapp.co
Правильно закрывать соединение базы данных после завершения операций, чтобы база данных не была заблокирована. 
beekeeperstudio.io
Настроить время ожидания (timeout) — это говорит SQLite, как долго ждать перед возвратом ошибки «database is locked», давая возможность освободить блокировку. По умолчанию timeout — 5 секунд. 
beekeeperstudio.io
bobbyhadz.com
Избегать длинных транзакций — короткие транзакции минимизируют время, в течение которого база данных заблокирована. 
beekeeperstudio.io
Сторонние решения
Инструменты для восстановления базы данных SQLite — они помогают устранить ошибки блокировки, если ручные методы кажутся сложными. Например, SQLite Database Recovery — утилита, которая восстанавливает базу данных и исправляет повреждения, созданные SQLite 2 и SQLite 3. 
cigatisolutions.com
data-recovery-solutions.com
Программы для проверки открытых соединений — они сканируют процессы приложений на незакрытые соединения, удерживающие блокировки базы данных, и заставляют процессы, удерживающие старые соединения, выйти. 
sqldocs.org
Важно: лучший подход зависит от причины блокировки, и перед устранением проблемы рекомендуется создать резервную копию базы данных. 
cigatisolutions.com
data-recovery-solutions.com
Оценить ответ
11 источников
stackoverflow.com
bobbyhadz.com
beekeeperstudio.io
cigatiso
anonymous
()
Ответ на: комментарий от riokor-v2

Чем больше пишу, тем больше не получается. Вы поймите, не тот человек что говорит, а что делает. Можно усраться, писать какой угодно софт, можно обмазаться фреймворками, библиотеками. А где ты при этом добре?

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

Чем больше пишу, тем больше не получается.

странно. у меня ровно наоборот. и у большинства программистов, думаю, так же. может, Вам не надо в программирование вообще?

Iron_Bug ★★★★★
()