CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB

2,004 views
1,986 views

Published on

Published in: Internet
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,004
On SlideShare
0
From Embeds
0
Number of Embeds
992
Actions
Shares
0
Downloads
14
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB

  1. 1. 1
  2. 2. 2 Яндекс.Диск: Миллионы пользователей и MongoDB Хамидуллин Виталий, Яндекс
  3. 3. 3 +1 ТБ
  4. 4. 4 Яндекс.Диск — это сервис, который позволяет хранить файлы и обмениваться ими, а также предоставляет доступ к файлам с любого устройства, подключѐнного к интернету. 20 млн. зарегистрированных пользователей 7 млрд. файлов 10 млн. загружаемых в сутки файлов
  5. 5. 5 Web интерфейс Windows, Mac OS, Linux iOS, Android, Windows Phone WebDAV
  6. 6. 6 SDK — http://api.yandex.ru/disk/ SDK Яндекс.Диска предназначен для приложений, которые работают с файлами пользователей Яндекс.Диска или хранят на Диске собственные файлы и настройки. Objective-C — iOS, OS X Java — Android C# — Windows, Windows Phone
  7. 7. 7
  8. 8. 8 MPFS Распределѐнная система Все машины равноправны Python Flask uwsgi nginx
  9. 9. 9 Данные в Диске Содержимое файлов Mulca Внутренняя разработка Key-value сторадж Синхронная запись Метаданные MongoDB Структура файловой системы Файлы и каталоги История изменений Данные сервиса
  10. 10. 10 MySQL Oracle Своя разработка MongoDB Автоматическое шардирование - - + + Документо- ориентированность - - + + Транзакции + + + - Встроенные механизмы репликации + + + + Готово и можно использовать + + - +
  11. 11. 11 Кластер MongoDB в Диске 7.5 млрд. объектов 7 ТБ данных 2 ТБ индексов 70 000 rps в базу 6 млрд. операций в день 3 реплики, 1 скрытая, 1 арбитр 30 шардов
  12. 12. 12 Вопрос на 1 ТБ Почему в replica set желательно нечетное количество нод?
  13. 13. 13 Практическое использование
  14. 14. 14 Принципы хранения Первичные ключи Шардирование Индексы
  15. 15. 15 Первичные ключи Уникальный хэш UID для данных о пользователе ObjectId
  16. 16. 16 Шардирование Системные коллекции без шардирования Пользовательские коллекции по UID
  17. 17. 17 Индексы UID Поля для сортировки и фильтрации
  18. 18. 18 Оптимизация Сжатие данных Чтение с реплик Большие выборки Инкрементальные обновления
  19. 19. 19 Сжатие данных В коде данные сжимаются библиотекой zlib В базе хранится в BinData Сокращает объем хранимых данных в 1,5 раза
  20. 20. 20 Чтение с реплик + снимает нагрузку с master − только некритичные данные db.collection.find({}, slave_okay=True)
  21. 21. 21 Большие выборки for each in db.collection.find({}): unzip(each)
  22. 22. 22 Большие выборки for each in list(db.collection.find({})): unzip(each) Вопрос на 1 ТБ Какие проблемы могут возникнуть?
  23. 23. 23 Большие выборки processed = 0 count = db.collection.find({}).count() while processed < count: for each in db.collection.find({}, skip=processed, limit=10000): processed+=1 unzip(each)
  24. 24. 24 Инкрементальные обновления db.collection.find_one({"_id" : "1234567890”}) db.collection.update({"_id" : "1234567890"}, {"$set" : {"data" : 1048576}})
  25. 25. 25 Инкрементальные обновления db.collection.update({"_id" : "1234567890"}, {"$inc" : {"data" : 1024}})
  26. 26. 26 Преимущества Производительная Хорошо документирована Удобная Особенности Нужно мониторить Требует правильного проектирования Практика важнее теории MongoDB
  27. 27. 27 Спасибо за внимание!
  28. 28. 28 Хамидуллин Виталий Разработчик http://api.yandex.ru/disk/ vikham@yandex-team.ru

×