Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Испытание поединком:
PostgreSQL vs MySQL
Александр Чистяков
Даниил Подольский
inCaller.org
Методика тестирования
• Синтетический паттерн «социальная сеть»
Методика тестирования
• Синтетический паттерн «социальная сеть»
• Пользователи
Методика тестирования
• Синтетический паттерн «социальная сеть»
• Пользователи
• Друзья
Методика тестирования
• Синтетический паттерн «социальная сеть»
• Пользователи
• Друзья
• Сообщения
Методика тестирования
Схема базы, таблица 1
CREATE TABLE users (
user_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(64) NOT NULL
) DEFAULT CHARSET=utf8;
CREATE UNIQUE INDEX users_user_name ON users (user_name);
Методика тестирования
Схема базы, таблица 2
CREATE TABLE messages (
msg_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
ctime TIMESTAMP NOT NULL,
message VARCHAR(16384) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX friends_user_id ON messages (user_id);
CREATE INDEX messages_ctime ON messages (ctime);
Методика тестирования
Схема базы, таблица 3
CREATE TABLE friends (
user_id BIGINT,
friend_id BIGINT,
FOREIGN KEY (user_id) REFERENCES users (user_id),
FOREIGN KEY (friend_id) REFERENCES users (user_id)
) DEFAULT CHARSET=utf8;
CREATE INDEX friends_user_id ON friends (user_id);
CREATE UNIQUE INDEX friends_user_id_friend_id
ON friends (user_id, friend_id);
Методика тестирования
• Пушка
Методика тестирования
• Пушка
• Самописная
Методика тестирования
• Пушка
• Самописная
• На языке Go
Методика тестирования
• Пушка
• Самописная
• На языке Go
• Тест-план описывается на YAML
Методика тестирования
• Пушка
• Самописная
• На языке Go
• Тест-план описывается на YAML
• Метрики снимаются с пушки с помощью Prometheus
Методика тестирования
• Пушка
• Самописная
• На языке Go
• Тест-план описывается на YAML
• Метрики снимаются с пушки с помощью Prometheus
• Метрики снимаются только с пушки
Методика тестирования
• Пушка
• Самописная
• На языке Go
• Тест-план описывается на YAML
• Метрики снимаются с пушки с помощью Prometheus
• Метрики снимаются только с пушки
• Опубликована на
https://github.com/inCaller/mysql_vs_postgresql
• Pull-requests are welcome
Стенд
• 4 машины для серверов СУБД
CPU: Intel Xeon E5-2630v3
OS: Ubuntu 14.04-server x86_64
Chasis: Dell R430
RAID level:Perc H730
RAM size: 192GB
HDDs info: 2x960GB SSD
Стенд
• 2 машины для пушек
CPU: Intel Xeon E3-1231v3
OS: Ubuntu 14.04-server x86_64
Chasis: Dell R220
RAM size: 32GB
HDDs info: 2x480GB SSD
Стенд
• 1 машина для метрик
CPU: Intel Xeon E3-1231v3
OS: Ubuntu 14.04-server x86_64
Chasis: Dell R220
RAM size: 32GB
HDDs info: 2x480GB SSD
Стенд
Оборудование
предоставлено компанией
Episode 1: мы запустились
• База пуста
• Конфиг серверов СУБД дефолтный
• Скорость поступления запросов максимальная
(#оченьпопулярныйпроект)
• Одновременных клиентов – сколько база выдержит
Episode 2: пора потюнить
• База НЕ пуста
• Конфиг серверов СУБД оптимизирован
• Скорость поступления запросов максимальная
(#оченьпопулярныйпроект)
• Одновременных клиентов – 128
• Оптимизированные конфиги опубликованы на
https://github.com/inCaller/mysql_vs_postgresql
Episode 3: все, кто хотел, получили
• Количество новых пользователей существенно упало
Episode 4: last in first out
• Выборка messages отсортирована по времени
Episode 5: зачем так много сразу
• Выборка messages лимитирована в размере (100 строк)
Вопросы?

More Related Content

Mysql vs postgresql