SlideShare a Scribd company logo
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
Scaling fashionably 
How PostgreSQL helped 
Zalando to become one of the 
biggest online fashion retailers 
in Europe
About me 
Valentine Gogichashvili 
Database Engineer @Zalando 
twitter: @valgog 
google+: +valgog 
email: valentine.gogichashvili@zalando.de
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
One of Europe's largest 
online fashion retailers 
15 countries 
3 fulfillment centers 
13.7+ million active customers 
1.8 billion € revenue 2013 
150,000+ products 
640+ million visits in first half-year 2014
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
Some more numbers 
200+ deployment units (WARs) 
1300+ production tomcat instances 
80+ database master instances 
90+ different database schemas 
300+ developers and 200+ QA and PM 
10 database engineers
Even more numbers 
● > 4.0 TB of PostgreSQL data 
● Biggest instances (not counted before) 
○ eventlogdb (3TB) 
■ 20 GB per week 
○ riskmgmtdb (5TB) 
■ 12 GB per day
Biggest challenges 
● Constantly growing 
● Fast development cycles 
● No downtimes are tolerated
Agenda 
How we 
● access data 
● change data models without downtimes 
● shard without limits 
● monitor
Agenda 
How we 
● access data 
● change data models without downtimes 
● shard without limits 
● monitor
Accessing data 
- customer 
- bank account 
- order -> bank account 
- order position 
- return order -> order 
- return position -> order position 
- financial document 
- financial transaction -> order
Accessing data 
NoSQL 
▶ map your object hierarchy to a document 
▶ (de-)serialization is easy 
▶ transactions are not needed
Accessing data 
NoSQL 
▶ map your object hierarchy to a document 
▶ (de-)serialization is easy 
▶ transactions are not needed 
▷ No SQL 
▷ implicit schemas are tricky
Accessing data 
ORM 
▶ is well known to developers 
▶ CRUD operations are easy 
▶ all business logic inside your application 
▶ developers are in their comfort zone
Accessing data 
ORM 
▶ is well known to developers 
▶ CRUD operations are easy 
▶ all business logic inside your application 
▶ developers are in their comfort zone 
▷ error prone transaction management 
▷ you have to reflect your tables in your code 
▷ all business logic inside your application 
▷ schema changes are not easy
Accessing data 
Are there alternatives to ORM? 
Stored Procedures 
▶ return/receive entity aggregates 
▶ clear transaction scope 
▶ more data consistency checks 
▶ independent from underlying data schema
Java Application 
JDBC 
Database Tables
Java Application 
JDBC 
Stored Procedure API 
Database Database Tables 
Tables
Java Sproc Wrapper 
Java Application 
Java Application 
Sproc Wrapper 
JDBC 
Stored Procedure API 
Database Database Tables 
Tables
CREATE FUNCTION register_customer(p_email text, 
p_gender z_data.gender) 
RETURNS int 
AS $$ 
INSERT INTO z_data.customer (c_email, c_gender) 
VALUES (p_email, p_gender) 
RETURNING c_id 
$$ LANGUAGE 'sql' SECURITY DEFINER; 
SQL 
Java Sproc Wrapper
@SProcService 
public interface CustomerSProcService { 
@SProcCall 
int registerCustomer(@SProcParam String email, 
@SProcParam Gender gender); 
} 
JAVA 
CREATE FUNCTION register_customer(p_email text, 
p_gender z_data.gender) 
RETURNS int 
AS $$ 
INSERT INTO z_data.customer (c_email, c_gender) 
VALUES (p_email, p_gender) 
RETURNING c_id 
$$ LANGUAGE 'sql' SECURITY DEFINER; 
SQL 
Java Sproc Wrapper
@SProcService 
public interface CustomerSProcService { 
@SProcCall 
int registerCustomer(@SProcParam String email, 
@SProcParam Gender gender); 
} 
JAVA 
CREATE FUNCTION register_customer(p_email text, 
p_gender z_data.gender) 
RETURNS int 
AS $$ 
INSERT INTO z_data.customer (c_email, c_gender) 
VALUES (p_email, p_gender) 
RETURNING c_id 
$$ LANGUAGE 'sql' SECURITY DEFINER; 
SQL 
Java Sproc Wrapper
Java Sproc Wrapper 
CREATE FUNCTION find_orders(p_email text, 
OUT order_id int, 
OUT order_created timestamptz, 
OUT shipping_address order_address) 
RETURNS SETOF record 
AS $$ 
SELECT o_id, o_created, ROW(oa_street, oa_city, oa_country)::order_address 
FROM z_data."order" 
JOIN z_data.order_address ON oa_order_id = o_id 
JOIN z_data.customer ON c_id = o_customer_id 
WHERE c_email = p_email 
$$ LANGUAGE 'sql' SECURITY DEFINER; 
SQL 
@SProcCall 
List<Order> findOrders(@SProcParam String email); 
JAVA
Java Sproc Wrapper 
CREATE FUNCTION find_orders(p_email text, 
OUT order_id int, 
OUT order_created timestamptz, 
OUT shipping_address order_address) 
RETURNS SETOF record 
AS $$ 
SELECT o_id, o_created, ROW(oa_street, oa_city, oa_country)::order_address 
FROM z_data."order" 
JOIN z_data.order_address ON oa_order_id = o_id 
JOIN z_data.customer ON c_id = o_customer_id 
WHERE c_email = p_email 
$$ LANGUAGE 'sql' SECURITY DEFINER; 
SQL 
@SProcCall 
List<Order> findOrders(@SProcParam String email); 
JAVA
Stored Procedures 
for developers 
▷ CRUD operations need too much code 
▷ Developers have to learn SQL 
▷ Developers can write bad SQL 
▷ Code reviews are needed
Stored Procedures 
for developers 
▷ CRUD operations need too much code 
▷ Developers have to learn SQL 
▷ Developers can write bad SQL 
▷ Code reviews are needed 
▶ Use-case driven 
▶ Developers have to learn SQL 
▶ Developers learn how to write good SQL
Horror story 
▷ Never map your data manually 
▷ Educate developers 
▷ Educate yourself
Stored Procedure 
API versioning 
Database Tables 
search_path = 
api_v14_23, public; 
api_v14_23
Stored Procedure 
API versioning 
api_v14_23 api_v14_24 
Database Tables 
search_path = 
api_v14_23, public;
Stored Procedure 
API versioning 
api_v14_23 api_v14_24 
Database Tables 
search_path = 
api_v14_23, public; 
search_path = 
api_v14_24, public;
Stored Procedure 
API versioning 
search_path = 
api_v14_24, public; 
api_v14_23 api_v14_24 
Database Tables
Stored Procedure 
API versioning 
search_path = 
api_v14_24, public; 
Database Tables 
api_v14_24
Stored Procedure 
API versioning 
▶ Tests are done to the whole API version 
▶ No API migrations needed 
▶ Deployments are fully automated
Agenda 
How we 
● access data 
● change data models without downtimes 
● shard without limits 
● monitor
Easy schema changes 
PostgreSQL 
▶ Schema changes with minimal locks with: 
ADD/RENAME/DROP COLUMN 
ADD/DROP DEFAULT VALUE 
▶ CREATE/DROP INDEX CONCURRENTLY 
▷ Constraints are still difficult to ALTER 
(will be much better in PostgreSQL 9.4)
Easy schema changes 
Stored Procedure API layer 
▶ Can fill missing data on the fly 
▶ Helps to change data structure 
without application noticing it
Easy schema changes 
● Read and write to old structure 
● Write to both structures, old and new. 
Try to read from new, fallback to old 
● Migrate data 
● Read from new, write to old and new
Easy schema changes 
Schema changes using SQL script files 
● SQL scripts written by developers (DBDIFFs) 
● registering DBDIFFs with Versioning 
● should be reviewed by DB guys 
● DB guys are rolling DB changes on the live system
Easy schema changes 
BEGIN; 
SELECT _v.register_patch('ZEOS-5430.order'); 
CREATE TABLE z_data.order_address ( 
oa_id int SERIAL, 
oa_country z_data.country, 
oa_city varchar(64), 
oa_street varchar(128), ... 
); 
ALTER TABLE z_data."order" ADD o_shipping_address_id int 
REFERENCES z_data.order_address (oa_id); 
COMMIT; 
DBDIFF SQL
Easy schema changes 
BEGIN; 
SELECT _v.register_patch('ZEOS-5430.order'); 
i order/database/order/10_tables/10_order_address.sql 
ALTER TABLE z_data."order" ADD o_shipping_address_id int 
REFERENCES z_data.order_address (oa_id); 
COMMIT; 
DBDIFF SQL
Easy schema changes 
BEGIN; 
SELECT _v.register_patch('ZEOS-5430.order'); 
i order/database/order/10_tables/10_order_address.sql 
SET statement_timeout TO ‘3s’; 
ALTER TABLE z_data."order" ADD o_shipping_address_id int 
REFERENCES z_data.order_address (oa_id); 
COMMIT; 
DBDIFF SQL
Easy schema changes
Easy schema changes
Easy schema changes 
No downtime due to migrations or 
deployment since we use PostgreSQL
Easy schema changes 
One downtime due to migrations or 
deployment since we use PostgreSQL
Horror story 
▷ Invest in staging environments 
▷ Do not become a bottleneck for developers 
▷ Educate developers 
▷ Educate yourself
Agenda 
How we 
● access data 
● change data models without downtimes 
● shard without limits 
● monitor
One big database 
▶ Joins between any entities 
▶ Perfect for BI 
▶ Simple access strategy 
▶ Less machines to manage
One big database 
▷ Data does not fit into memory 
▷ OLTP becomes slower 
▷ Longer data migration times 
▷ Database maintenance tasks take longer
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
Sharded database 
▶ Data fits into memory 
▶ IO bottleneck wider 
▶ OLTP is fast again 
▶ Data migrations are faster 
▶ Database maintenance tasks are faster
Sharded database 
▷ Joins only between entities aggregates 
▷ BI need more tooling 
▷ Accessing data needs more tooling 
▷ Managing more servers needs more tooling
Sharded database 
▷ Need more tooling
Sharding without limits 
Java Application 
Sproc Wrapper 
Stored Procedure API 
Database Database Tables 
Tables
Sharding without limits 
Java Application 
... 
Sproc Wrapper 
Shard 1 Shard 2 Shard 3 Shard N
@SProcCall 
int registerCustomer(@SProcParam @ShardKey CustomerNumber customerNumber, 
@SProcParam String email, 
@SProcParam Gender gender); 
JAVA 
Sharding with Java Sproc Wrapper 
@SProcCall 
Article getArticle(@SProcParam @ShardKey Sku sku); 
JAVA 
@SProcCall(runOnAllShards = true, parallel = true) 
List<Order> findOrders(@SProcParam String email); 
JAVA
Sharding with Java Sproc Wrapper 
Entity lookup strategies 
● search on all shards (in parallel) 
● hash lookups 
● unique shard aware ID 
○ Virtual Shard IDs (pre-sharding)
Agenda 
How we 
● access data 
● change data models without downtimes 
● shard without limits 
● monitor
Monitoring
pg_view
Monitoring 
● Nagios/Icinga was replaced by ZMON2 
● Dedicated 24x7 monitoring team 
● Custom monitoring infrastructure ZMON2
PGObserver
PGObserver
Links 
SProcWrapper – Java library for stored procedure access 
github.com/zalando/java-sproc-wrapper 
PGObserver – monitoring web tool for PostgreSQL 
github.com/zalando/PGObserver 
pg_view – top-like command line activity monitor 
github.com/zalando/pg_view
Thank you!

