All streams
Search
Write a publication
Pull to refresh

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 супер для разработки, на хабре есть статьи как самому собрать.

https://pgmodeler.io/

Если коротко: нормальное графическое проектирование, легко хранится в 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?

Sign up to leave a comment.