Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Добрый день. Вообщем имеется таблица заказов (Orders) с атрибутами Id_Order, Amount (Сумма заказа) и таблица содержащая в себе Id_Dish(ид блюда) , Id_Order(id заказа), Number (количество заказанных блюд) и Cost (стоимость блюда с учетом количества). Мне нужно написать триггер, чтобы сумма, формируемая из значений Cost была передана в Таблицу Orders атрибуту Amount. Например заказ 1, заказаны блюда 1 2 и 3 на суммы 100, 200 и 300. Итог 600. Нужно как то передать это значение заказу номер 1 в таблицу Orders ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 20:54 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
GgestДобрый день. Вообщем имеется таблица заказов (Orders) с атрибутами Id_Order, Amount (Сумма заказа) и таблица содержащая в себе Id_Dish(ид блюда) , Id_Order(id заказа), Number (количество заказанных блюд) и Cost (стоимость блюда с учетом количества). Мне нужно написать триггер, чтобы сумма, формируемая из значений Cost была передана в Таблицу Orders атрибуту Amount. Например заказ 1, заказаны блюда 1 2 и 3 на суммы 100, 200 и 300. Итог 600. Нужно как то передать это значение заказу номер 1 в таблицу Orders Таки вот Вам мои мысли вслух. Вставка строки заказа в таблицу строк - один триггер. Изменение number или cost в строке заказа - другой триггер. Удаление строки из заказа - еще один триггер (ну или один триггер на все случаи жизни). При этом триггер должен считать не только вставленную/измененную/удаленную строку из заказа, но все прочие строки этого же заказа, и сумму общую по всем строкам такого заказа пересчитанную - записать в Amount таблицы Orders. Тут ведь какая загвоздка. ПО, которое работает с БД, вполне вероятно не знает о таких приколах. И пересчет стоимости блюда (взяли и подняли ценники на все салаты) приведет к изменению cost на всех строках всех заказов за период изменения, в которых есть салаты. А в это время еще один заказ, где был салат, редактируют, взяли и меняют количество блюд. Нужно подумать, как бы на блокировку не нарваться. Или разруливать такие блокировки. Или неудачные попытки по таймауту отвалившиеся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 23:16 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Вопрос к автору: триггер вешаем на какую таблицу и при каких условиях должен срабатывать? PS Мне кажется в принципе некорректной постановка задачи. Триггер можно повесить либо на первую либо на вторую таблицу. Это, например, зависит от порядка вставки записей в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 23:43 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
GgestДобрый день. Вообщем имеется таблица заказов (Orders) с атрибутами Id_Order, Amount (Сумма заказа) и таблица содержащая в себе Id_Dish(ид блюда) , Id_Order(id заказа), Number (количество заказанных блюд) и Cost (стоимость блюда с учетом количества). Мне нужно написать триггер, чтобы сумма, формируемая из значений Cost была передана в Таблицу Orders атрибуту Amount. Например заказ 1, заказаны блюда 1 2 и 3 на суммы 100, 200 и 300. Итог 600. Нужно как то передать это значение заказу номер 1 в таблицу Orders Подозреваю, что архитектурно решение не продумано. Возможно, ваши манипуляции с заказами/блюдами лучше обернуть в процедуры, заполняющие все необходимые поля, а прямую запись в таблицы исключить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 09:50 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPПри этом триггер должен считать не только вставленную/измененную/удаленную строку из заказа, но все прочие строки этого же заказа, и сумму общую по всем строкам такого заказа пересчитанную - записать в Amount таблицы Orders.Серьезно? Вы различаете sum() и, например, min() или max()? Или вам все едино? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 10:27 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Ggest, Примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 10:37 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
GgestМне нужно написать триггер Это вы так сами решили или вам так сказали сделать? А если отказаться от триггеров? На месте ТСа, я бы использовал более "ламповый" метод в виде отдельной (или нескольких) ХП, которые инкапсулируют всю логику внутри себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 10:47 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Есть умельцы - на триггерах пишут всю бизнес-логику. А чё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 14:36 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invmAndy_OLAPПри этом триггер должен считать не только вставленную/измененную/удаленную строку из заказа, но все прочие строки этого же заказа, и сумму общую по всем строкам такого заказа пересчитанную - записать в Amount таблицы Orders.Серьезно? Вы различаете sum() и, например, min() или max()? Или вам все едино? 1. Серьезно. 2. Различаю. 3. Зависит от ситуацию. Есть 3 подварианта. 3.1. Все едино. 3.2. Что-то едино, что-то в разнобой. 3.3. Ничего не едино. Еще вопросы, коллега? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 15:07 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовЕсть умельцы - на триггерах пишут всю бизнес-логику. А чё? Это таки да. А потом бывают случаи. Когда переносят базу в архив, оставляют в боевой часть строк заказов и часть заголовков заказов (Orders), потом начинают что-либо исправлять - и оказывается, что автоматическая процедура "видит" строки, по которым заголовков уже нет. А триггеру нужно работать, он же не просто так написан. Ну а дальше вообще случаи, когда нужно что-то задним числом переписать в ценникам строк заказов, но историческую сумму Amount - которую оплатил получатель заказа из нескольких блюд - уже не трогать. А триггеру нужно работать, он будет "трогать" все Amount. В общем, жизнь на триггерах это некошерно, я тут с Вами полностью согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 15:10 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP1. Серьезно.Пошли на принцип? Ну успехов. Andy_OLAP2. Различаю.А я думаю, что нет. Или только визуально различаете. Иначе бы не было вот этих мыслей вслух - 21275905 Если приведенный пример не убедил, попробуйте на досуге поразмышлять - почему в индексированных представлениях допустимо использование sum(), но недопустимо min() и max(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 16:01 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invm, Допустим, блюда добавляются в БД по одному (по мере ввода заказа), а не все сразу. Для заказа из 10 блюд мы получим 10 Inserts + 10 Update. Расчет суммы по окончании формирования заказа - 10 Inserts + 1 (Update+Select). Вероятно, это создаст меньшую нагрузку. То же самое при отмене (как-то раз наблюдал в кассе супермаркета последовательную отмену заказа из нескольких десятков позиций). P.S. В ваш триггер нужно добавить обработку Orders.Amount = Null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:18 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.Евгений, не продолжайте а потом в вашем магазине выключают свет и все раходятся и потом потные dba генерируют ваше "окончание заказа" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:28 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийДопустим, блюда добавляются в БД по одному (по мере ввода заказа), а не все сразу. Для заказа из 10 блюд мы получим 10 Inserts + 10 Update. Расчет суммы по окончании формирования заказа - 10 Inserts + 1 (Update+Select). Вероятно, это создаст меньшую нагрузку.Допустим. Согласно вашей логике, невозможно узнать сумму заказа не завершив его формирование. Это очень удобно. .ЕвгенийP.S. В ваш триггер нужно добавить обработку Orders.Amount = Null.Вам доподлинно известно, что Amount nullable? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:38 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invmДопустим. Согласно вашей логике, невозможно узнать сумму заказа не завершив его формирование. Это очень удобно. В БД - нет. В интерфейсе - да. invm.ЕвгенийP.S. В ваш триггер нужно добавить обработку Orders.Amount = Null.Вам доподлинно известно, что Amount nullable? А вам - что нет? Возможны оба варианта работы с Null, но согласитесь, что надо было указать хотя бы один. TaPaK.Евгений, не продолжайте а потом в вашем магазине выключают свет и все раходятся и потом потные dba генерируют ваше "окончание заказа" Запах перезаводящих заказы с нуля потных менеджеров вам нравится больше. Что ж, каждому свое. P.S. Возможно, я вам когда-то наступил на ногу? Не припомню. Какая жалость... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:53 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.Евгений, т.е. не продолжаейте совсем авторА вам - что нет? Возможны оба варианта работы с Null, но согласитесь, что надо было указать хотя бы один. так ведь и Amount,Cost не сказано, что число! а он с ними такое творит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 17:57 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийВ БД - нет. В интерфейсе - да.Да, это очень грамотно - считать сумму и в БД и в интерфейсе. Интереснее станет потом, когда, допустим, уже после внедрения появятся правила расчета скидки по итоговой сумме, или какие-то ограничения по сумме, или еще что-то подобное. И плевать, что придется дорабатывать и БД, и интерфейс. Главное - не пользоваться триггерами. .ЕвгенийВозможны оба варианта работы с Null, но согласитесь, что надо было указать хотя бы один.Вот я и указал - для случая, когда Amount not null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 18:28 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
А что это за бизнес-модель, где промежуточные наборы хранят на сервере? Клиент при таком раскладе будет спамить запросы на сервер. Не слишком здорово, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 19:01 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invmДа, это очень грамотно - считать сумму и в БД и в интерфейсе. Интереснее станет потом, когда, допустим, уже после внедрения появятся правила расчета скидки по итоговой сумме, или какие-то ограничения по сумме, или еще что-то подобное. Я правильно понял, что вы бы расположили расчет и применение бизнес-правил в триггере? Мне кажется это неправильным по следующим причинам (навскидку): - Увеличивается время транзакции и блокировки; - Разнообразные проблемы с расчетом заказа по разным версиям бизнес-правил (начали по одной, продолжили по другой; необходимость перерасчета и др.) Они в принципе решаемы, но результат выглядит для меня экстремальной порнографией. Я бы проектировал применение бизнес-правил как функцию (в идеале сервис программируемой бизнесами BRMS) , которая бы читала свои настроечные таблицы, но никак не касалась данных заказов; к которой обращались бы и приложение, и хп фиксации заказа; на входе которой ожидались параметры заказа, а возвращались - коэффициенты и модификаторы. invmГлавное - не пользоваться триггерами. Честно признаюсь, что обычно не нахожу применения триггерам в своем аспекте проектирования систем. Но это не означает, что я ослеплен ненавистью к ним. TaPaKтак ведь и Amount,Cost не сказано, что число! а он с ними такое творит Вы настойчиво постите сомнительного рода комментарии к моим сообщениям. Быть может, мне довелось наступить вам не на ногу, а между? В стартовом сообщении значения полей Amount и Cost заданы числовыми, над ними выполняются арифметические операции. Кроме того, смысл понятий "сумма заказа" и "стоимость блюда" подразумевает их числово-денежное наполнение. Это очевидное, разумное и достаточное основание для того, чтобы считать указанные поля числовыми. В то же время не было никаких аналогичных оснований для ограничения Amount not null вплоть до ответа invm на мое сообщение об этом. Владислав КолосовА что это за бизнес-модель, где промежуточные наборы хранят на сервере? Клиент при таком раскладе будет спамить запросы на сервер. Не слишком здорово, наверное. Не клиент; скорее менеджер, официант и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 20:08 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийЯ правильно понял, что вы бы расположили расчет и применение бизнес-правил в триггере?Правильно. .ЕвгенийУвеличивается время транзакции и блокировки;Если не применять бизнес-правила в той же транзакции, то зачем нужны такие правила? А их применение в этой же транзакции любыми средствами увеличивает длительность транзакции. .ЕвгенийРазнообразные проблемы с расчетом заказа по разным версиям бизнес-правилЭто проблема квалификации разработчика. Говнокод останется говнокодом, вне зависимости от типа модуля, в котором он расположен. .ЕвгенийЯ бы проектировал применение бизнес-правил как функцию (в идеале сервис программируемой бизнесами BRMS) , которая бы читала свои настроечные таблицыЧто мешает применять эту функцию в триггере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 21:40 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invmЕсли не применять бизнес-правила в той же транзакции, то зачем нужны такие правила? Мне сложно представить ситуацию, когда бизнес-правила нужны актуальными с точностью до транзакции. Я думаю, что в подавляющем большинстве случаев будет приемлема схема из нескольких последовательных транзакций: Т1 Чтение бизнес-правил -- Применение бизнес-правил к элементу заказа Т2...Тn Запись элемента заказа Tn+1 Фиксация заказа invmЭто проблема квалификации разработчика. Говнокод останется говнокодом, вне зависимости от типа модуля, в котором он расположен. Не согласен. Эта проблема в первую очередь архитектора, отвечающего за такие характеристики модуля, как зацепление и связность. В хорошо спроектированном модуле сложно говнокодить и легко вычищать говнокод. Именно по этой причине я отстаиваю отделение бизнес-правил от записи элементов заказа, а тех, в свою очередь, от записи заказа целиком; говнокод в одном месте не скажется на другом. invm.ЕвгенийЯ бы проектировал применение бизнес-правил как функцию (в идеале сервис программируемой бизнесами BRMS) , которая бы читала свои настроечные таблицыЧто мешает применять эту функцию в триггере? Повторю свое мнение еще раз - это избыточные блокировки и избыточное слияние нескольких транзакций в одну, причем нарастающее снежным комом. Например, понадобится добавить логирование (например, чтобы найти источник ошибки: бизнес-правила, элемент, заказ) - это пойдет в триггер вместе со своими проблемами (многопоточная последовательная запись в таблицу лога), которые будут тормозить операцию в целом (в т.ч. блокировать таблицу заказов). У хп логирование можно как держать внутри, так и при необходимости вынести наружу (хп возвращает результат, который передается в служебную хп логирования). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 22:51 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийМне сложно представить ситуацию, когда бизнес-правила нужны актуальными с точностью до транзакции. Я думаю, что в подавляющем большинстве случаев будет приемлема схема из нескольких последовательных транзакций: Т1 Чтение бизнес-правил -- Применение бизнес-правил к элементу заказа Т2...Тn Запись элемента заказа Tn+1 Фиксация заказаСогласованность данных на протяжении от Т1 до Tn как будете обеспечивать? Не говоря уже о необходимости либо в T2 знать о примененности Т1, либо безусловно применять уже возможно примененное в Т1. В конечном итоге, такой подход приводит к необходимости наличия специальной инфраструктуры для обеспечения его корректного функционирования..ЕвгенийВ хорошо спроектированном модуле сложно говнокодитьГовнокодить легко в любом месте. Достаточно следовать принципу "сделаю так, чтобы работало здесь и сейчас, а потом хоть трава не расти". .ЕвгенийПовторю свое мнение еще раз - это избыточные блокировки и избыточное слияние нескольких транзакций в однуЭто с вашей точки зрения оно избыточное, с точки зрения согласованности данных вовсе не избыточное. А страх блокировок был оправдан пока не существовало способов избавится от клонфликтов "читатель-писатель". .ЕвгенийНапример, понадобится добавить логирование (например, чтобы найти источник ошибки: бизнес-правила, элемент, заказ) - это пойдет в триггер вместе со своими проблемами (многопоточная последовательная запись в таблицу лога)Достаточно воспользоваться имеющимися возможностями по организации асинхронных операций, а не городить огород вида "У хп логирование можно как держать внутри, так и при необходимости вынести наружу (хп возвращает результат, который передается в служебную хп логирования)." и не боятся потом, что некий умник эту хп забудет вызвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 11:58 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invmСогласованность данных на протяжении от Т1 до Tn как будете обеспечивать? Не говоря уже о необходимости либо в T2 знать о примененности Т1, либо безусловно применять уже возможно примененное в Т1. В конечном итоге, такой подход приводит к необходимости наличия специальной инфраструктуры для обеспечения его корректного функционирования. Не очень понял суть вопроса. Поясню еще раз предлагаемый мной вариант: при открытии нового заказа в клиентское ПО ими сравнивается и при необходимости обновляется набор бизнес-правил (способ непринципиален: набор формул, функция SQL в локальную БД, подключаемая DLL и т.п.) - это Т1. Далее клиентское ПО вносит в БД элементы заказа согласно этому набору (Т2...Тn). Наконец, по окончании ввода происходит фиксация, выполняющая проверки (в т.ч. версий бизнес-правил) и при необходимости - пересчет заказа (Тn+1). Собственно, запихивая бизнес-логику в триггер, вы заставляете ее выполниться в БД для каждого элемента. А я предлагаю сделать всего один раз (локальные выполнения на БД не влияют) . Да и сомневаюсь я, что при развитой бизнес-логике возможно обойтись без фиксации, одним только триггером с inserted+deleted. А если невозможно, то триггер не нужен. invmГовнокодить легко в любом месте. Достаточно следовать принципу "сделаю так, чтобы работало здесь и сейчас, а потом хоть трава не расти". Категорически не соглашусь. На основе моего опыта считаю, что обойтись без говнокода в относительно маленькой и локализованной задаче значительно проще, чем в относительно большой и сцепленной с кучей посторонних модулей. Те же микросервисы придуманы не просто так. Впрочем, я не стану вас переубеждать, обычно это неблагодарное занятие. invmЭто с вашей точки зрения оно избыточное, с точки зрения согласованности данных вовсе не избыточное. Незафиксированный заказ не требует полной внутренней согласованности. Очень транзакционно, замечу. invmДостаточно воспользоваться имеющимися возможностями по организации асинхронных операций, а не городить огород ... и не боятся потом, что некий умник эту хп забудет вызвать. Вы говорите про сервис брокер? Это еще одна потенциальная точка отказа и дополнительная нагрузка на сервер (вместо одного insert). Как же, как же, помню я одно свое устройство на работу, где первый заданный вопрос мне был, имею ли я опыт работы с брокером, а то что-то в нем на бою завалилось. Дополнительный вызов логирования без труда инкапсулируется внутри слоя взаимодействия с БД, после чего проблема забывчивости полностью теряет свою остроту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 13:19 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийСобственно, запихивая бизнес-логику в триггер, вы заставляете ее выполниться в БД для каждого элемента.Именно. Или для всех сразу. Независимо от желаний и склероза пишущих код, обеспечивая тем самым ее безусловную проверку и откат транзакции если это потребуется. .ЕвгенийВпрочем, я не стану вас переубеждать, обычно это неблагодарное занятие.Вот-вот, и я аналогично. .ЕвгенийНезафиксированный заказ не требует полной внутренней согласованности.Это всего лишь ваше частное мнение. .ЕвгенийВы говорите про сервис брокер? Это еще одна потенциальная точка отказа и дополнительная нагрузка на сервер (вместо одного insert).Само собой. Зато разнообразные "слои для работы с БД" и т.п., компенсирующие незнание разработчиком матчасти, это не точки отказа. Никогда не понимал стонов о производительности людей, которые без зазрения совести выгребают и обрабатывают данные в столь любимых ими "слоях" или напрямую в интерфейсе, когда можно было бы прекрасно обойтись только средствами БД. .ЕвгенийДополнительный вызов логирования без труда инкапсулируется внутри слоя взаимодействия с БД, после чего проблема забывчивости полностью теряет свою остроту.До первого случая, когда потребуется работать с БД мимо "слоя взаимодействия с БД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 15:56 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
invmИменно. Или для всех сразу. Независимо от желаний и склероза пишущих код, обеспечивая тем самым ее безусловную проверку и откат транзакции если это потребуется. Эта независимость прекрасно решается ограничением прямого доступа к таблицам, работой с данными только через слой хп и т.п. invmДо первого случая, когда потребуется работать с БД мимо "слоя взаимодействия с БД". Я не понимаю, что именно вы хотели сказать. Может быть, вы собрались работать мимо всех слоев OSI выше канального? Давайте не будем считать самоцелью непосредственный доступ к низкоуровневым объектам. Такой доступ обычно требуется, когда архитектура системы закрывает нужные потребителю объекты или значимо замедляет его работу. Допустим, слой хп закрывает запись в таблицы. Однако, как я показал выше, триггер может тормозить ее. invm.ЕвгенийНезафиксированный заказ не требует полной внутренней согласованности.Это всего лишь ваше частное мнение. Вы подчеркнули это так, словно готовы сослаться на признанного авторитета или безукоризненно логичное рассуждение, обосновывающее противоположную позицию. Нет? invmСамо собой. Зато разнообразные "слои для работы с БД" и т.п., компенсирующие незнание разработчиком матчасти, это не точки отказа. Никогда не понимал стонов о производительности людей, которые без зазрения совести выгребают и обрабатывают данные в столь любимых ими "слоях" или напрямую в интерфейсе, когда можно было бы прекрасно обойтись только средствами БД. Я понимаю крик вашей души. Более того, испытываю соблазн усесться рядом и тоже выплакаться на тему того, как мои коллеги парсят хмл из полутора тегов десериализацией. Потом добавить, что управляемый код - это полная лажа и тормоз коммунизма, зато ассемблер - это круто, привести тому собственноручно написанные примеры, обняться и поделиться жилетками. Однако потом я вспоминаю, что живу в реальном мире, где пони не какают радугой. Что если я всерьез наеду на вышеупомянутых коллег, то мне придется делать работу за них. Что моя цель - не абсолютная оптимизация, а работающее решение, поэтому оптимизировать нужно лишь то, что этому мешает. Что ресурсы локальных компов пользователей в разумных пределах - дармовые (говорю про обычные пк). Что экономить в первую очередь нужно ресурсы БД и серверов, ибо масштабирование обязательно заставит обратить на них внимание, и лучше позже, чем раньше. Проблемы с серверными ресурсами будут общими проблемами, проблемы клиентской части - только ее разработчиков, сколько бы там ни было промежуточных слоев - хоть один, хоть тысяча и один (меньше одного не будет, в этом я абсолютно уверен). Поэтому я разменяю вызов хп логирования на какой-нибудь желаемый фронтовиками формат хмл и буду чувствовать себя вполне удовлетворенным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2018, 23:11 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=158&tid=1690044]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
109ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 444ms |

| 0 / 0 |
