LINUX.ORG.RU

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

 ,


0

6

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

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

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

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

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

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

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

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

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

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

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

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

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

Это как раз легко. SELECT DISTINCT movie_id FROM movie_tag WHERE tag_id = &id.

Это был ответ на

На языке программирования это тривиально:

[m for m in movies if m.tags & include  == include and m.tags & exclude == set()]

Как это сделать в SQL и во сколько раз медленнее оно будет работать?

Ну да, гибкость хребта защитана.

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

В смысле, вопрос был про питон?

[m for m in movies if id in m.tags]
monk ★★★★★
()
Ответ на: комментарий от monk

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

Это тебе только так кажется.

На самом же деле твои собственные аргументы звучат примерно так: «Соберу самолет на гвоздях, всё будет нормально. А в местах повышенных нагрузок прихвачу дополнительно хомутами.»

liksys ★★★★
()

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

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

это для тех кто имеет данные и требование хранить их удобно для обработки

Файловая система имеет данные и требование хранить их удобно для обработки? Прокси-сервер имеет данные и требование хранить их удобно для обработки? Система контроля версий имеет данные и требование хранить их удобно для обработки?

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.