172 похожих чатов

Что касается того, что код должен быть ближе к данным,

я уже не вспомню, кто впервые об этом сказал, но это фундаментальный принцип=)
Он не может не работать. Просто его кто-то криво применяет.
Кто-то решил, что бизнес-логика должна быть только в одном месте, хотя это абсолютно не так. Не надо всё пихать в БД, или всё пихать в Java код.
Если на уровне базы данных полностью достаточно условий, чтобы провести бизнес операцию, не вижу смысла данные вытягивать на уровень Java кода, и там производить обработку.
Банально обновление данных, давайте рассмотрим.
Как сейчас многие пишут?
findById (id) -> object
setX
setY
setZ
persist(object)
Вот зачем так делать?)
1) Вам нужен лок
2) Если вдруг подвиснет, по какой-то причине, поток приложения, транзакция будет в idle in transaction статусе.
Да, постгрис можно сконфигурить, чтобы он через какое-то врейм убивал такие транзакции и отпускал тем самым локи. Но насколько настроите? На 1-2 сек?
А если у вас нагрузка 10K ops/sec ?:)
В данном случае да, можно удобно переписать на update set..., но это если одна таблица. А если их больше? Если взаимосвязь по целостности данных между ними? Итог: пишете хранимку.

6 ответов

8 просмотров

Представьте, что у вас нет нагрузки 10К ops/sec, но есть сервер-сайд разработчики, умеющие в java делать так, что вероятность того, что "вдруг подвиснет, по какой-то причине, поток приложения" будет не больше той, что такой же поток подвиснет внутри PostgreSQL, и всё встанет на свои места.

Anatoliy-Burov Автор вопроса
Sergey Bezrukov
Представьте, что у вас нет нагрузки 10К ops/sec, н...

Сегодня как раз читал, насчёт Postgres. Поэтому, не готов поверить, что все программисты Java такие:)) зато я знаю, какие реально Java программисты. Я не оптимист, я реалист.

Anatoliy Burov
Сегодня как раз читал, насчёт Postgres. Поэтому, н...

Вы можете быть оптимистом или пессимистом, у нас свободная страна. Но java программистов в свои проекты нанимаю я, лично. Не первых попавшихся, разумеется. И, смею вас уверить, в моей команде, проценте тех java разработчиков, кто в курсе что такое транзакции и как избежать ситуации, когда у вас "вдруг подвиснет, по какой-то причине, поток приложения" внутри этой самой транзакции равен строго 100. "Покупайте наших слонов" (с) 😊

Anatoliy-Burov Автор вопроса

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

Anatoliy Burov
Я тоже не буду спорить с вами, мы сейчас не обсужд...

Это да. Но плата за это: 1. Распыление ответственности за конечный результат. 2. Дополнительные сложности с наймом. 3. Дополнительные сложности с поддержкой. ХП пишутся обычно на довольно маргинальных языках, где нет ни устоявшихся best practices, ни вменяемых статических анализаторов, вообщем там "каждый суслик - агроном". Напомните, кстати - в PG уже появились хотя бы packages для логики в БД, как в Оракле? 4. Необходимость синхронизации принимаемых архитектурных решений на один дополнительный уровень Итого: для меня (для меня лично, не для всего ЗШ) минусы решения "БЛ в хранимках" перевешивают плюсы.

Sergey Bezrukov
Представьте, что у вас нет нагрузки 10К ops/sec, н...

Нет таких разработчиков. Это фантастика.

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
17
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
13
Карта сайта