Postgresql
Зачем
Решение РСУБД для хранилищ данных.
Термины
- RTO - Recovery Time Objective
Типы данных
- Enum
- Работает быстро на больших объемах, синтаксический сахар, реализовано как отдельная таблица с join по сути
JSONB
- JSONB
- работает очень быстро, особенно в контексте бизнес автоматизации
- но требует индексов правильных (GIN, Hash, btree)
- Его удобно использовать для тех случаев, когда его данные не используются для работы БД, его можно легко и просто сразу передать веб-страницам
- Если же по данным осуществляются операции БД, например, фильтрация, сортировка, группировка и объединения, то такие данные лучше хранить вне jsonb, в структуре самой БД
- Это связано с тем, что Postgres не умеет собирать статистику по внутренностям jsonb, он рассматривает его только целиком, что обычно совершенно бессмысленно (можно отключать, так как статистика по jsonb сильно раздувает таблицу статистики)
- проблемы (2020) с OLTP нагрузкой
- примеры запросов (json_each, jsonb_to_record, jsonb_to_recordset) по JSONB
- JSON
- Сравнение с MongoDB
- MongoDB
- возможность легкого горизонтального масштабирования уже заложена в ее архитектуру
- нет полного ACID
- Встроенный валидатором схемы
- обычно работает быстрее в том случае, если в операции задействованы различные объекты
- MongoDB
Плюсы:
- Просто хранить не строго типизированную структуру
- Поддерживает индексы
Минусы:
- Сохранение медленее (конвертация в бинарный формат)
- Нет валидации на уровне БД
- Продолжается оптимизации производительности на уровне PGSQL
- Нужно применять правильные индексы на больших объемах данных
- Нужно тестировать с CITUS поддержку JSONB
Функции
- Timeseries Data (pg_partman extension)
- schema and data comparison tool for PostgreSQL
- Партиционирование (Сеционирование) вертикальное - built in PGSQL
- Партиционирование горизонтальное - Шардирование CITUS
Management
- PgAdmin
- dbeaver
Replication
- hot-standby потоковая репликация
- log shipping
- Config
Log Shipping
- Master (Primary) -> Slave (standby or secondary)
- accept connections and serves read-only queries is called a Hot Standby Server
- warm standby
- log shipping methodology
- File based log shipping - asynchronous in nature and logs are shipped after they have been written to disk and thus may increase the RTO
- Record base log shipping (Streaming Replication) - data loss can be minimised
Reporting Tools
Hith Availability
- кластер PostgreSQL на WAL репликации
- на repmgr в Docker и Testcontainers
- Patroni
- Stolon
- необходимо Distributed Key-Value хранилище (DCS_: etcd, Consul, ZooKeeper и Kubernetes API
Мониторинг
Плюсы-минусы
- опытный специалист, обладающий достаточными компетенциями в настройке и оптимизации CentOS, файловой системы и самого PostgreSQL.
- На юникс быстрее чем виндовс
Паттерны
ETL PSQL2MSSQL
- ODBC Driver 17, 18
- DBLink
- массовая загрузка mssql bcp on linux
- export the source data into text files
- importing them using BCP or BULK INSERT
- Проблемы драйвера ODBC
- mssql sqlcmd on linux
- support any T-SQL? exec stored procedure
- sqlpipe - free, open-source tool that can transfer the result of a query from one database to another:
- A command-line tool
- A long-lived server with an API and UI
- MSSQL read data from PGSQL by Linked Server
- массовая загрузка mssql bcp on linux
- Ручной + Job
- WS
ETL MSSQL2PSQL
Benchmark
- Open Source Tool
Блокировки Locks
- Locky type by DELETE
- Явные блокировки - режимы блокировки на уровне
- таблицы
- все и режимы блокировки работают на уровне таблицы, даже если имя режима содержит слово «row»; такие имена сложились исторически.
- строки
- таблицы
- системное представление pg_locks
Миграция с MS SQL
Миграция с простоем
Миграция “большим взрывом” с простоем
- Free
- Через CSV
- Эскпорт CSV MS SQL bcp export
- Импорт CSV Copy PostgresSQL
- PostgresSQL TDS Foreign data wrapper for MS SQL
- Pgloader
- sqlserver2pgsql Perl
- great for one off database migrations, but it’s not suitable for use cases that require continuous data synchronization between the source and target databases for an extended period of time.
- Пример docker + Pentaho Kettle
- Bulk Loader?
- Высокая скорость вставки (2-10 раз)
- 120к строк\сек
- 1Mb менее чем за 10сек
- SQLPipe + Airflow, Flower Docker пример
- AWS Database Migration Service (DMS)
- TODO DMS
- SQL скрипты на схему и данные через CSV
- Через CSV
Миграция без простоя Zero Downtime
Постепенная, итеративная миграция - Zero Downtime
- Free
- AWS Babelfish - минус: схемы БД не изменяются
- плагин PostgreSQL - поддержка T-SQL синтаксиса (приложение можно не переписывать сразу при смене СУБД) по протоколу TDS при миграции на СУБД PostgreSQL
- план:
- генерируется схема БД из MS SQL Managment
- Compass проверяет схему на возможность миграции на PostgreSQL Babelfish
- генерируется схема БД в PostgreSQL - минус повторяет схему MSSQL без рефакторинга схем БД
- миграция данных через AWS DMS
- приложение направляет запросы в Babelfish в формате MSSQL T-SQL, BabelFish конвертирует их в формате PostgreSQL
- CDC Debezium используя Снимки (snapshots)
- AWS SCT + Database Migration Service (DMS) - минус: схемы БД не изменяются
- TODO DMS
- Пример MSSQL2PGSQL
- Пример
- Пример
- AWS Babelfish - минус: схемы БД не изменяются
- Commercial
- Без изменений исходного приложения Albatros + AWS Babelfish + SQL Pipe сравнение с AWS DMS и sqlserver2pgsql
- SQL Server to PostgreSQL converter need equal structures DB
- MSSQL-PostgreSQL Sync need equal structures DB
Версии
- 13
- 14