Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
31 ОКТЯБРЯ, 2015
ЭКСТРЕМАЛЬНАЯ
ОПТИМИЗАЦИЯ
ПРОИЗВОДИТЕЛЬНОСТИ
на примере MongoDB Java Driver
Евгений Берлог
Java-разработчик
EPAM
План выступления
С чего все начиналось
Выбор стандартного решения
Что-то пошло не так…
Что мы могли сделать?
Что мы сделали?
Выводы
Исходные условия
Oracle
Coherence
WEB REST
Internal
Tool
х 15 х 15 х 10
Исходные условия
Oracle
Coherence
WEB REST
Internal
Tool
MongoDB
х 15 х 15 х 10
Особенности системы
Большие размеры объектов (~1MB)
Много уровней вложенности
Зависимости между объектами
Вложенные массивы
Множество сценариев использования
Ограниченный объем RAM
Выбор фреймворка
M
MORPHIA SPRING DATA
Многообещающий
красавчик
Уверенный в себе
крепыш
«Плоский» и
гибкий работяга
JAVA DRIVER
+ самописный ORM
Нагрузочное тестирование
100% запросов на чтения
50 параллельных потоков
1 млн запросов
Morphia, сек
Java-драйвер +
самописный ORM,
сек
Документ 10KB 14,0 13,7 (-2,2%)
Документ 100KB 120,0 115,9 (-3,5%)
Документ 1MB 927,2 887,0 (-4,4%)
Суммарное время выполнения запросов
Результаты тестирования
Morphia, сек
Java-драйвер +
самописный ORM,
сек
Документ 10KB 0,101 0,097 (-4,0%)
Документ 100KB 1,044 0,995 (-4,7%)
Документ 1MB 9,377 8,811 (-6,1%)
Суммарное время работы сборщика мусора (GC)
Результаты тестирования
Plain MongoDB driver
Большой объем потребляемой памяти
Сборщик мусора отрабатывает часто
Непредсказуемая производительность и
стабильность
Что же делать?
JUST OPTIMIZE IT.
Что не так с Plain driver?
MongoDB
MongoDB
Driver
Converter Service
byte[ ] DBObject Domain
А что, если…
MongoDB
MongoDB
Driver
Converter Service
byte[ ] DBObject
ByteArrayToDomainConverter
Domain
Что получилось
MongoDB
Domain
Magic
Converter
Improved
MongoDB Driver
byte[ ]
Service
Другие улучшения
Создание строк
Кэширование строк
«Ленивая» загрузка документов
«Ленивая» десериализация
Создание строк?
Да, создание строк
Текущая реализация в драйвере
String createString() {
byte[] bytes = new byte[size];
readBytes(bytes); // copy bytes from input stream
return new String(bytes, UTF8_CHARSET);
}
Создание строк
Попытка #1 – Чуть-чуть лучше
String createString() {
char[] array = new char[bytes.length];
for (int i = 0; i < bytes.length; i++) {
array[i] = (char) bytes[i];
}
return new String(array);
}
Создание строк
Попытка #2 – Оптимально
String createString() throws IllegalAccessException {
char[] array = new char[bytes.length];
for (int i = 0; i < bytes.length; i++) {
array[i] = (char) bytes[i];
}
String s = new String();
Field field = String.class.getDeclaredField("value");
field.set(s, array);
return s;
}
Создание 1 млрд строк
Общее время, сек Время GC, сек
new String(byte[ ], UTF-8) 95,8 0,884
new String(char[ ]) 93,0 (-3,0%) 0,861 (-3,0%)
Reflection 92,1 (-3,9%) 0,568 (-36,0%)
Кэширование строк
0xffaa11 0xccff2e
String 1
String 2
... ... ... ...
ConcurrentHashMap
• Ключ – hash от строки
• Значение – CopyOnWriteArrayList<String>
«Ленивая» подгрузка
Domain
1
Item
*
«Ленивая» подгрузка
Domain Proxy LinkResolver Template
load()
readIds()
resolve()
findByIds(ids)
setItems(resolved)
getItems()
Что получилось
{
"_id": "Java",
"type": "language",
"father": {
"class": "JavaContributor",
"name": "James",
"surname": "Gosling",
"hasBeard": true
},
"features": /* массив байт */
}
Business rules
Что получилось
{
"_id": "Java",
"type": "language",
"father": {
"class": "JavaContributor",
"name": "James",
"surname": "Gosling",
"hasBeard": true
},
"features": /* массив байт */
}
Optional
No package
Reflections
Что получилось
{
"_id": "Java",
"type": "language",
"father": {
"class": "JavaContributor",
"name": "James",
"surname": "Gosling",
"hasBeard": true
},
"features": /* массив байт */
}
Lazy de-serialization
Что получилось
{
"_id": "Java",
"type": "language",
"father": {
"class": "JavaContributor",
"name": "James",
"surname": "Gosling",
"hasBeard": true
},
"features": [
"object-oriented",
"static type-checking"
]
}
De-serialized array
Что получилось
Java-драйвер +
самописный ORM,
сек
«Улучшенный»
Java-драйвер,
сек
Документ 10KB 13,7 12,7 (-7,3%)
Документ 100KB 115,9 105,2 (-9,2%)
Документ 1MB 887,0 791,4 (-10,7%)
100% запросов на чтения
50 параллельных потоков
1 млн запросов
Суммарное время выполнения запросов
Что получилось
100% запросов на чтения
50 параллельных потоков
1 млн запросов
Суммарное время работы сборщика мусора (GC)
Java-драйвер +
самописный ORM,
сек
«Улучшенный»
Java-драйвер,
сек
Документ 10KB 0,097 0,087 (-10,0%)
Документ 100KB 0,995 0,791 (-20,5%)
Документ 1MB 8,811 5,861 (-33,5%)
Недостатки решения
Сложность поддержки
Сложность тестирования
• Соответствие BSON формату
• Коллизии кэширования
• Многопоточность
Java Driver 3.0+
Апрель 2015
API упрощающий интеграцию
Выводы
Вопросы ?

