LINUX.ORG.RU

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

 ,


0

3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изобретать велосипед каждый раз для каждого приложения – зачем?

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

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

я не пытаюсь объяснять то, что меня не касается. в частности, историю, к которой я не имею никакого отношения

жена и сыновья Сократа никакого особого героизма не проявляли и философией Сократа не интересовались

история развития компиляторов зиждется на каком-то «уже существующем» божественном компиляторе

историю искусств я кое-что знаю

вся известная история с наездами на Тайвань и Гонконг

историю Китая, всю эту «культурную революцию», хунвейбинов и прочее

лол

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

Да не надо даже никакой интерпретации. В мире происходит и происходило огромное количество событий ежесекундно.

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

Собственно говоря, этим занимается любое СМИ в любой стране мира. Это основная их задача: подсветить одни события, и не упоминать другие.

То же самое и с историей.

Или, чтобы проще было понять, потому что некоторые люди не понимают даже так. Допустим, в любой стране мира есть сантехники. Также, в любой достаточно большой группе людей, найдутся люди с криминальным прошлым или криминальными наклонностями, которые они используют в настоящем. Поэтому, если в стране есть, допустим, 50000 сантехников, среди них обязательно будет какой-то процент воров, какой-то процент насильников, какой-то процент убийц. Всегда, независимо от страны. Теперь, мы берём, и публикуем в новостях только об этих людях. И каждый раз подчёркиваем: «В очередной раз, убийцей оказался сантехник». После нескольких лет такой целенаправленной долбежки, у всех сложится совершенно однозначная ассоциация: сантехник = убийца.

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

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

я не понимаю, почему лисп не может использовать СУБД. мне кажется, нет никаких ограничений.

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

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

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

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

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

А некоторые ещё и битовые флаги в БД тащут со своих нескучный язычков. А потом бегают и орут, что ваша СУБД гомно.

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

и история ничего не «объясняет». она просто констатирует факты.

Подобное выхолощенное представление об истории, как о событиях и их датах идёт из средней школы.

Когда было Куликовское сражение, когда Русь крестили и т.п.

А вот , к примеру, почему для Рима не было проблемой противостояние с Карфагеном, несмотря на серию поражений, а нашествие варваров во времена Ная Мярия вдруг стало проблемой? Что произошло с римским обществом за это время?

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

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

Лисповые приколы не должно быть самоцелью. Если решать задачу выискивая лисповые абстракции в реляционные таблицы, то не удивительно, что получается дерьмо.

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

но какие претензии к VLA в сишечке могут быть - решительно не понимаю.

Сам по книжкам Столярова учусь. Про VLA он пишет в своей агрессивной манере, но осознать, что в нём плохого я смог буквально несколько дней назад (хотя может ошибаюсь или не целиком понял).

Допустим, нам взбрело в голову использовать VLA (встроен в язык) вместо вызова malloc() (сишная библиотека). Откуда VLA возьмёт память? Из стека. А места там мало, когда в стеке кончается место начинается ерунда.

Ещё где-то читал, что из-за наличия механизма VLA, при передаче аргументов параметров в подпрограмму машинный код там какой-то ужасный получается. Я это пока не проверял.

«не нравится - не ешь». никто ж не заставляет. в сишечке полная свобода выбора на этот счёт

ИМХО, лучше ограничения, чем такая свобода. Как мне показала практика, чем жёстче ограничение, тем больше полёт творческой мысли. Ну и меньше всего изучать, тоже приятно. :^)

Можно писать на C89. Но отсутствие там snprinf() и инициализации структур по именам полей вызывает грусть.

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

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

Логику и логические выводы из фактов еще никто не отменял.

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

Откуда VLA возьмёт память? Из стека. А места там мало, когда в стеке кончается место начинается ерунда.

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

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

Никто не мешает VLA брать память из кучи.

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

И по-моему оттуда она и берется, так как слишком длинные массивы все равно в стек не упихаешь

https://www.reidatcheson.com/c/programming/2015/12/07/vlas.html

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

Не хватает только «историю пишут победители» для полноты картины.

А что не так с этим утверждением?

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

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

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

P.S. К чести исторической науки надо сказать, что печально известный пропагандист Николай Стариков, которого огромное количество обманутых дурачков считают «историком» – профессиональным историком не является. К слову сказать, профессиональные историки много клевали покойного математика Фоменко, который к несчастью для себя полез в историю, но на Старикова внимания почти не обращают. А ведь Стариков гораздо подлее и опаснее Фоменко с его маргинальной хронологией.

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

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

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

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

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

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

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

Да, мне тоже нравится.

Но Андрей Карпов ещё круче: Столяров троллит книгами и блогом, а этот вообще программным кодом.

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

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

Чтение списка на такой таблице потребует столько SQL запросов, сколько элементов в списке.

В 1С 7.7 каждая точка порождала SQL запрос.
Например: XXX.YYY.ZZZ приводило к тому, что 1С делала два SQL запроса.

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

