LINUX.ORG.RU

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

 ,


0

3

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

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

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

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

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

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

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

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

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

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

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

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

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

Здесь не наследование потребно, а дерево, которого в SQL никогда не будет.

В смысле?

Документ базовый класс. Конкретные документы наследники. Аналогично с аналитиками.

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

в памяти твоя структура раскладывается тривально.

Разумеется. Поэтому и пишу, что либо надо в прокрустово ложе SQL влазить, либо этот самый SQL вообще не использовать.

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

Вместо O(1) имеем доступ O(log N)

Это какой же у тебя N, что для тебя это важно? На практике O(logN) и O(1) это одно и то же, и куда важней коэффициенты. Например 1000 * N это куда хуже, чем 10 * log_10{N} для N < 10^100.

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

если счет дебета = «10.01», то аналитика1 ссылается на склад, аналитика2 на товар, аналитика3 на документ прихода

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

Но это же вроде дурной тон считается.

Зачем же в таблицах поля делать ссылками на разное в зависимости от значения какого-то другого поля?

Я б почти наверняка делал отдельные поля «ссылка на склад», «ссылка на товар», «ссылка на приход». А уж какое брать - это уже на уровне клиента анализируется.

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

На практике O(logN) и O(1) это одно и то же, и куда важней коэффициенты. Например 1000 * N это куда хуже, чем 10 * log_10{N} для N < 10^100.

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

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

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

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

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

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

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

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

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

Зачем же в таблицах поля делать ссылками на разное в зависимости от значения какого-то другого поля?

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

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

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

Вот этот тезис я и продвигаю.

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

мы такое впихивали в SQL, когда писали бухгалтерию для ЖД. правда, это было давно, ещё в 2000 году.

впихивали через таблицы, которые определяли связи между разными сущностями (документами и прочим).

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

Я б почти наверняка делал отдельные поля «ссылка на склад», «ссылка на товар», «ссылка на приход». А уж какое брать - это уже на уровне клиента анализируется.

Итого почти для каждой таблицы в БД будет по колонке. Примерно 300 колонок. Это как раз вариант с мегатаблицей. Хорошо для запросов: можно делать и дату в диапазоне и склад в списке и всё подобное. Плохо для места на диске и времени записи: в каждой записи около 300 полей заполнены NULL.

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

неправильно. ООП тут притянуто за уши. не пытайтесь его втащить в БД. это не получится. или получится, но очень всрато.

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

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

документы все разные. какое тут «наследование»?

У нас есть поле типа «документ». Как без наследования указать какие элементы в этом поле могут быть (накладная может, а товар нет, например)?

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

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

вы просто начали есть слона не с той стороны.

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

бухгалтеры не работают с понятием «абстрактный документ». они работают с проводками

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

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

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

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

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

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

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

всегда ищут объяснения случившемуся. даже если они не знают причин, они их придумают

просто люди так устроены

Но если их текст пересказала ты, то это уже

описано историческими свидетелями. и это не пропаганда, не объяснения, а просто факты. никакой оценки тут нет

Верно?

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

нет. тексты истории пишут современники этой самой истории. это называется источники.

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

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

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

Есть таблицы документов Invoice, Rests, Operation, Inventarization

Есть таблица проводок Transactions.

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

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

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

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

тексты истории пишут современники

на чём основана твоя вера в то, что они не искажают события своим восприятием (намеренно или неосознанно)?

а «объяснения» истории просто не нужны

включая сотни твоих собственных на этом форуме?

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

В общем верно, просто думал на примере образ тоже вызовет ассоциации с Римом когда те вроде бы рядом, но не совсем там. Когда мозги кривые и хочется натянуть сову на глобус получается только если лицемерить, то есть находясь в безопасности, но в реальности это не работает - вот о чем я. Кишечник воображает себя крутым потому что он больше, но стоя спиной невозможно выглядеть крутым. На других это может и срабатывало, но когда существо радо тому что может угрожать это не то же самое что условия джунглей, то есть в полях как на войне. Я массу агрессивных идиотов видел и до них доходит только если их мордой в пол уложить и стучать лбом об пол, пока не дойдет очевидное. Агрессивные идиоты это римляне, которые имея командование возомнили себя крутыми. У них общество им помогало и потому они расслабились и обабились как греки пока у них православие не пошло против гомосексуальных отношений. Эта тема просто куда ни ткни у иностранцев обычной была - Япония, Италия, да весь Запад по сути - пытаются вернуть мужественность имея зажратое состояние когда все приелось. Главное это то что они заняв территорию не могли ее удержать следуя правилу контроля основной точки. Это возможно, если ты правда сильнее, то есть расчет на местных. Римляне строили дороги и все бы шло как они себе представляют до того момента, пока не придут кто-то типа русских и просто разнесет их как кегли. У них все построено на запугивании, что как дрогнет враг можно нападать, а с русскими этого не происходит и когда они понимали что все будет серьезно, то сразу они текут. Может не все, но достаточно тех кто не выдержит. Возможно римляне были похожи на американцев, готовые воевать только когда все к этому располагает. А у нас всегда было принято ломиться до последнего в атаку, потому что немного не дожав значит не победил и все усилия зря были приложены. Вот они и называли наших варварами. Им столицу разнесли, а они остались империей. Потому что только русские не собирались их переделывать, чтобы подчинить себе. Империй не будет, но аналогия имеется - наши идеи все же симпатичны большинству людей в мире. Западу предложить нечего в то же самое время. Мы прекрасно понимаем что они лишь делают хорошую мину при плохой игре. Демократы - те бы сдохли и убили бы всех лишь бы не отойти от власти, хотя этим же попрекают других. У них там перестройка, если что, раз новости не склонны пролистывать. Трамп давит на демократов и рушит их структуры, созданные для запрещения владения масс медией в количестве максимум 39%, а это как раз в основном вменяемые люди. У нас такое же есть, но к примеру для ограничения доли иностранного участия скажем в охране - там не более 25% по-моему. Ну то есть явно видно что демократы везде наложили мин и сейчас начнут давить на их марионеток, продвигающих их деструктивные идеи, потому что Трамп понимает что иначе они все в болото уйдут и это может даже к лучшему для нас. Найти общий язык с тем кто этого хочет я думаю наши в состоянии. Я общался с итальянцем одним. Внезапно был очень адекватным, но оболванивание там идет под диким прессом.

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

ну, они их не искажают, а воспринимают со своей точки зрения. это понятно.

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

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

и тогда не было привычки искажать намеренно

это уже искажение или ещё нет?

остаётся открытым вопрос: твои пересказывания истории — это и есть додумывание и «ненужно»?

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

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

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

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

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

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

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

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

искажать в истории Древнего Рима

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

я стараюсь пересказывать без искажений

Осмелюсь предположить, что и другие стараются. Однако вы заявляете, что вы — единственная, кому это удаётся. Правильно понимаю?

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

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

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

Ну до этого высера я был Столярове куда лучшего мнения. Казался таким чудаковатым профессором из фольклора. Но прочитав этот высер - в голову приходит капитан Жан-Люк Пикар с его легендарным фейспалмом и фраза «ну дебил»….

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

нет, ответственности никакой нет. никто никому ничего не должен.

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

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

главный объект работы бухгалтерии - проводка.

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

Вот, чтобы было наглядно, колонка Документ:

https://toto-school.ru/800/600/http/easyprog.ru/_images/1cBlond/1c2/1c2.ht6.gif

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

Я и пытаюсь понять, как ты эту таблицу соответствий представляешь.

monk ★★★★★
()