More Related Content

What's hot

nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Ontico
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...
Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...
Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...
Ontico
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Ontico
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
 
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsPostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
Ivan Muratov
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
Mail.ru Group
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Ontico
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Ontico
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Ontico
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Ontico
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
Омские ИТ-субботники
 

What's hot (20)

nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...
Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...
Эффективное использование спотовых узлов Amazon EC2 / Дмитрий Пушкарев (Molec...
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsPostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
 
Rx
RxRx
Rx
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 

Viewers also liked

Async Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуляAsync Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуля
Vitebsk Miniq
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
Vitebsk DSC
 
Облачные технологии – Что? Где? Когда?
Облачные технологии – Что? Где? Когда?Облачные технологии – Что? Где? Когда?
Облачные технологии – Что? Где? Когда?
Vitebsk Miniq
 
Использование продуктов gigya.com для интеграции с популярными социальными се...
Использование продуктов gigya.com для интеграции с популярными социальными се...Использование продуктов gigya.com для интеграции с популярными социальными се...
Использование продуктов gigya.com для интеграции с популярными социальными се...
Vitebsk Miniq
 
Amazon cloud – готовим вместе
Amazon cloud – готовим вместеAmazon cloud – готовим вместе
Amazon cloud – готовим вместе
Vitebsk Miniq
 
Зачем нам нужен Amazon?
Зачем нам нужен Amazon?Зачем нам нужен Amazon?
Зачем нам нужен Amazon?
Vitebsk Miniq
 
Собираем будильник правильно
Собираем будильник правильноСобираем будильник правильно
Собираем будильник правильно
Vitebsk Miniq
 
Reactивная тяга
Reactивная тягаReactивная тяга
Reactивная тяга
Vitebsk Miniq
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильно
Vitebsk DSC
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практике
Vitebsk Miniq
 
Использование Google Drive API для управления хранилищем отчетов
Использование Google Drive API для управления хранилищем отчетовИспользование Google Drive API для управления хранилищем отчетов
Использование Google Drive API для управления хранилищем отчетов
Vitebsk Miniq
 
Apache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate SearchApache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate Search
Vitebsk Miniq
 
Жизнь после promises
Жизнь после promisesЖизнь после promises
Жизнь после promises
Vitebsk DSC
 
Строим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхСтроим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данных
Vitebsk Miniq
 
Проблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решенияПроблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решения
Vitebsk DSC
 
Эпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспечения
Vitebsk Miniq
 
Осторожно, не упадите! Идет работа с real-time данными
Осторожно, не упадите! Идет работа с real-time даннымиОсторожно, не упадите! Идет работа с real-time данными
Осторожно, не упадите! Идет работа с real-time данными
Vitebsk Miniq
 
Виртуализация
ВиртуализацияВиртуализация
Виртуализация
Vitebsk Miniq
 
Blockchain: is just buzzword?
Blockchain: is just buzzword?Blockchain: is just buzzword?
Blockchain: is just buzzword?
Vitebsk Miniq
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
Vitebsk Miniq
 

Viewers also liked (20)

Async Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуляAsync Gateway или Разработка системы распределенных вычислений с нуля
Async Gateway или Разработка системы распределенных вычислений с нуля
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Облачные технологии – Что? Где? Когда?
Облачные технологии – Что? Где? Когда?Облачные технологии – Что? Где? Когда?
Облачные технологии – Что? Где? Когда?
 
Использование продуктов gigya.com для интеграции с популярными социальными се...
Использование продуктов gigya.com для интеграции с популярными социальными се...Использование продуктов gigya.com для интеграции с популярными социальными се...
Использование продуктов gigya.com для интеграции с популярными социальными се...
 
Amazon cloud – готовим вместе
Amazon cloud – готовим вместеAmazon cloud – готовим вместе
Amazon cloud – готовим вместе
 
Зачем нам нужен Amazon?
Зачем нам нужен Amazon?Зачем нам нужен Amazon?
Зачем нам нужен Amazon?
 
Собираем будильник правильно
Собираем будильник правильноСобираем будильник правильно
Собираем будильник правильно
 
Reactивная тяга
Reactивная тягаReactивная тяга
Reactивная тяга
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильно
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практике
 
Использование Google Drive API для управления хранилищем отчетов
Использование Google Drive API для управления хранилищем отчетовИспользование Google Drive API для управления хранилищем отчетов
Использование Google Drive API для управления хранилищем отчетов
 
Apache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate SearchApache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate Search
 
Жизнь после promises
Жизнь после promisesЖизнь после promises
Жизнь после promises
 
Строим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхСтроим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данных
 
Проблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решенияПроблемы с производительностью приложений на AngularJS и способы их решения
Проблемы с производительностью приложений на AngularJS и способы их решения
 
Эпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспечения
 
Осторожно, не упадите! Идет работа с real-time данными
Осторожно, не упадите! Идет работа с real-time даннымиОсторожно, не упадите! Идет работа с real-time данными
Осторожно, не упадите! Идет работа с real-time данными
 
Виртуализация
ВиртуализацияВиртуализация
Виртуализация
 
Blockchain: is just buzzword?
Blockchain: is just buzzword?Blockchain: is just buzzword?
Blockchain: is just buzzword?
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 

Similar to Экстремальная оптимизация производительности на примере MongoDB Java Driver

Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
Andrei Pangin
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
Denis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
Positive Hack Days
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
Positive Development User Group
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
SQALab
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
Badoo Development
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
Alex Ott
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
Омские ИТ-субботники
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
Softline
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
Ivan Krylov
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
Evgeny Borisov
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
Timur Safin
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
Andrey Karpov
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Darya Zubova
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Mikhail Kurnosov
 

Similar to Экстремальная оптимизация производительности на примере MongoDB Java Driver (20)

Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
2015 09-05 02 Сергей Сорокин. Обзор и анализ мобильного backend сервиса
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 

More from Vitebsk DSC

Community-Z
Community-ZCommunity-Z
Community-Z
Vitebsk DSC
 
How to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA projectHow to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA project
Vitebsk DSC
 
Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?
Vitebsk DSC
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring Cloud
Vitebsk DSC
 
Тестирование больших данных
Тестирование больших данныхТестирование больших данных
Тестирование больших данных
Vitebsk DSC
 
Amazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезныAmazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезны
Vitebsk DSC
 
Amazon Athena overview
Amazon Athena overviewAmazon Athena overview
Amazon Athena overview
Vitebsk DSC
 
Typical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentationTypical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentation
Vitebsk DSC
 
Boring is Fun!
Boring is Fun!Boring is Fun!
Boring is Fun!
Vitebsk DSC
 
На пути к совершенному инжинирингу
На пути к совершенному инжинирингуНа пути к совершенному инжинирингу
На пути к совершенному инжинирингу
Vitebsk DSC
 
Чего же ты хочешь, человек?
Чего же ты хочешь, человек?Чего же ты хочешь, человек?
Чего же ты хочешь, человек?
Vitebsk DSC
 
Растем вместе с eKIDS
Растем вместе с eKIDSРастем вместе с eKIDS
Растем вместе с eKIDS
Vitebsk DSC
 
Технологии беспилотных автомобилей
Технологии беспилотных автомобилейТехнологии беспилотных автомобилей
Технологии беспилотных автомобилей
Vitebsk DSC
 
Управляем эволюцией на лету
Управляем эволюцией на летуУправляем эволюцией на лету
Управляем эволюцией на лету
Vitebsk DSC
 
Микросервисы на практике
Микросервисы на практикеМикросервисы на практике
Микросервисы на практике
Vitebsk DSC
 

More from Vitebsk DSC (15)

Community-Z
Community-ZCommunity-Z
Community-Z
 
How to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA projectHow to exceed Customer's expectations by delivery complicated ML+RPA project
How to exceed Customer's expectations by delivery complicated ML+RPA project
 
Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?Аджайл майндсет. Что разрушает вашу команду?
Аджайл майндсет. Что разрушает вашу команду?
 
Микросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring CloudМикросервисы со Spring Boot & Spring Cloud
Микросервисы со Spring Boot & Spring Cloud
 
Тестирование больших данных
Тестирование больших данныхТестирование больших данных
Тестирование больших данных
 
Amazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезныAmazon SQS или не все костыли одинаково бесполезны
Amazon SQS или не все костыли одинаково бесполезны
 
Amazon Athena overview
Amazon Athena overviewAmazon Athena overview
Amazon Athena overview
 
Typical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentationTypical BA Mistakes ​in documentation
Typical BA Mistakes ​in documentation
 
Boring is Fun!
Boring is Fun!Boring is Fun!
Boring is Fun!
 
На пути к совершенному инжинирингу
На пути к совершенному инжинирингуНа пути к совершенному инжинирингу
На пути к совершенному инжинирингу
 
Чего же ты хочешь, человек?
Чего же ты хочешь, человек?Чего же ты хочешь, человек?
Чего же ты хочешь, человек?
 
Растем вместе с eKIDS
Растем вместе с eKIDSРастем вместе с eKIDS
Растем вместе с eKIDS
 
Технологии беспилотных автомобилей
Технологии беспилотных автомобилейТехнологии беспилотных автомобилей
Технологии беспилотных автомобилей
 
Управляем эволюцией на лету
Управляем эволюцией на летуУправляем эволюцией на лету
Управляем эволюцией на лету
 
Микросервисы на практике
Микросервисы на практикеМикросервисы на практике
Микросервисы на практике
 

Экстремальная оптимизация производительности на примере MongoDB Java Driver