More Related Content

What's hot

Tale of ISUCON and Its Bench Tools
Tale of ISUCON and Its Bench ToolsTale of ISUCON and Its Bench Tools
Tale of ISUCON and Its Bench Tools
SATOSHI TAGOMORI
 
Scalding - Big Data Programming with Scala
Scalding - Big Data Programming with ScalaScalding - Big Data Programming with Scala
Scalding - Big Data Programming with Scala
Taewook Eom
 
Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"
Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"
Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"
Fwdays
 
How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case
Kai Sasaki
 
Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017
Bob Ward
 
Presto At Treasure Data
Presto At Treasure DataPresto At Treasure Data
Presto At Treasure Data
Taro L. Saito
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container Era
Sadayuki Furuhashi
 
Presto at Facebook - Presto Meetup @ Boston (10/6/2015)
Presto at Facebook - Presto Meetup @ Boston (10/6/2015)Presto at Facebook - Presto Meetup @ Boston (10/6/2015)
Presto at Facebook - Presto Meetup @ Boston (10/6/2015)
Martin Traverso
 
Treasure Data and AWS - Developers.io 2015
Treasure Data and AWS - Developers.io 2015Treasure Data and AWS - Developers.io 2015
Treasure Data and AWS - Developers.io 2015
N Masahiro
 
