LINUX.ORG.RU

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

 ,


0

5

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

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

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

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

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

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

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

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

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

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

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

требуется предоставлять готовые прототипы

Или ещё более частое: хренчим MVP на коленке вот прям завтра, лишь бы работало, а потом, может, переделаем нормально.

заказчик решил столбики подвигать

Это прям 100% произойдёт.

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

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

Мечты-мечты… От формулирования запроса скорость выполнения может в сотню раз изменяться.

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

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

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

Вы крутой механик, это понятно.

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

От формулирования запроса скорость выполнения может в сотню раз изменяться.

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

А если речь идет о больших проектах, то там и DBA выделеные будут, которые помогут с такими оптимизациями. Причем даже с привлечением способов, которые вне зоны компетенции разработчика (типа шардирования БД или использования каких-то специфичных для СУБД механизмов).

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

Мечты-мечты… От формулирования запроса скорость выполнения может в сотню раз изменяться.

Может. Но сначала надо собрать приложение которое просто работает, а потом его начать оптимизировать.

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

В прикладном программировании предлагаю использовать хранилище 1С для 1С (которое как SQL, но с объектами и типами-объединениями), AllegroCache для Common Lisp, Mnesia для Erlang, …

А для Java и C# что?

Ну и для C++, если уж Столяров свои нетленки на С++ ваял.

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

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

В какой прокладной программе пользователь «двигает столбики»?

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

Уж не говоря о ситуации: было два телефона контрагента (сделали два поля таблицы), а потом заказчик сказал, что может быть 5-6. И думаешь, то ли делать произвольное количество и вторую таблицу, то ли четыре поля добавлять. Причём сделать VIEW, чтобы строки таблицы отразились в колонки достаточно неудобно.

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

а внезапно выпавший ЦОД - это остановка платежей в отдельно взятом городе.

У вас там что - по ЦОДу на каждый «Мухосранск»? O_O

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

А если речь идет о больших проектах, то там и DBA выделеные будут, которые помогут с такими оптимизациями.

Да. Согласен. Базы данных, их движки - это целый мир, без преувеличения. Есть книга «High Performance MySQL» - которая приоткрывает дверь в мир оптимизации работы с БД на больших объемах данных.

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

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

А для Java и C# что?

java.io.Serializable, атрибут Serializable

Ну и для C++, если уж Столяров свои нетленки на С++ ваял.

mmap

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

В какой прокладной программе пользователь «двигает столбики»?

Например на сайте.

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

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

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

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

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

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

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

Ну справедливости ради, лёгким движением alter table табличка add column additional_data jsonb not null default '{}' наш постгрес превращается в изящный носкуель.

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

расчёт сотых долей секунды.

На SQL вывод списка из сотни клиентов с задолженностью занимал 20 секунд. На DBF с такой же структурой было 0,1 секунды.

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

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

Это точно. У меня в команде был человек с хорошим знанием мира РСУБД. И он как раз занимался подбными вещами. Мы в коде сформулируем SQL-запросы в рамках своего разумения, потом он подключался и доводил это все дело до ума. Иногда после выкуривания мануалов по условному MSSQL-ю или Oracle.

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

На SQL вывод списка из сотни клиентов с задолженностью занимал 20 секунд. На DBF с такой же структурой было 0,1 секунды.

Вы уперлись и не слышите аргументов которые вам уже повторены раз наверно 5. Что-то поменяется если эти аргументы повторить еще 5 раз? - сомневаюсь.

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

На SQL вывод списка из сотни клиентов с задолженностью занимал 20 секунд

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

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

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

Да это важное пояснение. SQL - унифицированный фасад. За фасадом могут стоять совершенно разные технологии (алгоритмы) хранения данных - движки. Каждый движок имеет свои характеристики: какие-то быстрей, какие-то надежней.

Более того DBMS по мимо ответов на запросы еще предоставляет инструменты для администрирования.

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

Например на сайте.

Там они от хранилища вообще не зависят.

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

Есть. Сообщалка у меня так и работает, которую я упоминал выше. Через лисповые write и read с атомарной записью файла. И когда мне понадобилось менять старые и добавлять новые поля это было проще, чем на SQL (в котором пришлось бы придумывать как запихнуть в поле, в котором был собеседник значение типа «группа собеседников»).

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

они там просто чуть с говном меня не съели

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

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

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

Есть. Сообщалка у меня так и работает, которую я упоминал выше.

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

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

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

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

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

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

Там они от хранилища вообще не зависят.

Столбики от хранилища не зависят. Зависит легкость изменения структуры данных этого хранилища под ИЗМЕНЯЮЩИЕСЯ требования заказчика.

Один раз я сделал проект без прослойки SQL, с хранением данных в плоских файлах. Мне хватило. Теперь я люблю SQL.

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

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

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

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

