Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie
whatsupbros
Новичок
whatsupbros
Рейтинг
+0.90
Автор не входит в состав редакции iXBT.com (подробнее »)
Ещё раз — спасибо за отличный обзор отличной платы без этих ваших лампочек и радиаторов с вензелёчками и яркими цветами. Очень хочется видеть больше действительно качественных вещей для людей, которые не стремятся сделать из своего системного блока новогоднюю ёлку.
2) Создай Хранимка_версия_2 и дергай в ОБНОВЛЕННОЙ ноде вторую версию. Или тебе надо пояснять за версионирование API?
---
Ты задолбал свои ярлыки развешивать, «из прошлого». Если ты весь из себя адепт контейнерной архитектуры, будь им, тебе никто этого не запрещает. Если ты не умеешь в версионность компонентов, просто признай это
---
1) EBR
2) Твои ноды всё равно берут данные из одного источника. Тебе никто не запрещает по-прежнему спавнить свои ноды и дальше. Какая разница что у тебя будет отваливаться в Bad Weather Scenarios, запрос в базу или запрос на вызов хранимки.
---
Ты всё ещё не понимаешь что я имею ввиду и споришь сам с собой.
И? Запрос тоже выполняется на ресурсах базы. А еще можно врубить Function Result Cache, и твоя хранимка будет кешировать результат в памяти и отдавать его на инвокеров моментально. Или ты собрался таблицы целиком в кэш тащить? Ах да, даже в этом случае у Оракла есть in-memory опция, которая в колонкоориентированном формате данные в памяти держит, и ты за инвалидацию кеша не страдаешь.
--
> Так как могу отдать из кеша
Не городи ерунды, если у тебя СУБД лежит, ты не можешь гарантировать актуальности своего кеша никаким образом, и отдавать результат из кеша в данном случае — это выстрел себе же в колено.
--
> Кстати, скомпоновать хранимку, как отдельній образ и потом тиражировать ее — а? Как сделать?
А хранилище данных ты тоже тиражируешь? Зачем тебе её тиражировать, если источник всё равно один? Какую-то глупость опять в качестве примера привёл, и опять притянутую за уши откуда-то. Но даже если тебе это так надо сделать, так у СУБД есть способы горизонтального масштабирования тоже — у Оракла это RAC, Постгря из коробки в кластере умеет работать, и ты с реплики читать можешь. При этом тебе не надо ничего «тиражировать» руками — оно всё растиражировано уже за тебя. Воспринимай хранимку не как «код», а как «данные», и все встанет на свои места. Нет никакой разницы, дёргать данные запросом, или вызовом хранимки (с точки зрения потребителя).
---
Хранимка не создает нагрузки — это такой же враппер, как и метод твоей рест апишечки. Нагрузку создает запрос, который эта хранимка выполняет. Если у тебя один запрос кладет базу, ты хоть замасштабируйся свои микросервисы, ты уже огреб, никакая нода из твоих 100500 не будет возвращать результата. Здесь не о чем рассуждать.
---
И я ничего не говорил о больших монолитах. Хранимки чувствуют себя одинаково, что в большом монолите, что в маленьком датасторе микросервиса, они, так сказать, architecture agnostic.
---
Я попытался объективно показать, что у инструмента есть область применения, ты в ответ «канари деплоймент», «лучше вообще их не писать», «это косяк проектирования». Если ты не умеешь их готовить — не используй. Но это не означает, что инструмент говно.
---
Ну в корне ты не прав, если считаешь, что использование хранимок ограничивается «базой». Если речь про Оракл — любая хранимка легким движением руки превращается в REST endpoint примерно за минуту, если ты поставил ORDS (Oracle REST Data Services). И масштабировать ORDS горизонтально можно хоть до бесконечности, если тебе так надо. Другие программные интерфейсы тоже есть (JDBC, ODP.NET, cx_Oracle) — не понимаю в чем здесь проблема возникла. Все эти способы весьма «малой кровью».
---
К другим «набросам»:
* Стабильность — у хранимок она выше, чем у прямых SQL запросов, потому что пишут их обычно люди, которые знают как работать с данными
* Масштабируемость — скейлинг хранимок пропорционален скейлингу самой базы
* Безопасность — она выше у хранимок, это дополнительный уровень инкапсуляции, что позволяет навесить дополнительное логирование, обработчик ошибок и более точечно настроить права доступа при необходимости
* Возможность построить CI/CD — liquibase, flyway вам в помощь
* Возможность «низкого входа» — не очень понимаю сути этого тезиса, но я бы к базам профанов не подпускал и близко, тем более если речь идет об ынтырпрайзе — pay-per-loser здесь сильно выше в долгосрочной перспективе, чем условный «профит» от уменьшения pay-per-user
---
Архитектура не на хранимках, а с использованием хранимок. У каждого инструмента есть область его применения. Микроскопом забивать гвозди тоже можно, но не стоит, это очень дорого и неэффективно. Также как и совать HDFS-решения налево и направо. А рассуждаю я как раз с точки зрения System Architect, и понимаю что такое скейлинг системы со временем, и его меинтеинабилити.
---
По моему опыту схема, когда поддержкой работы с данными занимается команда, которая знает как работать с данными, гораздо эффективнее в общем случае, чем когда у тебя 100500 разных доменных команд, каждая из которых начинает пулять свои говно-запросы в базу и потом обрабатывать выборку построчно и параллельно рождая отдельный запрос на каждую строку выборки. Большинство Spring-разработчиков, херачащих свои рест-апишечки вообще не вдупляют как там запросы писать, им главное JSON в респонс-боди захерачить, и готово.
---
Мой мессадж был не в том, чтобы бизнес логику писать в базе, мой мессадж был в том, что «хранимки» как класс — это инструмент, имеющий применение, и даже в нашу эру очень интеллектуальных оптимизаторов запросов, порой эффективнее обработать данные в несколько шагов в PL/SQL, чем героически херачить монструозный SQL на 10 страниц, к которому оптимизатор не знает с какой стороны потом подойти.
---
Если ваша цель — понаваливать на хранимки ради того, чтобы понаваливать — окей. Компетенция «писателя хранимок» — это компетенция разработчика баз данных наряду с умением моделировать схему данных или оптимизации запросов — здесь нет ничего сверхестесственного.
---
О каком «нуле» при переиспользовании кода вы здесь говорите — мне тоже неясно. Как раз таки грамотно написанная хранимка — это ключ к переиспользованию кода другими компонентами, так как хранимки по определению — это инкапсуляция кода без изменения его интерфейса, это дополнительный уровень безопасности и оптимизации (так как хранимка лежит в базе в скомпилированном и распарсенном виде).
---
Надо вам дёргать хранимку как обычную таблицу в базе — Pipelined Table Functions вам в помощь.
--
Надо вам дёргать другой сервис в ходе транзакции — окей, дайте сервису-инвокеру нормальный фидбек, и дёргайте ваш сервис нотификаций/отправки емейлов. А лучше делайте это асинхронно — один сервис пишет транзакцию, другой мониторит некую табличку на факт необходимости отправки нотификации, и взводит флажок/флажки, что нотификашка ушла.
---
В реальной жизни даже отчёты, которые ходят по очень большим объёмам данных для вывода результатов, обычно выводят не так уж много данных сами по себе. И PL/SQL нужен не там, где у вас вся база на клиента отправляется, а как раз в таких случаях. И решать вопросы PL/SQL на SQL это такое же извращение, как ходить по курсору FOR LOOP и для каждой строки запускать отдельный UPDATE.
---
PL/SQL или любые другие хранимки гораздо более эффективны, когда как раз надо реализовать древовидную логику обработки данных, когда на промежуточном результате одного запроса в зависимости от каких-то условий запускается следующий запрос. Таким образом вы исключаете оверхед по памяти, сети и вводу-выводу на несколько порядков.
---
И если вы так хотите размазывать транзакции по куче компонент — никто не запрещает этого делать — просто используйте эту хранимку как часть вашей распределённой транзакции.
---
Но если вы считаете, что «хранимки это прошлый век» только потому, что они не такие модные, как херачить пайплайны на Кафке — ну фигово, че. Всё зависит от уровня абстрации, на котором вы работаете. Слишком сложные SQL запросы станут таким же легаси через год, потому что никто не будет в них вникать. Ваша размазанная логика по десятку компонент станет легаси ещё раньше, так как компоненты меняются, и также никто не будет вникать в их связность уже через полгода. Такой подход копает яму вам куда глубже, чем использование хранимок для поддержания атомарности выполняемой транзакции.
--
Даже интересно сколько бы времени прошло до того момента как это появилось бы в следующем релизе «отечественной» ОС/СУБД, если бы во «вражеском» мастер-дистрибутиве (или оригинальном «чужом» потсгресе) в код какую-то закладку бы добавили.
--
Неужели они действительно не понимают, что называть форк системы с открытым исходным кодом «собственными» разработками это как минимум глупо? А может быть и опасно (смотри выше). Вряд ли они прям досконально изучают все изменения ядра при ребейзе их продукта.
--
И ладно бы собственных разработок не было, а так то они есть, особенно если говорить о СУБД — YDB, Clickhouse, Tarantool
--
Если бы вам довелось поработать в действительно крупной компании и поиметь дело с обеими СУБД, и с тем как например в них обеих организована та же мультиверсионность данных для реализации уровней изоляции транзакций, вы бы поняли о чем речь. А если коснуться оптимизатора с обратной связью от исполнителя запроса, что отсутствует напрочь в Постгре, то там вообще лес непаханный.
--
И это только то, что касается Core Database, потому что как здесь уже справедливо было замечено, Оракл это гораздо больше, чем просто СУБД, они предлагают полноценную платформу, также как и Амазон, например. Если взять только спектр работы с данными, то это как минимум Oracle Database, MySQL, Oracle Data Integrator, Oracle Exadata, Oracle Rest Data Services, Oracle Application Express, Oracle BI, Oracle GoldenGate и так далее.
Копнув глубже, вы осознаете, что Java, Oracle Linux, GraalVM, Virtual Box и куча других решений для мидлвари тоже они.
--
Так что можете радоваться дальше импортозамещению Оракла на «отечественный» Постгрес Про, хотя ничего хорошего все эти события, увы, не сулят.
пока на рынке не появится таких же весомых конкурентов с чисто российской СУБД, которые захотят оспорить. Но таковых пока нет
"
YDB — распределнная реляционная СУБД с полной поддержкой ACID, что делает ее сильно привлекательнее, чем тот же Постгрес в современных реалиях. Целиком разработка яндекса, действительно «отечественный» продукт, недавно выложенный в опенсорс — почему не хайпить ее? Сложнее миграция? Так вам всё равно добрые 80% переписывать.
--
Clickhouse — тоже разработка яндекса, опенсорс
--
Tarantool — разработка ВК/МейлРу
—
В принципе все сегменты покрыты вполне адекватными продуктами. Зачем называть немного допиленный форк СУБД с открытым кодом «отечественной разработкой»? Чтобы что? Утереть кому-то нос?