Fluentd - Flexible, Stable, Scalable
Fluentd - Flexible, Stable, ScalableFluentd - Flexible, Stable, Scalable
Fluentd - Flexible, Stable, Scalable
Shu Ting Tseng
 
Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1
Sadayuki Furuhashi
 
Custom management apps for Kafka
Custom management apps for KafkaCustom management apps for Kafka
Custom management apps for Kafka
Sotaro Kimura
 
Presto+MySQLで分散SQL
Presto+MySQLで分散SQLPresto+MySQLで分散SQL
Presto+MySQLで分散SQL
Sadayuki Furuhashi
 
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowSQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
Bob Ward
 
Introduction to Presto at Treasure Data
Introduction to Presto at Treasure DataIntroduction to Presto at Treasure Data
Introduction to Presto at Treasure Data
Taro L. Saito
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178
Kai Sasaki
 
Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)
Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)
Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)
Antony T Curtis
 
20140120 presto meetup_en
20140120 presto meetup_en20140120 presto meetup_en
20140120 presto meetup_en
Ogibayashi
 
Prestogres internals
Prestogres internalsPrestogres internals
Prestogres internals
Sadayuki Furuhashi
 
Presto at Hadoop Summit 2016
Presto at Hadoop Summit 2016Presto at Hadoop Summit 2016
Presto at Hadoop Summit 2016
kbajda
 

