LINUX.ORG.RU

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

 ,


0

4

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

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

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

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

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

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

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

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

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

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

★★★★★

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

Вот, нет, чтобы постироничных зумеров обсудить!

http://stolyarov.info/guestbook/archive/12/#cmt107

Выискали какую-то производственную скукотищу…

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

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

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

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

Наследование не нужно.

Вот примерно про это я и пишу. Что вместо того, чтобы писать на выбранном языке, приходится писать на SQL. Или вместо этого писать на выбранном языке и использовать хранилище для этого языка (mnesia для erlang, allegrocache для common lisp, aergia для haskell).

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

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

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

Если всё это не нужно для решения задачи, тогда можно использовать SQL.

Вспомнил Algol-60.
Это всё «с тех краёв».
Пост не о том, что SQL плох, а о том что ныне 2025 и много иных задач ныне решать нужно для которых SQL не пригоден.

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

Я считаю, если использовать БД, то нужно код писать под неё. Когда, скажем, ОРМ не позволяет этого делать и получается фигня, нужно переписывать на чистый SQL. И делать не как удобно программе, а как удобно БД.

ACID не всегда позволителен. В ClickHouse нет транзакций, но это незаменимая БД для своих целей (быстрый поиск по миллионам данных).

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

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

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

Ну ОК, а документ в данном контексте - это уже не данные? Данные - это множество записей, порядок которых не важен, а документ - поток чисел или записей? Иначе можем договориться, что видео и текст тоже надо в sqlite передавать.

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

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

Ну ОК, а документ в данном контексте - это уже не данные?

Документ это абстрактная сущность. А JSON/XML/SQLite это формат для сериализации абстрактной сущности в конкретные байты.

Иначе можем договориться, что видео и текст тоже надо в sqlite передавать.

Почему бы и нет. Было бы интересно попробовать.

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

Если брать SQL, то наследование не нужно

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

массивы не нужны

С этим уж тем более проблем нет.

замыкания не нужны

Какое отношение замыкания имеют к СУБД? Ты собрался хранить код в БД? Не надо так делать.

ленивые структуры не нужны, классы типов не нужны

Что-то маргинальное и к данным отношения не имеющее. Не нужно, да.

рациональные числа не нужны

Ну уж это как хранить - наверное сообразить можно?

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

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

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

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

Именно так. Либо это софт под СУБД, причём в идеале под конкретную, либо часто лучше вообще СУБД не использовать.

ACID не всегда позволителен.

Это то, что делать на коленке под свои данные достаточно трудоёмко. Если надо только быстрый поиск по большому объёму своих данных, свой индекс часто будет быстрее.

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

Это не аргумент.

Вполне аргумент, так как архитектура хранения данных SQLite мне знакома.
Кстати лет восемь назад перевёл её на C++ и это прекрасное задание
для начинающих изучать Си и C++, чтобы увидеть в чём они разнятся.
Впрчем

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

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

Видеопоток разбивается на множество отдельных фрагментов (посмотри в developer tools, что проиходит при просмотре видео на ютубе).

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

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

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

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

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

Желаю вам успеха!

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

мгу. итоги. некогда престижный вуз. топ-10 в мире… а теперь - обитель фимозников…

Посмотри на весь топ 10. Может быть, и хорошо, что МГУ - не рассадник леворадикальных пропалестинских трансов.

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

Столярик - этакий подросток-переросток, которому можно доверять, хотя он старше тридцати. Ну, поведется подросток на дяденьку-максималиста, выучит основы программирования, привыкнет к самому разному синтаксису на примере популярных и не очень языков. А дальше он придет на рынок, где Java, JS, Python, SQL, и освоит ходовые инструменты, имея солидную базу. Столярята на этом форуме обитают. Какой-то упоротой индоктринации за ними не замечено.

а там еще были телепаты, экстрасенсы… институт путешествия во времени…

Так где их только не было. В свое время их пытались использовать ЦРУ, КГБ, следаки по обе стороны океана. Исследователи на серьезных щах усаживали за стол Нинель Кулагину. Не отвергать бездоказательно очередной чайник Расселла, о котором все говорят, - это тоже проявление академической скромности.

и дугин

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

Vidrele ★★★★
()

Правильно. По мнению Столярова, надо всё хранить всё в txt файлах, в том числе персданные. Неуважение в SQLite и Postgres Pro, тащемта. Неуважение к тем, кто эти персданные формирует.

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

Столяров фанатик конечно, но вот субд во всяких плеерах (привет, обморок) это же рил шизофрения.

Как по мне, локальная фонотека - это самый что ни на есть юзкейс для СУБД.

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

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

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

Упоротость - понятие относительное. Если ты во всем с ним согласен, то ни в чём. Я не во всем согласен и с Хомским, и с Дугиным, хотя уважаю их позиции. Более предметное обсуждение на форуме, где запрещен нацпол, у нас не получится, хотя и хотелось бы.

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

Поиск по разным критериям, например, может сильно облегчить.

