Comments 13
за счёт батчёвой обработки чтений
а можно либо русский термин оставить, либо английский? сейчас это франкенштейн.
А для Postgresql появился какой то адекватный открытый инструмент для администрирования/разработки? DBeaver тормозит под мак ужасно. Нужна полноценная возможность например написания триггеров и тп.
Попробуй этот:
SQL Workbench/J is a DBMS-independent, cross-platform SQL query tool. It is written in Java and should run on any operating system that provides a Java Runtime Environment.
(не путать с почти одноименной тулзой для мускуля)
Я на него перешёл с PL/SQL Developer лет 10 назад, когда окончательно ушёл с оракла. Кто знаком с этим, тому сразу зайдёт. DBeaver жутко тормозной и неудобный.
Для администрирования (в части мониторинга состояния сервера БД) можно использовать универсальный инструмент Dimension-UI https://github.com/akardapolov/dimension-ui
Позволяет смотреть метрики в режиме реального времени, историю и ad-hoc запросы делать к данным временных рядов без написания SQL (no code).
pgModeler супер для разработки, на хабре есть статьи как самому собрать.
Если коротко: нормальное графическое проектирование, легко хранится в git, умеет сравнить реальную БД и модель и в обе стороны сгенерировать изменения, включая герерацию DDL.
DataGrip хорош, но лицензии сейчас в нашу страну не продают, к сожалению.
если в URL используются числовые идентификаторы (например, /users/5), остальные легко угадать (/users/6, /users/7). С UUID (/users/f47ac10b-58cc-4372-a567-0e02b2c3d479) это невозможно
UUID любой версии угадать сложнее, но всё ещё возможно - логи на прокси/утечки/брутфорс. Независимо от типа идентификатора безопасностью секьюрных данных пренебрегать не стоит.
А появились какие-то варианты соорудить из постгреса аналог Galera Cluster(или Percona Xtradb Cluster) для mysql?
Это честный мульти-мастер, перед которым можно поставить простой L4 балансер типа хапрокси и иметь автоматическую HA совершенно без проблем - выведение даже основного сервера из кластера и ввод обратно не создают простоев в обслуживании, да и делаются по большей части автоматически.
Ещё бы знать, что вы вкладываете в «честный мультимастер», ведь в 8 мускуле даже ACID, а точнее Repeatable Read нечестный (в MariaDB это исправили)
но какие-то варианты существуют:
Citus
PostgresPro Shardman
EDB Postgres
YugabyteDB
И пара особых историй из которых может получиться мультимастер:
OrioleDB (beta) которая может складывать данные в S3
Neon в котором разделили слои хранения и вычисления
что вы вкладываете в «честный мультимастер»
При параллельном запуске 2-х транзакций на разных серверах кластера:
уровень изоляции между ними будет не хуже, чем при запуске на одном сервере
если они не создают конфликта - обе успешно выполнятся
клиент не получит успешное завершение транзакции, пока изменённые данные не окажутся на всех серверах (тут galera replication читерит, они окажутся на всех серверах, но в памяти, а ещё не на диске)
Это позволяет как распределять нагрузку, так и спокойно убирать или добавлять обратно сервера для приложения. Достаточно поставить хелсчек, чтобы новые транзакции на выводимый сервер не шли, и подождать, пока старые доработают. Новые при этом начинают параллельно выполнятся на других серверах, и ничего не ломается.
Ага, проброс ALTER TABLE на все узлы кластера вы не ждёте )
уровень изоляции между ними будет не хуже, чем при запуске на одном сервере
Ни Mysql, ни Postgres даже не пытаются обещать что-то круче Snapshot Isolation, например, явно выставленный Serializable в масштабах кластера превратится в Snapshot Isolation.
На практике же, Галера
возможно гарантирует Read Committed, но даже это не точно (начало, дополнение)
ослабление уровня изоляции до Repeatable Read, вероятно, повышает уровень изоляции (звучит бредово, но таков уже результат)
2022 пытались сделать Snapshot Isolation, но кажется забили
У Постгреса тоже не всё гладко, хотя и не столь плохо:
физическая репликация гарантирует только Parallel Snapshot Isolation, это похуже чем Snapshot Isolation.
в 17 версии появились двухфазные коммиты, но я не могу утверждать гарантируют ли они Snapshot Isolation. Плюс они не очень-то удобны в использовании.
Shardman эту проблему вроде решил (см. CSN). Вероятно решил и EnterpriseDb т.к. предлагает даже CRDT, но оба они для богатых.
если они не создают конфликта - обе успешно выполнятся
В бесплатной версии у Mysql дела чуть получше т.к. можно переслать `balance = balance + 50` и избежать конфликта.
Для богатых, EnterpriseDB превратит конфликтные запросы `balance = 100` и `balance = 200` в неконфликтные `balance = balance - 50` и `balance = balance + 50`.
клиент не получит успешное завершение транзакции, пока изменённые данные не окажутся на всех серверах
Тут у постгреса ответ один: двухфазный коммит.
У платных форков и Галеры есть кворум.
спокойно убирать или добавлять обратно сервера для приложения
У постгреса с этим... неудобно: либо сторонние тулзы используй, либо платные форки, либо учитывай требования бесплатных форков.
Я немного не понял про oauth2. Теперь можно настраивать доступ к базе через oauth2 или можно организовать подтягивание учетных данных из Keycloak, или организовать системное хранилище в postgres?
настраивать доступ, была статья https://habr.com/ru/companies/tantor/articles/923582/
Чем хорош Postgres 18?