- For which data types MongoDB is more suitable.
- Basic tips for optimizing performance.
- How to quickly and easily speed up a high-load project that uses MongoDB as the main data repository.
- How to build queries and use indexes.
Асинхронность стала неотъемлемой частью как клиент-сайда, так и бек-энда. Будут рассмотрены основные паттерны и библиотеки, позволяющие сделать код читаемым и поддерживаемым.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
Асинхронность стала неотъемлемой частью как клиент-сайда, так и бек-энда. Будут рассмотрены основные паттерны и библиотеки, позволяющие сделать код читаемым и поддерживаемым.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Рarse'им бэкенд
Аким Халилов
Вы хотите выучить Backbone? Хотите просто писать клиентский код, не думая о сервере и о том, как все обрабатывать, хранить, бэкапить? Выход есть – храните с помощью Parse. Parse – платформа, которая предоставляет возможность хранения данных без забот о сервере. Хранилище данных, соц. сети, push-notification, cloud code. Что такое Parse и что он умеет, о библиотеке для использования:
- знакомство с JS API и примеры использования;
- начинаем кодить: stub-проект;
- кодим фичи: CRUD + плюшки;
- хостим.
— Что делать, если у вас много асинхронного кода и он выглядит как лапша?
— Как делать системы проще, используя подходы и принципы из мира функционального программирования.
Что API Карт забыл на сервере — Антон КорзуновYandex
Принято считать, что API Карт — это JavaScript-библиотека, которая работает в браузере. Это утверждение верно ровно в той степени, в какой сферичен конь в вакууме.
Из доклада вы узнаете, зачем API нужен бэкенд, почему писать его придётся вам и как API Карт будет помогать этой задаче с фронтенда.
P.S. Будет интересно разным слоям населения.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Рarse'им бэкенд
Аким Халилов
Вы хотите выучить Backbone? Хотите просто писать клиентский код, не думая о сервере и о том, как все обрабатывать, хранить, бэкапить? Выход есть – храните с помощью Parse. Parse – платформа, которая предоставляет возможность хранения данных без забот о сервере. Хранилище данных, соц. сети, push-notification, cloud code. Что такое Parse и что он умеет, о библиотеке для использования:
- знакомство с JS API и примеры использования;
- начинаем кодить: stub-проект;
- кодим фичи: CRUD + плюшки;
- хостим.
— Что делать, если у вас много асинхронного кода и он выглядит как лапша?
— Как делать системы проще, используя подходы и принципы из мира функционального программирования.
Что API Карт забыл на сервере — Антон КорзуновYandex
Принято считать, что API Карт — это JavaScript-библиотека, которая работает в браузере. Это утверждение верно ровно в той степени, в какой сферичен конь в вакууме.
Из доклада вы узнаете, зачем API нужен бэкенд, почему писать его придётся вам и как API Карт будет помогать этой задаче с фронтенда.
P.S. Будет интересно разным слоям населения.
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Ivan Muratov
Extensions allow you to stay in the PostgreSQL ecosystem, use the usual means of backup, monitoring and other things, while getting functionality that is specific to temporal data and time series.
Разработка крупного Standalone проекта на юнити: улучшаем производительностьВадим Воробьев
Презентация к докладу на DevGamm 2015, Минск.
В докладе рассказывлось о технических тонкостях оптимизации под ПК в Unity на примере The Godlike и приводились истории разработки. Как использовать кодогенерацию, что может профайлер Unity, как правильно работать с UI и почему не стоит связываться с LINQ.
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Introduction to new technologies present in MySQL which enable developing next gen applications. Technologies like JSON and document store, or microservices. Slides in Russian
21 октября состоялась 1 встреча одесского сообщества Python-разработчиков - Python Meetup.
Поговорили о новых технологиях, диалектах и инструментарии для создания графических интерфейсов.
Докладчики:
Александр Степанов (Python Team Lead at SteelKiwi Inc.)
Тема: Шаблон проекта. Использование Vagrant, VirtualEnv и Ansible provisioner. Зачем это необходимо?
Евгений Гетманский (Рython team lead at SteelKiwi Inc.)
Тема: Оптимизация работы веб сервера с базой данных на примере Django.
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
Общие принципы оптимизации производительности мобильных приложений:
- работа с длинными списками — таблицы, коллекции;
- графика — загрузка из сети, кэширование;
- ленивая загрузка частей приложения.
Работа с периодически обновляемыми структурированными данными.
- как передавать данные с сервера на клиент: запросы, объем, формат, десериализация;
- как хранить полученные данные на клиенте — виды хранилищ: от плоских файлов до NoSQL.
Практический кейс. "Едадил": как мы ускоряли работу приложения для Android.
Из презентации вы узнаете:
— как мы пришли к Go, оставив идею использования Node.js, Scala или Rust;
— про первый сервис, который мы написали на Go и запустили в продакшен;
— про ошибки, с которыми сталкивались под нагрузкой;
— про оптимизации, которые мы сделали и еще планируем сделать;
— про тестирование и предотвращение тестирования на продакшене (в частности, websocket'ов).
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Evgeniy Kuzmin
What will be discussed:
- Building the process of continuous integration/delivery on the example of a Laravel application;
- The structure of the auto-testing organization;
- Integration of running tests and deploy on Jenkins CI server;
- Employment of Docker in conjunction with AWS ElasticBeanstalk for blue-green deployment.
Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...Evgeniy Kuzmin
CTO of Smart Gamma will talk In this speech about the problems that arise when testing applications built on a microservices architecture. We will conduct a brief overview of how to test the interaction between microservices. We will also talk in details about Consumer-Driven Contract Testing with an example of using the pact.io
Smart Gamma team will talk In this speech about the problems that arise when testing applications built on a microservices architecture. We will conduct a brief overview of how to test the interaction between microservices. We will also talk in details about Consumer Driven Contract Testing with an example of using the pact.io tool.
Continuous Integration/ Continuous Delivery of web applicationsEvgeniy Kuzmin
Smart Gamma use case of implementation Continuous Integration/ Continuous Delivery for Laravel web app, tested by phpunit and Behat, build automation with Jenkins, blue-green deploy on AWS Beanstalk
Behaivior Driven Development - from the tests to the business logic in a sing...Evgeniy Kuzmin
The slides describes Behaivior Driven Development approach to plan, develop and automate test software base on BDD framework Behat. The main point - concentrate on the benefit of each feature.
2. MongoDB — что это?
MongoDB — это высокопроизводительная документо-
ориентированная база данных без схем данных, которая
относиться к не реляционным БД.
Структура: содержит в себе множество коллекций, они же
содержат множество документов(объектов), которые в свою
очередь содержат пары ключ-значение
3. Документ:
Документ – это набор пар “ключ –
значение”. Документ имеет
динамическую схему.
Документ в одной и той же
коллекции не обязан иметь один
одинаковый набор полей или структуру, а
общие поля в коллекции могут иметь
различные типы данных.
Для хранения MongoDB использует
JSON-подобные документы, который
называется BSON (Binary JSON).
{
field1: value1,
field2: {
embedField1: value,
………………………………..
},
field3: [
value1,
value2, ….
]
}
4. Сравнение с MySQL
MySQL MongoDB
ACID Transactions ACID Transactions
Table Collection
Row Document
Column Field
Index Index
JOINs Embedded documents, $lookup & $graphLookup
GROUP_BY Aggregation Pipeline
5. Когда стоит и использовать MongoDB
У вас нет четкой, заранее описанной структуры данных или
состав данных может потом сильно изменится
У вас планируется довольно серьезный объем данных
Нету большого количества связей между типами данных
У вас приложение с интенсивной записью (удобно для
логирования чего либо)
модно же
6. О чем пойдет речь:
Когда и зачем нужна оптимизация производительности
С чего начать
Как анализировать запросы
Индексы, для чего они нужны
Как правильно строить запросы
7. С чего начать
Смотрим MongoDB Log
по дефолту /var/log/mongodb/mongod.log
Настраиваем и анализируем
Database Profiler
Анализируем запросы
db.collection.explain()
8. Database Profiler
db.setProfilingLevel(level, { slowms: 200 }) - включить
профилирование базы данных
level
0 Профилировщик выключен и не собирает никаких
данных (по умолчанию).
1 Профилировщик собирает данные для операций,
которые занимают больше времени, чем значение
slowms.
2 Профилировщик собирает данные для всех операций.
9. Примеры использования профилировщика
• Получить последние 10 запросов:
db.getCollection('system.profile').limit(10).sort( { ts: -1 } )
• Получить операции, которые выполняются дольше чем 500
миллисекунд:
db.getCollection('system.profile').find({ millis: { $gt: 500 } } )
• Получить наиболеечасто выполняемые запросы:
db.getCollection('system.profile').aggregate([
{ $group: { _id: “$command.query”}, count: { $sum: 1 } }
{ $sort: { count : -1 } }
])
10. Анализируем запросы
db.collection.find({}).explain(‘queryPlanner') - детализирует план,
выбранный оптимизатором запросов.
db.collection.find({}).explain('executionStats') - возвращает
статистику выполнения запроса.
• executionStats.nReturned количество возвращенных документов.
• executionStats.totalKeysExamined: будет 0, если запрос не использует
индекс.
• executionStats.totalDocsExamined: количество отсканированных
документов для получения результата.
11. Indexes
• Single Index
db.records.createIndex( { score: 1 } )
db.records.createIndex( { "location.state": 1 } )
• Compound Index
db.products.createIndex( { "item": 1, "stock": 1 } )
• Text Index
db.reviews.createIndex( { comments: "text" } )
• Unique Single Index
db.members.createIndex( { "user_id": 1 }, { unique: true } )
• Unique Compound Index
db.members.createIndex( { groupNumber: 1, lastname: 1, firstname: 1 }, { unique: true } )
20. Советы
Хранить документы простыми.
Анализ встроенных документов и массивов может быть очень сложным. Кроме того, массивы могут снизить
производительность репликации: при каждом изменении массива все значения массива реплицируются!
Возвращать в запросе только те поля, которые вам нужны.
По возможности не использовать $ne и $nin.
hint() - чтобы заставить MongoDB использовать определенный
индекс
Не забываем про limit() если известно максимальное количество
нужных данных
maxTimeMS() – иногда полезно ограничить время выполнения
запроса
21. Aggregation optimization
Если возможно добавляйте $match + $sort в начало запроса
Всегда используйте последовательность, такую как $match +
$projection, $match1 + $projection1
Ставить $project, $unwind, and $group в конец запроса
Операторы сравнения $lt и $gt вместо $skip для пагинации
Правильная последовательность $sort + $limit +$skip
Если в запросе идут $match + $match один за другим то
объедините их используя $and
Флаг allowDiskUse: true
22. Что дальше
Типов индексов много
Оптимизация на основе архитектуры приложения
Sharding - распределения данных по нескольким
машинам.