chrome частенько использует SQLite для хранения всякого рода историй, …
''' Chrome\User Data\Default\Affiliation Database │ 36864 Chrome\User Data\Default\Extension Cookies │ 20480 Chrome\User Data\Default\Favicons │ 81920 Chrome\User Data\Default\History │ 327680 Chrome\User Data\Default\Login Data │ 47104 Chrome\User Data\Default\Login Data For Account │ 47104 Chrome\User Data\Default\Network Action Predictor │ 45056 Chrome\User Data\Default\Network\Cookies │ 77824 Chrome\User Data\Default\Network\Reporting and NEL │ 86016 Chrome\User Data\Default\Safe Browsing Network\Safe Bro} 20480 Chrome\User Data\Default\Shortcuts │ 20480 Chrome\User Data\Default\Top Sites │ 20480 Chrome\User Data\Default\Web Data │ 98304 Chrome\User Data\Default\WebStorage\QuotaManager │ 45056 Chrome\User Data\Default\databases\Databases.db │ 28672 Chrome\User Data\Default\heavy_ad_intervention_opt_out.} 16384

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

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

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

chrome частенько использует SQLite для хранения всякого рода историй, …

В 1С 7.7 её часто используют в качестве таблицы значений для формирования отчётов.
Сам не использую по уважительной причине - своё API, которое более функционально, да и весьма эффективно.

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

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

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

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

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

Я не знаком с политическими взглядами Хомского, потому и спросил

В Википедии политические взгляды Хомского очень хорошо изложены. На Ютубе его политота представлена даже лучше его лингвистических изысканий.

а вообще ты не находишь анекдотическим своё «не сильно фашиствующие тоже нужны» на фоне цензуры и политических репрессий, устроенных этими самыми не сильно фашиствующими? 😄

Ничем не уравновешенная и не сдерживаемая демшиза строит такую же диктатуру, увы.

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

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

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

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

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

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

Наследование в SQL тоже ужасно отображается. Либо одна мега-таблица со всеми полями всех классов.

ООП головного мозга. Наследование данных и в обычных ЯП скорее антипаттерн, а вы предлагаете ещё и в БД этот ужас тащить.

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

С этим уж тем более проблем нет.

И можно сохранить массив ссылок на записи? И СУБД будет по ним проверять ссылочную целостность?

Какое отношение замыкания имеют к СУБД? Ты собрался хранить код в БД? Не надо так делать.

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

Ну уж это как хранить - наверное сообразить можно?

Чтобы СУБД умело на них арифметику и интервальные индексы? Нет. Расскажи.

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

Что-то маргинальное и к данным отношения не имеющее. Не нужно, да.

В Haskell все данные с такой структурой. То есть для Haskell использовать SQL совсем никогда не надо.

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

и в чём же пробелма с постгресом? я на нём гоняла нагрузочные тесты, вроде он справлялся. конечно, это не in memory db, но всё же вполне себе шустро жевал запросы, отказов я не видела.

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

И можно сохранить массив ссылок на записи? И СУБД будет по ним проверять ссылочную целостность?

Массив ссылок это вторая таблица.

create table country (country_id primary key ...);
create table city (city_id primary key, country_id references country ...)

Вот тебе массив ссылок с ссылочной целостностью. Можешь добавить в таблицу city поле index, если тебе важен именно упорядоченный список.

Чтобы СУБД умело на них арифметику и интервальные индексы? Нет. Расскажи.

Рациональное число это два целых числа - numerator и denominator. Вот их и храни. Арифметку делай в своём приложении. Для индекса можешь использовать приближённое значение с плавающей точкой с дополнительными проверками. К реляционной теории это всё в любом случае отношения не имеет. Если бы это было кому-то особо нужно, оно было бы реализовано. Т.к. это никому не нужно, можешь поискать всякие расширения, поисковик сразу подсказывает некий begriffs/pg_rational, или написать своё, если тебе прям важно, чтобы это было в базе.

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

ООП головного мозга.

Вот практическая задача. Российская бухгалтерия. Проводка описывается записью вида

  • документ
  • счет дебета
  • аналитика1 дебета
  • аналитика2 дебета
  • аналитика3 дебета
  • счет кредита
  • аналитика1 кредита
  • аналитика2 кредита
  • аналитика3 кредита
  • сумма

аналитика является ссылкой на один из справочников, какой именно зависит от значения счёта. Например, если счет дебета = «10.01», то аналитика1 ссылается на склад, аналитика2 на товар, аналитика3 на документ прихода (который может быть из таблиц поступление, оприходование или корректировка).

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

Как это впихнуть в SQL? Видел таблицу Документы со всеми реквизитами. Видел пару полей ТипДокумента и ИдДокумента. Видел строковой поле, в котором описывалась ссылка на документ и его данные всегда вытаскивались отдельным запросом…

Вариант с парой полей вроде оптимальный, но запрос типа ВЫБРАТЬ Документ, СчетДт ИЗ Операции ГДЕ Документ.Дата МЕЖДУ '2025-01-01' B '2025-31-01' при этом превращается в огромного монстра с соединением по всем таблицам базам данных.

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

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

Iron_Bug ★★★★★
()

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

alysnix ★★★
()