LINUX.ORG.RU

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

 ,


0

4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ну на самом деле просто должна быть правильность выбора инструмента. Если у тебя есть необходимость хранить три параметра конфигурации, то проще и надежнее сделать это в файле конфига, чем поднимать ради этого MySQL и городить коннект к нему. И наоборот, если у тебя тыщи строк данных в секунду, то разумнее хранить их в готовом и проверенном решении (БД), чем колхозить свой колхоз, который гарантированно слаганёт в самый неподходящий момент.

Просто А.В., видимо, не сталкивался в проде в хайлоадом или вообще с современными нагруженными приложениями, а в его мире 80х годов решение писать в свой формат вполне оправданно было.

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

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

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

На C++ это

#ifndef ROLES_HPP_SENTRY
#define ROLES_HPP_SENTRY

#include <scriptpp/scrvar.hpp>
#include <scriptpp/scrvect.hpp>

class AccessChecker {
    ScriptVector access;
    int recent;
public:
    AccessChecker() : recent(0) {}
    ~AccessChecker() {}
    void SetRules(const ScriptVariable &access_config, int recent);

    bool Check(const ScriptVector &roles, ScriptVariable access_type) const;

    bool CanPost(const ScriptVector &roles, bool &bypass_premod) const;
    bool CanSeeHidden(const ScriptVector &roles, bool own) const;
    bool CanModerate(const ScriptVector &roles) const;
    bool CanEdit(const ScriptVector &roles, bool own, long long cmtdate) const;
};


#endif
hbee ★★★★
()
Ответ на: комментарий от KivApple

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

Шоб не повторяться: Прикрутить сетевой интерфейс к SQLite и сказать, что DBMS готова. Озвучьте минусы этого решения. (комментарий)

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

Да.

Если данные допустимо загрузить целиком в ОЗУ, то хоть самоделку (только не забыть по разный размер size_t и порядок байт), хоть protobuf/json/yaml/xml.

Если данные нельзя грузить целиком (могут не влезть в доступную ОЗУ) и нужна возможность поиска и загрузки кусочков по каким-нибудь критериям, то SQLite.

Если данные шарятся между инстансами приложения запущенными потенциально на разных хостах, то MySQL/Postgres/Mongo/Redis (под специфику задачи).

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

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

и изнутри, и снаружи. всякое было.

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

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

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

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

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

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

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

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

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

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

от таких просто сотрудники бегут и они успешно закрываются.

Да, текучка там была мама не горюй. Самый эпик, что видели в доках, найденных на просторах доступной локалки → чел отработал неделю. Я вот продержался где-то 7 месяцев.

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

у копрорастов

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

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

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

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

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

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

Кидаться какашками он стал не за указание на дыру, а за то как указали: просто использовав её в сообщении.

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

Никто из троих ответивших так и не написал, почему работать-то не надо. Выглядит как раз наоборот, в т.ч. упомянутый закон Гудхарта – не про «работать не надо», а про «надо химичить с показателями», что на моё имхо ещё противнее, чем работать.

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

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

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

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

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

вот как на студентов реагировал сам Столяров:

  • А. В. Столяров. Язык Си и начальное обучение программированию. stolyarov_2010.pdf

из публикаций и списка статей http://www.croco.net/croco/papers.html

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

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

а когда их носом в примеры тыкают – батхёртят и кринжуют.

ну и как таких научить?

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

во-вторых, вот те тезисы озвученные в stolyarov_2010.pdf.

я в целом с ними согласен. как обучить того низкоуровневой сишечке кто активно учиться не хочет? а ХЗ как.

как научить С++ – не синтаксису а семантике. сути а не форме.

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

а ХЗ как там этому научить. тут или человек grok-ает и сразу врубается. или не врубается. или активно этому сопротивляется, ога.

для того чтобы научить чему-то контринтуитивному и более эффективному – надо сначала unlearn-ing старому неправильному и пойти на страх и эксперимент чтобы сделать более правильно.

и как-то более объективно а не предвзято и субъективно оценивать эту мифическую «эффективность»

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

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

вообще, например про преподавание информатики. вот А. И. Левенчук (который про системную инженерию и системно-инженерный способ мышления, «рельсы мышления») приводит в своей книжке пример.

про группу «Аттик» и преподавание информатики. что вот у него например в 80х на химфаке РГУ информатика была на 3-4 курсе, не раньше. раньше считалось – что ниасилят, слишком рано давать, это же сложна.

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

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

просто книжки надо было выбирать правильные. например, K&R практика программирования с решебником. довольно практичная книжка.

уже потом, когда комп появился. и когда после программирования «в блокнотике» ручкой на бумажке – я всё это ввёл и оно почти сразу, без отладки и заработало. потому что я думал когда писал и в уме сразу отлаживал.

уже потом появился какой-то более быстрый прогресс. например, тот же паскаль, модула-2, обероны, ада. ну и С++, например.

внезапно, трупопаскакаль который конпелировал в памяти за 10 секунд а не трупоС++ 2.0 который пилил дискету две минуты – мне показался гораздо более практичным. потому что очень сокращял мой «REPL-производственный цикл», пускай и был немного более многословным. а вот шаблоны богу шаблонов через шаблоны чтобы что? пилить дискетку по паре минут потому что оверлеи не влезают в память, хотя программа – это ровно то же самое, только приплюснутыми иероглифами записанная, а не паскакалевскими.

ну и чего добились в этом вашем С++? и где тут прогресс и есть ли оно вообще. в общем, на С++ я тоже программировать умею – только оно мне не очень-то и нравится. неаккуратненько как-то, доктор – как в том анекдоте.

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

начал он этот вопрос системно изучать. что изменилось в преподавании и осмыслении преподавания? оказывается, основные методички писала эта группа «Аттик» в 80-е и 90-е года.

потом они уехали и лет 15 ничего не делалось. а потом они адаптировали свои методички ещё раз упростив изложение – для 2-3 класса, для детского сада 3-5 лет.

и внезапно: выяснилось, что если постепенно структурировать сложность (например, рекурсию подавать постепенно) – что можно обучить и двухлеток которые ещё не умеют читать, не то что программировать.

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

и какой-нибудь КуМир и ЛогоМиры с черепашкой и Ершол и ШАЯ – тоже могут тыкать, легко и невозбранно

просто надо адаптировать изложение под вот такую «целевую аудиторию». это сложно, да. сложнее чем воспроизводить очередную заезженную методичку про синтаксис С++ (а семантика уже не поместилась, лолЪ).

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

особенно тем, кто сильно и учиться не хочет.

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

frunobulax ★★★
()