What's hot (20)

Tale of ISUCON and Its Bench Tools
Tale of ISUCON and Its Bench ToolsTale of ISUCON and Its Bench Tools
Tale of ISUCON and Its Bench Tools
 
Scalding - Big Data Programming with Scala
Scalding - Big Data Programming with ScalaScalding - Big Data Programming with Scala
Scalding - Big Data Programming with Scala
 
Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"
Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"
Денис Резник "Моя база данных не справляется с нагрузкой. Что делать?"
 
How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case
 
Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017
 
Presto At Treasure Data
Presto At Treasure DataPresto At Treasure Data
Presto At Treasure Data
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container Era
 
Presto at Facebook - Presto Meetup @ Boston (10/6/2015)
Presto at Facebook - Presto Meetup @ Boston (10/6/2015)Presto at Facebook - Presto Meetup @ Boston (10/6/2015)
Presto at Facebook - Presto Meetup @ Boston (10/6/2015)
 
Treasure Data and AWS - Developers.io 2015
Treasure Data and AWS - Developers.io 2015Treasure Data and AWS - Developers.io 2015
Treasure Data and AWS - Developers.io 2015
 
Fluentd - Flexible, Stable, Scalable
Fluentd - Flexible, Stable, ScalableFluentd - Flexible, Stable, Scalable
Fluentd - Flexible, Stable, Scalable
 
Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1
 
Custom management apps for Kafka
Custom management apps for KafkaCustom management apps for Kafka
Custom management apps for Kafka
 
Presto+MySQLで分散SQL
Presto+MySQLで分散SQLPresto+MySQLで分散SQL
Presto+MySQLで分散SQL
 
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowSQL Server In-Memory OLTP: What Every SQL Professional Should Know
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
 
Introduction to Presto at Treasure Data
Introduction to Presto at Treasure DataIntroduction to Presto at Treasure Data
Introduction to Presto at Treasure Data
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178
 
Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)
Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)
Supercharging MySQL and MariaDB with Plug-ins (SCaLE 12x)
 
20140120 presto meetup_en
20140120 presto meetup_en20140120 presto meetup_en
20140120 presto meetup_en
 
Prestogres internals
Prestogres internalsPrestogres internals
Prestogres internals
 
Presto at Hadoop Summit 2016
Presto at Hadoop Summit 2016Presto at Hadoop Summit 2016
Presto at Hadoop Summit 2016
 

Viewers also liked

PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
Alexey Vasiliev
 
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Ontico
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Ontico
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Ontico
 
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Ontico
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Ontico
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Dmitry Samsonov
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
odnoklassniki.ru
 
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Qualcomm Snapdragon 835 SoC 介紹
Qualcomm Snapdragon 835 SoC 介紹Qualcomm Snapdragon 835 SoC 介紹
Qualcomm Snapdragon 835 SoC 介紹
Low Hong Chuan
 
Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...
Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...
Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...
Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Ontico
 
ST 96Boards Demo
ST 96Boards DemoST 96Boards Demo
ST 96Boards Demo
Linaro
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...
Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...
Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...
Ontico
 
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Ontico
 
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
Ontico
 
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
Ontico
 
Socionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demoSocionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demo
Linaro
 

Viewers also liked (20)

PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
Deep dive into PostgreSQL internal statistics / Алексей Лесовский (PostgreSQL...
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Qualcomm Snapdragon 835 SoC 介紹
Qualcomm Snapdragon 835 SoC 介紹Qualcomm Snapdragon 835 SoC 介紹
Qualcomm Snapdragon 835 SoC 介紹
 
Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...
Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...
Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность ...
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
 
ST 96Boards Demo
ST 96Boards DemoST 96Boards Demo
ST 96Boards Demo
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...
Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...
Нейронные сети на страже индустриальной кибербезопасности / Павел Филонов (Ла...
 
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
 
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
 
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
 
Socionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demoSocionext ARMv8 server SoC chipset demo
Socionext ARMv8 server SoC chipset demo
 

Similar to PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)

Jena University Talk 2016.03.09 -- SQL at Zalando Technology
Jena University Talk 2016.03.09 -- SQL at Zalando TechnologyJena University Talk 2016.03.09 -- SQL at Zalando Technology
Jena University Talk 2016.03.09 -- SQL at Zalando Technology
Valentine Gogichashvili
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
Sean Chittenden
 
Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...
Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...
Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...
Codemotion
 
Switch to Backend 2023
Switch to Backend 2023Switch to Backend 2023
Domain Driven Design Tactical Patterns
Domain Driven Design Tactical PatternsDomain Driven Design Tactical Patterns
Domain Driven Design Tactical Patterns
Robert Alexe
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at last
Holden Karau
 
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
Amazon Web Services
 
Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.
Keshav Murthy
 
SQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API ConsumersSQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API Consumers
Jerod Johnson
 
Voltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. TorshynVoltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. Torshyn
vtors
 
Sql Portfolio
Sql PortfolioSql Portfolio
Sql Portfolio
Shelli Ciaschini
 
Access Data from XPages with the Relational Controls
Access Data from XPages with the Relational ControlsAccess Data from XPages with the Relational Controls
Access Data from XPages with the Relational Controls
Teamstudio
 
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Red Hat Developers
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...
Robert Schadek
 
Adding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASAdding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSAS
sumedha.r
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
MarcinStachniuk
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
distributed matters
 
(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...
(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...
(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...
Amazon Web Services
 
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
NoSQLmatters
 
Evolutionary db development
Evolutionary db development Evolutionary db development
Evolutionary db development
Open Party
 

Similar to PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE) (20)

Jena University Talk 2016.03.09 -- SQL at Zalando Technology
Jena University Talk 2016.03.09 -- SQL at Zalando TechnologyJena University Talk 2016.03.09 -- SQL at Zalando Technology
Jena University Talk 2016.03.09 -- SQL at Zalando Technology
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
 
Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...
Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...
Perchè potresti aver bisogno di un database NoSQL anche se non sei Google o F...
 
Switch to Backend 2023
Switch to Backend 2023Switch to Backend 2023
Switch to Backend 2023
 
Domain Driven Design Tactical Patterns
Domain Driven Design Tactical PatternsDomain Driven Design Tactical Patterns
Domain Driven Design Tactical Patterns
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at last
 
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
 
Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.
 
SQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API ConsumersSQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API Consumers
 
Voltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. TorshynVoltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. Torshyn
 
Sql Portfolio
Sql PortfolioSql Portfolio
Sql Portfolio
 
Access Data from XPages with the Relational Controls
Access Data from XPages with the Relational ControlsAccess Data from XPages with the Relational Controls
Access Data from XPages with the Relational Controls
 
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...
 
Adding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASAdding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSAS
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
 
(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...
(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...
(BDT303) Construct Your ETL Pipeline with AWS Data Pipeline, Amazon EMR, and ...
 
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
 
Evolutionary db development
Evolutionary db development Evolutionary db development
Evolutionary db development
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Recently uploaded

一比一原版(liverpool毕业证)利物浦大学毕业证如何办理
一比一原版(liverpool毕业证)利物浦大学毕业证如何办理一比一原版(liverpool毕业证)利物浦大学毕业证如何办理
一比一原版(liverpool毕业证)利物浦大学毕业证如何办理
mvahxyy
 
Nerul @Call @Girls Whatsapp 9920725232 With High Profile Offer
Nerul @Call @Girls Whatsapp 9920725232 With High Profile OfferNerul @Call @Girls Whatsapp 9920725232 With High Profile Offer
Nerul @Call @Girls Whatsapp 9920725232 With High Profile Offer
vinodkumar03065
 
cyber-security-training-presentation-q320.ppt
cyber-security-training-presentation-q320.pptcyber-security-training-presentation-q320.ppt
cyber-security-training-presentation-q320.ppt
LiamOConnor52
 
sophos-xgs-series-firewall-datasheet.pdf
sophos-xgs-series-firewall-datasheet.pdfsophos-xgs-series-firewall-datasheet.pdf
sophos-xgs-series-firewall-datasheet.pdf
Thanksoan
 
Pune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay later
Pune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay laterPune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay later
Pune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay later
samyanvichadda
 
Zephyr_CertificateOfCompletition_xxx.pdf
Zephyr_CertificateOfCompletition_xxx.pdfZephyr_CertificateOfCompletition_xxx.pdf
Zephyr_CertificateOfCompletition_xxx.pdf
AnielloGiugliano1
 
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
taqyea
 
一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理
一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理
一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理
taqyea
 
Future Trends What's Next for UI UX Design on Websites
Future Trends What's Next for UI UX Design on WebsitesFuture Trends What's Next for UI UX Design on Websites
Future Trends What's Next for UI UX Design on Websites
Serva AppLabs
 
@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...
@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...
@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...
RACHANA GUPTA
 
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptxSlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
NandakumarP24
 
一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理
一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理
一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理
taqyea
 
一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理
一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理
一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理
taqyea
 
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
taqyea
 
Founders Of Digital World Social Media..
Founders Of Digital World Social Media..Founders Of Digital World Social Media..
Founders Of Digital World Social Media..
jom pom
 
PSD to Wordpress Service Providers in 2024
PSD to Wordpress Service Providers in 2024PSD to Wordpress Service Providers in 2024
PSD to Wordpress Service Providers in 2024
Bestdesign2hub
 
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
taqyea
 
How to Choose the Right UIUX Design Service for Optimal Customer Experience
How to Choose the Right UIUX Design Service for Optimal Customer ExperienceHow to Choose the Right UIUX Design Service for Optimal Customer Experience
How to Choose the Right UIUX Design Service for Optimal Customer Experience
Serva AppLabs
 
Jarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirts
Jarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirtsJarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirts
Jarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirts
exgf28
 
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
ffg01100
 

Recently uploaded (20)

一比一原版(liverpool毕业证)利物浦大学毕业证如何办理
一比一原版(liverpool毕业证)利物浦大学毕业证如何办理一比一原版(liverpool毕业证)利物浦大学毕业证如何办理
一比一原版(liverpool毕业证)利物浦大学毕业证如何办理
 
Nerul @Call @Girls Whatsapp 9920725232 With High Profile Offer
Nerul @Call @Girls Whatsapp 9920725232 With High Profile OfferNerul @Call @Girls Whatsapp 9920725232 With High Profile Offer
Nerul @Call @Girls Whatsapp 9920725232 With High Profile Offer
 
cyber-security-training-presentation-q320.ppt
cyber-security-training-presentation-q320.pptcyber-security-training-presentation-q320.ppt
cyber-security-training-presentation-q320.ppt
 
sophos-xgs-series-firewall-datasheet.pdf
sophos-xgs-series-firewall-datasheet.pdfsophos-xgs-series-firewall-datasheet.pdf
sophos-xgs-series-firewall-datasheet.pdf
 
Pune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay later
Pune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay laterPune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay later
Pune @Call @Girls 🛴 XXXXXXXXXX 🛴 available 24*7 cash payment book now pay later
 
Zephyr_CertificateOfCompletition_xxx.pdf
Zephyr_CertificateOfCompletition_xxx.pdfZephyr_CertificateOfCompletition_xxx.pdf
Zephyr_CertificateOfCompletition_xxx.pdf
 
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
 
一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理
一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理
一比一原版(uom毕业证)曼彻斯特大学毕业证如何办理
 
Future Trends What's Next for UI UX Design on Websites
Future Trends What's Next for UI UX Design on WebsitesFuture Trends What's Next for UI UX Design on Websites
Future Trends What's Next for UI UX Design on Websites
 
@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...
@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...
@Call @Girls Vile Parle phone 9920874524 You Are Serach A Beautyfull Dolle co...
 
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptxSlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
 
一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理
一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理
一比一原版(ubc毕业证书)英属哥伦比亚大学毕业证如何办理
 
一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理
一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理
一比一原版(soas毕业证书)英国伦敦大学亚非学院毕业证如何办理
 
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
 
Founders Of Digital World Social Media..
Founders Of Digital World Social Media..Founders Of Digital World Social Media..
Founders Of Digital World Social Media..
 
PSD to Wordpress Service Providers in 2024
PSD to Wordpress Service Providers in 2024PSD to Wordpress Service Providers in 2024
PSD to Wordpress Service Providers in 2024
 
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
 
How to Choose the Right UIUX Design Service for Optimal Customer Experience
How to Choose the Right UIUX Design Service for Optimal Customer ExperienceHow to Choose the Right UIUX Design Service for Optimal Customer Experience
How to Choose the Right UIUX Design Service for Optimal Customer Experience
 
Jarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirts
Jarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirtsJarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirts
Jarren Duran Fuck EM T shirts Jarren Duran Fuck EM T shirts
 
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
 

PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)

  • 2. Scaling fashionably How PostgreSQL helped Zalando to become one of the biggest online fashion retailers in Europe
  • 3. About me Valentine Gogichashvili Database Engineer @Zalando twitter: @valgog google+: +valgog email: valentine.gogichashvili@zalando.de
  • 5. One of Europe's largest online fashion retailers 15 countries 3 fulfillment centers 13.7+ million active customers 1.8 billion € revenue 2013 150,000+ products 640+ million visits in first half-year 2014
  • 8. Some more numbers 200+ deployment units (WARs) 1300+ production tomcat instances 80+ database master instances 90+ different database schemas 300+ developers and 200+ QA and PM 10 database engineers
  • 9. Even more numbers ● > 4.0 TB of PostgreSQL data ● Biggest instances (not counted before) ○ eventlogdb (3TB) ■ 20 GB per week ○ riskmgmtdb (5TB) ■ 12 GB per day
  • 10. Biggest challenges ● Constantly growing ● Fast development cycles ● No downtimes are tolerated
  • 11. Agenda How we ● access data ● change data models without downtimes ● shard without limits ● monitor
  • 12. Agenda How we ● access data ● change data models without downtimes ● shard without limits ● monitor
  • 13. Accessing data - customer - bank account - order -> bank account - order position - return order -> order - return position -> order position - financial document - financial transaction -> order
  • 14. Accessing data NoSQL ▶ map your object hierarchy to a document ▶ (de-)serialization is easy ▶ transactions are not needed
  • 15. Accessing data NoSQL ▶ map your object hierarchy to a document ▶ (de-)serialization is easy ▶ transactions are not needed ▷ No SQL ▷ implicit schemas are tricky
  • 16. Accessing data ORM ▶ is well known to developers ▶ CRUD operations are easy ▶ all business logic inside your application ▶ developers are in their comfort zone
  • 17. Accessing data ORM ▶ is well known to developers ▶ CRUD operations are easy ▶ all business logic inside your application ▶ developers are in their comfort zone ▷ error prone transaction management ▷ you have to reflect your tables in your code ▷ all business logic inside your application ▷ schema changes are not easy
  • 18. Accessing data Are there alternatives to ORM? Stored Procedures ▶ return/receive entity aggregates ▶ clear transaction scope ▶ more data consistency checks ▶ independent from underlying data schema
  • 19. Java Application JDBC Database Tables
  • 20. Java Application JDBC Stored Procedure API Database Database Tables Tables
  • 21. Java Sproc Wrapper Java Application Java Application Sproc Wrapper JDBC Stored Procedure API Database Database Tables Tables
  • 22. CREATE FUNCTION register_customer(p_email text, p_gender z_data.gender) RETURNS int AS $$ INSERT INTO z_data.customer (c_email, c_gender) VALUES (p_email, p_gender) RETURNING c_id $$ LANGUAGE 'sql' SECURITY DEFINER; SQL Java Sproc Wrapper
  • 23. @SProcService public interface CustomerSProcService { @SProcCall int registerCustomer(@SProcParam String email, @SProcParam Gender gender); } JAVA CREATE FUNCTION register_customer(p_email text, p_gender z_data.gender) RETURNS int AS $$ INSERT INTO z_data.customer (c_email, c_gender) VALUES (p_email, p_gender) RETURNING c_id $$ LANGUAGE 'sql' SECURITY DEFINER; SQL Java Sproc Wrapper
  • 24. @SProcService public interface CustomerSProcService { @SProcCall int registerCustomer(@SProcParam String email, @SProcParam Gender gender); } JAVA CREATE FUNCTION register_customer(p_email text, p_gender z_data.gender) RETURNS int AS $$ INSERT INTO z_data.customer (c_email, c_gender) VALUES (p_email, p_gender) RETURNING c_id $$ LANGUAGE 'sql' SECURITY DEFINER; SQL Java Sproc Wrapper
  • 25. Java Sproc Wrapper CREATE FUNCTION find_orders(p_email text, OUT order_id int, OUT order_created timestamptz, OUT shipping_address order_address) RETURNS SETOF record AS $$ SELECT o_id, o_created, ROW(oa_street, oa_city, oa_country)::order_address FROM z_data."order" JOIN z_data.order_address ON oa_order_id = o_id JOIN z_data.customer ON c_id = o_customer_id WHERE c_email = p_email $$ LANGUAGE 'sql' SECURITY DEFINER; SQL @SProcCall List<Order> findOrders(@SProcParam String email); JAVA
  • 26. Java Sproc Wrapper CREATE FUNCTION find_orders(p_email text, OUT order_id int, OUT order_created timestamptz, OUT shipping_address order_address) RETURNS SETOF record AS $$ SELECT o_id, o_created, ROW(oa_street, oa_city, oa_country)::order_address FROM z_data."order" JOIN z_data.order_address ON oa_order_id = o_id JOIN z_data.customer ON c_id = o_customer_id WHERE c_email = p_email $$ LANGUAGE 'sql' SECURITY DEFINER; SQL @SProcCall List<Order> findOrders(@SProcParam String email); JAVA
  • 27. Stored Procedures for developers ▷ CRUD operations need too much code ▷ Developers have to learn SQL ▷ Developers can write bad SQL ▷ Code reviews are needed
  • 28. Stored Procedures for developers ▷ CRUD operations need too much code ▷ Developers have to learn SQL ▷ Developers can write bad SQL ▷ Code reviews are needed ▶ Use-case driven ▶ Developers have to learn SQL ▶ Developers learn how to write good SQL
  • 29. Horror story ▷ Never map your data manually ▷ Educate developers ▷ Educate yourself
  • 30. Stored Procedure API versioning Database Tables search_path = api_v14_23, public; api_v14_23
  • 31. Stored Procedure API versioning api_v14_23 api_v14_24 Database Tables search_path = api_v14_23, public;
  • 32. Stored Procedure API versioning api_v14_23 api_v14_24 Database Tables search_path = api_v14_23, public; search_path = api_v14_24, public;
  • 33. Stored Procedure API versioning search_path = api_v14_24, public; api_v14_23 api_v14_24 Database Tables
  • 34. Stored Procedure API versioning search_path = api_v14_24, public; Database Tables api_v14_24
  • 35. Stored Procedure API versioning ▶ Tests are done to the whole API version ▶ No API migrations needed ▶ Deployments are fully automated
  • 36. Agenda How we ● access data ● change data models without downtimes ● shard without limits ● monitor
  • 37. Easy schema changes PostgreSQL ▶ Schema changes with minimal locks with: ADD/RENAME/DROP COLUMN ADD/DROP DEFAULT VALUE ▶ CREATE/DROP INDEX CONCURRENTLY ▷ Constraints are still difficult to ALTER (will be much better in PostgreSQL 9.4)
  • 38. Easy schema changes Stored Procedure API layer ▶ Can fill missing data on the fly ▶ Helps to change data structure without application noticing it
  • 39. Easy schema changes ● Read and write to old structure ● Write to both structures, old and new. Try to read from new, fallback to old ● Migrate data ● Read from new, write to old and new
  • 40. Easy schema changes Schema changes using SQL script files ● SQL scripts written by developers (DBDIFFs) ● registering DBDIFFs with Versioning ● should be reviewed by DB guys ● DB guys are rolling DB changes on the live system
  • 41. Easy schema changes BEGIN; SELECT _v.register_patch('ZEOS-5430.order'); CREATE TABLE z_data.order_address ( oa_id int SERIAL, oa_country z_data.country, oa_city varchar(64), oa_street varchar(128), ... ); ALTER TABLE z_data."order" ADD o_shipping_address_id int REFERENCES z_data.order_address (oa_id); COMMIT; DBDIFF SQL
  • 42. Easy schema changes BEGIN; SELECT _v.register_patch('ZEOS-5430.order'); i order/database/order/10_tables/10_order_address.sql ALTER TABLE z_data."order" ADD o_shipping_address_id int REFERENCES z_data.order_address (oa_id); COMMIT; DBDIFF SQL
  • 43. Easy schema changes BEGIN; SELECT _v.register_patch('ZEOS-5430.order'); i order/database/order/10_tables/10_order_address.sql SET statement_timeout TO ‘3s’; ALTER TABLE z_data."order" ADD o_shipping_address_id int REFERENCES z_data.order_address (oa_id); COMMIT; DBDIFF SQL
  • 46. Easy schema changes No downtime due to migrations or deployment since we use PostgreSQL
  • 47. Easy schema changes One downtime due to migrations or deployment since we use PostgreSQL
  • 48. Horror story ▷ Invest in staging environments ▷ Do not become a bottleneck for developers ▷ Educate developers ▷ Educate yourself
  • 49. Agenda How we ● access data ● change data models without downtimes ● shard without limits ● monitor
  • 50. One big database ▶ Joins between any entities ▶ Perfect for BI ▶ Simple access strategy ▶ Less machines to manage
  • 51. One big database ▷ Data does not fit into memory ▷ OLTP becomes slower ▷ Longer data migration times ▷ Database maintenance tasks take longer
  • 54. Sharded database ▶ Data fits into memory ▶ IO bottleneck wider ▶ OLTP is fast again ▶ Data migrations are faster ▶ Database maintenance tasks are faster
  • 55. Sharded database ▷ Joins only between entities aggregates ▷ BI need more tooling ▷ Accessing data needs more tooling ▷ Managing more servers needs more tooling
  • 56. Sharded database ▷ Need more tooling
  • 57. Sharding without limits Java Application Sproc Wrapper Stored Procedure API Database Database Tables Tables
  • 58. Sharding without limits Java Application ... Sproc Wrapper Shard 1 Shard 2 Shard 3 Shard N
  • 59. @SProcCall int registerCustomer(@SProcParam @ShardKey CustomerNumber customerNumber, @SProcParam String email, @SProcParam Gender gender); JAVA Sharding with Java Sproc Wrapper @SProcCall Article getArticle(@SProcParam @ShardKey Sku sku); JAVA @SProcCall(runOnAllShards = true, parallel = true) List<Order> findOrders(@SProcParam String email); JAVA
  • 60. Sharding with Java Sproc Wrapper Entity lookup strategies ● search on all shards (in parallel) ● hash lookups ● unique shard aware ID ○ Virtual Shard IDs (pre-sharding)
  • 61. Agenda How we ● access data ● change data models without downtimes ● shard without limits ● monitor
  • 64. Monitoring ● Nagios/Icinga was replaced by ZMON2 ● Dedicated 24x7 monitoring team ● Custom monitoring infrastructure ZMON2
  • 67. Links SProcWrapper – Java library for stored procedure access github.com/zalando/java-sproc-wrapper PGObserver – monitoring web tool for PostgreSQL github.com/zalando/PGObserver pg_view – top-like command line activity monitor github.com/zalando/pg_view