Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский

548 views

Published on

Кто пишет тезисы, тот и прав, а кто выступает на стороне PostgreSQL, тот прав вдвойне. Когда я (Александр Чистяков) в момент старта очередного нового проекта узнал, что мой старший коллега (Даниил Подольский) хочет использовать MySQL в продакшне, я встал и сказал себе: "Хватит это терпеть!". Вероятно, я сказал слишком громко, потому что Даниил услышал, и мы еще с час обсуждали вопросы применимости РСУБД в современных проектах в общем чате, пугая Заказчика.

Тем не менее, нам ничего не оставалось, кроме как договориться о публичном поединке. Мы представим на суд общественности результаты нагрузочного тестирования двух этих замечательных РСУБД, поставленных в одинаковые, но жесткие условия современного веб-проекта. Мы идентифицировали несколько распространенных профилей нагрузки, и написали генератор нагрузки на (не очень) любимом нами языке Golang. В остальном правила поединка просты: правил нет никаких, и я уже придумал пару сценариев использования, на которые MySQL просто не способен!

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский

  1. 1. Испытание поединком: PostgreSQL vs MySQL Александр Чистяков Даниил Подольский inCaller.org
  2. 2. Методика тестирования • Синтетический паттерн «социальная сеть»
  3. 3. Методика тестирования • Синтетический паттерн «социальная сеть» • Пользователи
  4. 4. Методика тестирования • Синтетический паттерн «социальная сеть» • Пользователи • Друзья
  5. 5. Методика тестирования • Синтетический паттерн «социальная сеть» • Пользователи • Друзья • Сообщения
  6. 6. Методика тестирования Схема базы, таблица 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);
  7. 7. Методика тестирования Схема базы, таблица 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);
  8. 8. Методика тестирования Схема базы, таблица 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);
  9. 9. Методика тестирования • Пушка
  10. 10. Методика тестирования • Пушка • Самописная
  11. 11. Методика тестирования • Пушка • Самописная • На языке Go
  12. 12. Методика тестирования • Пушка • Самописная • На языке Go • Тест-план описывается на YAML
  13. 13. Методика тестирования • Пушка • Самописная • На языке Go • Тест-план описывается на YAML • Метрики снимаются с пушки с помощью Prometheus
  14. 14. Методика тестирования • Пушка • Самописная • На языке Go • Тест-план описывается на YAML • Метрики снимаются с пушки с помощью Prometheus • Метрики снимаются только с пушки
  15. 15. Методика тестирования • Пушка • Самописная • На языке Go • Тест-план описывается на YAML • Метрики снимаются с пушки с помощью Prometheus • Метрики снимаются только с пушки • Опубликована на https://github.com/inCaller/mysql_vs_postgresql • Pull-requests are welcome
  16. 16. Стенд • 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
  17. 17. Стенд • 2 машины для пушек CPU: Intel Xeon E3-1231v3 OS: Ubuntu 14.04-server x86_64 Chasis: Dell R220 RAM size: 32GB HDDs info: 2x480GB SSD
  18. 18. Стенд • 1 машина для метрик CPU: Intel Xeon E3-1231v3 OS: Ubuntu 14.04-server x86_64 Chasis: Dell R220 RAM size: 32GB HDDs info: 2x480GB SSD
  19. 19. Стенд Оборудование предоставлено компанией
  20. 20. Episode 1: мы запустились • База пуста • Конфиг серверов СУБД дефолтный • Скорость поступления запросов максимальная (#оченьпопулярныйпроект) • Одновременных клиентов – сколько база выдержит
  21. 21. Episode 2: пора потюнить • База НЕ пуста • Конфиг серверов СУБД оптимизирован • Скорость поступления запросов максимальная (#оченьпопулярныйпроект) • Одновременных клиентов – 128 • Оптимизированные конфиги опубликованы на https://github.com/inCaller/mysql_vs_postgresql
  22. 22. Episode 3: все, кто хотел, получили • Количество новых пользователей существенно упало
  23. 23. Episode 4: last in first out • Выборка messages отсортирована по времени
  24. 24. Episode 5: зачем так много сразу • Выборка messages лимитирована в размере (100 строк)
  25. 25. Вопросы?

×