У меня ныне данные из конфигурации 1С 7.7, загружаемые в хранилище данных, находятся в дереве в нативном формате представления.
«Понимаете как в таких услвиях было легко работать».

Да и данные подчинённых справочников, … находятся в узлах родителя.

Всё летает!

Так и crt 1C 8 разработано на 100%.
Впрочем можно его и не использовать так как оно разработано на основе моего core.

Впрочем этот проект разрабаьваю не в пику фирме 1С.
Он пригоден для работы: с графикой, мультимедия, …
Конфигурации 1С использую лишь для отладки core.

Пошучу

Ведь я не 1С-вец вовсе и вовсе не неадекват, который топает ногами, когда говорят о Windows.

API и в Linux работает (кроссплатформено)!
И весьма шустро!

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

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

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

Я прекрасно понимаю, почему так — потому что вот эта вот историография, особенно явленная в учебниках и в СМИ, является частью идеологии, государственного или ещё какого-нибудь нарратива, средствам пропаганды, опирающимся не на сами факты, а на их интерпретацию, а главное — оценку. И я понимаю, что этого в принципе никак не избежать, пока потребность в идеологии и пропаганде существует, и одновременно с этим есть все возможности производить её в том числе и таким (вполне эффективным) способом. Но побочным эффектом от этого, помимо достижения самой цели создать у людей «идеологически правильную» картину мира, является ещё и такая вот дискредитация исторической науки. Через всё это люди начинают воспринимать её именно как вот эти вот школьные нарративы, репортажи в СМИ и тому подобное, не владея методологией самой науки даже в самом-самом базовом приближении.

А что не так с этим утверждением?

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

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

Это очевидно зависит от компилятора.

Не очевидно. И я не уверен, что это утверждение правдиво.

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

Кучи и API может и не быть. Например, если программировать под baremetal. А если на сишке нельзя будет под baremetal писать, то и сишка не нужна.

Проблема в том, что в остальных случаях в программе на Си такие вещи вынесены в библиотеки, а не встроены в язык.

В этом как раз и прелесть языка Си.

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

два параллельных процесса

А если их не два, а тысяча (допустим, это веб)?

А как себя ведут с организацией процессов актуальные в 2025 году веб-сервера? На каждое соединение отдельный процесс создают?

Я даже не про гигантов вроде авито (те, насколько я читал, как раз лепят велосипеды и могут забацать связку из реляционной СУБД и чего-нибудь NoSql-ного для пущей эффективности). Обычный сайт, средней руки, поднятый на nginx или Apache, как себя ведёт?

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

Я вообще ненавижу троллей и троллинг, но для тех, кто троллит не словом, но делом, делаю исключение

Проблема в том, что троллинг и тролли измельчали. Хороший троллинг, особенно делом — это своего рода искусство. Да даже и словом он может быть как минимум «красив», когда произведён грамотно, а не как нынче большинство форумных «толстячков» делает. И он существовал и практиковался в том числе задолго до самого появления слова «троллинг», да и даже возможно до появления слова «тролль» в своём первоначальном значении. Троллинг до троллинга — это, например «Ленин — гриб» по ТВ. Разве не стоит отдать должное креативности и эффектности авторов? Ну а до слова «тролль» (тут я, впрочем, точно не уверен, когда оно там у скандинавов появилось) выдающимся троллем был, например, Диоген (тут даже не буду на каком-то конкретном примере останавливаться, слишком уж их много).

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

А как себя ведут с организацией процессов актуальные в 2025 году веб-сервера? На каждое соединение отдельный процесс создают?

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

DISCLAIMER: но я не настоящий сварщик, прямо в актуальной «веб-тусовке» не варюсь

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

А если на сишке нельзя будет под baremetal писать, то и сишка не нужна.

так она и не нужна, даже там

В этом как раз и прелесть языка Си.

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

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

СУБД нужна только если в требованиях появляется полный ACID.

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

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

Не очевидно. И я не уверен, что это утверждение правдиво.

Так ведь основная претензия к VLA как раз в этом. В C89 malloc и прочие функции, подразумевающие какое-либо взаимодействие с операционной системой или сильно зависящие от архитектуры компьютера, не являются частью собственно языка. VLA получается, что или нарушает этот принцип или опасен для стека. Я так понимаю.

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

При чём тут самоцель? Есть программа, которая работает и хранит данные, например, в виде S-выражений. Потом говорят, что вот в SQL хранить лучше. И надо всю программу переделать, чтобы типы данных помещались в этот SQL.

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

Наследование в SQL тоже ужасно отображается. Либо одна мега-таблица со всеми полями всех классов. Либо мега-UNION каждый раз, когда надо выбрать объекты класса, близкого к корню (а у некоторых СУБД ещё и ограничение на количество объединяемых запросов).

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

Но сама наукой не является.

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

Значит этот закон не был придуман, он был открыт. Т.е. это часть природы.

MoldAndLimeHoney ★★
()