Один раз я сделал проект без прослойки SQL, с хранением данных в плоских файлах. Мне хватило. Теперь я люблю SQL.

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

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

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

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

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

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

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

почему не используется?

Тут я имел в виду терминологию. Терминология не используется. А структура рефакторится постоянно, только без заверения что я из формы 1F привел таблицы к форме 3A - как бы оно там не называлось.

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

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

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

Особенно весело это будет для структур с элементарными std::string внутри.

Проще сделать свой std::string поверх mmap, чем этот std::string нормально сохранить в SQL (какой тип данных для SQL сделать? VARCHAR и иногда терять данные? TEXT и не иметь по нему сортировки? Какую кодировку вписывать? …)

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

Один раз я сделал проект без прослойки SQL, с хранением данных в плоских файлах. Мне хватило. Теперь я люблю SQL.

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

Там была распространенная ситуация «надо было позавчера». И не имея достаточно опыта я быстро склепал решение без подключения SQL, набросав на Ruby текстовых файлов которые на прямую выдавались через просто HTTP сервер.

А потом заказчик решил менять порядок столбцов.

Тогда я начал ценить:

  • Менеджеров
  • SQL

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

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

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

Это хорошо, если такой «специалист» и правда специалист, и стоит он на твоей стороны, а не на стороне «денег» или вообще просто дебил. У нас такой был, правда ещё в моем инженерном прошлом: согласовывал ТКП на подстанцию в соответствии либо с желаниями заказчика, который тоже не особо разбирается в вопросе, либо с пожеланиями своей левой пятки. А потом получалось, что тебе приносят ТЗ на шкаф 400мм шириной, куда надо натолкать оборудования на все 1200, и уже всё «согласовано»… А крайний потом ты, если что, потому что не смог. Собственно, я из этой шараги уволился довольно быстро, и больше в такие места работать не ходил.

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

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

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

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

Там разница вроде только в длине спринта. В аджайле недельные, в скраме двухнедельные. Суть одна → надо за «спринт» нахреначить, а качество не важно.

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

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

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

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

Ещё раз. Я выбираю свои хранилища не для того, чтобы сэкономить доли секунды, а для того, чтобы иметь структуру, которую на таблицах вообще нормально сделать не получается. Я уже приводил пример про бухгалтерию. Или у меня (где я без SQL делал) была задача вывести последние N непустых дней из журнала записей. На SQL бы это было что-то вроде: выбрать начала дней, объединить самих с собой, чтобы получить первые N, объединить с начальной выборкой с повторным вычислением начала дня, … и не факт, что оптимизатор хоть где-то в этом тройном цикле нормально соптимизирует. То есть вместо линейной сложности на SQL получаем примерно квадратичную.

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

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

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

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

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

Это хорошо, если есть что исследовать. Обычно получается что-то вроде «Как согласовывается закупка канцтоваров? Если всё очевидно, просто покупаю, если нет, уточняю у делопроизводителя и кого-нибудь из отдела кадров». Как такое автоматизировать?

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

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

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

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

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

Согласно формулировкам Sendi Metz в ее книге POODR. Agile это философская концепция которая гласит: «Мы знаем о программе меньше всего в начале ее написания».

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

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

Т.е. сначала, по мере необходимости, пишется класс мотоцикла, машины, грузовика. А потом уже из этих классов выводится основа общего класса «Колесное Транспортное Средоство». А не на оборот, как предлагается при проектировании с 0.

Рекомендую книгу.

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

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

У меня личный опыт скорее обратный. При изменении требований заказчика схема SQL мешает, а не помогает. А если плюнуть и загнать во все поля jsonb, то тогда и преимущества SQL идут лесом.

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

в реальном мире не бывает такой структуры.

В смысле? Открываем бумажный гроссбух и видим именно такую структуру. В самом, что ни на есть реальном мире.

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

Это хорошо, если есть что исследовать. Обычно получается что-то вроде «Как согласовывается закупка канцтоваров? Если всё очевидно, просто покупаю, если нет, уточняю у делопроизводителя и кого-нибудь из отдела кадров». Как такое автоматизировать?

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

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

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

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

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

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

Кстати, да. АСУ ТП в этом смысле намного проще. Железяка не спорит, не подтасовывает данные, потому что ей не нравятся и при исследовании не пытается саботировать процесс. С другой стороны, и требования к надёжности на порядок выше.

А что, есть безумцы, которые управление техпроцессами через аджайл делают? Типа «давайте сделаем MVP для управления домной и посмотрим как оно на реальном оборудовании».

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

То есть вместо линейной сложности на SQL получаем примерно квадратичную.

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

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

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

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

при чём тут АСУ ТП? АСУ ТП пишут те же разработчики. в чём разница? разве что оно большое и сложное, как правило. но на то оно и АСУ.

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

Iron_Bug ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)