The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Спикер также предоставляет написанный им код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
• что это вообще такое;
• чем является HS и чем не является;
• внутреннее устройство и работа HS;
• протокол;
• примеры использования в Баду, с цифрами и графиками;
• особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
• полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
UI testing involves verifying that a graphical user interface functions as expected. There are different approaches to test automation, including record and replay, coding tests, and using test libraries. The effectiveness of test automation depends on how tests are designed and maintained over time as the application evolves.
This document discusses improving MySQL application performance with Sphinx. It provides an introduction to Sphinx, describing it as a standalone full-text search engine that can be scaled horizontally and has many features beyond full-text search. It explains that Sphinx indexes data separately from MySQL and must be queried separately, though it can return attribute values to MySQL. The document outlines important facts about MySQL's index usage and limitations, and Sphinx's grouping, attribute storage, and block-based data organization to optimize attribute filtering. It provides an example comparing full-text search performance between MySQL and Sphinx.
The document discusses Rakudo Perl 6, the most actively developed compiler for the Perl 6 programming language. It describes how Rakudo works by parsing source code into an abstract syntax tree, then generating intermediate code for the Parrot Virtual Machine. The document provides examples of everyday programming problems and how to solve them in Perl 6, such as reading input, checking value ranges, adding numbers in a list, and iterating over lists.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Спикер также предоставляет написанный им код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
• что это вообще такое;
• чем является HS и чем не является;
• внутреннее устройство и работа HS;
• протокол;
• примеры использования в Баду, с цифрами и графиками;
• особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
• полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
UI testing involves verifying that a graphical user interface functions as expected. There are different approaches to test automation, including record and replay, coding tests, and using test libraries. The effectiveness of test automation depends on how tests are designed and maintained over time as the application evolves.
This document discusses improving MySQL application performance with Sphinx. It provides an introduction to Sphinx, describing it as a standalone full-text search engine that can be scaled horizontally and has many features beyond full-text search. It explains that Sphinx indexes data separately from MySQL and must be queried separately, though it can return attribute values to MySQL. The document outlines important facts about MySQL's index usage and limitations, and Sphinx's grouping, attribute storage, and block-based data organization to optimize attribute filtering. It provides an example comparing full-text search performance between MySQL and Sphinx.
The document discusses Rakudo Perl 6, the most actively developed compiler for the Perl 6 programming language. It describes how Rakudo works by parsing source code into an abstract syntax tree, then generating intermediate code for the Parrot Virtual Machine. The document provides examples of everyday programming problems and how to solve them in Perl 6, such as reading input, checking value ranges, adding numbers in a list, and iterating over lists.
о некоторых вопросах бинарной совместимости в C++corehard_by
При написании кода на C++ часто появляются вопросы о том, как он будет взаимодейтсвовать с внешним миром. Ответить на эти вопросы порой бывает нелегко, и причиной этому служит отсуствие описания ABI в стандарте C++. В докладе рассмотрим, что такое ABI, и как программисты C++ живут в отсутсвии стандарта на него.
Magento Open Source 2.3 gives us a very interesting and powerful tool called Declarative Schema. The declarative database schema allows to re-think our old-fashioned database upgrade scripts into nice and elegant declarative XML files. Let's see what we can do with Declarative Schema.
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьTanya Denisyuk
После этого доклада вы будете знать, что такое Handlersocket, нужен ли он вам и «как его готовить».
Все как обычно — грабли, шишки, слезы из реальной жизни, направления «куда копать», примеры из практики. Вместе с докладом Сергей выложит код самописного php-клиента для HS, который мы используем в Badoo.
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5DevDay
Григорий Рубцов — руководитель проектов SQLinfo.ru (http://sqlinfo.ru/) и Webew.ru (http://webew.ru/), автор онлайн-курса по MySQL (http://sqlinfo.ru/classes/) и спикер конференции РИТ++.
Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
Обзор возможностей:
— новое для разработчика;
— новое для администратора;
— улучшения производительности;
— миграция и вопросы совместимости.
Технические детали:
— хранилище XtraDB;
— Percona Tools;
— алгоритмы оптимизации подзапросов в MariaDB.
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...Alex V. Petrov
На примере одной специализированной, но значимой для большинства высокопроизводительных систем точки оптимизации исходного кода — работы с кэш-памятью — доклад «Достижима ли в C++ эффективность языка "среднего уровня"?», сделанный на DEV Labs 2013, показывает, какими несложными приемами и техниками можно достичь желаемого уровня эффективности объектно-ориентированного кода, и развеивает миф о языке C++ как языке «архитектурной астронавтики», предлагая аудитории ряд действенных рецептов повышения производительности исходного кода.
2. Цели рефакторинга
● Упрощение добавления новых возможностей за счет
возможности реиспользования кода.
● Упрощение сопровождения кода за счет приведения его в
человекочитаемый вид, нормализации кода и структуры базы.
● Избавление от велосипедов и перенос тем самым головной
боли по их развитию и поддержке на сообщество.
3. Характеристики системы
● Perl + PostgreSQL
● ~ 1200 модулей и 400 скриптов
● ~ 300000 строк чистого кода
● ~ 450 таблиц в БД
● ~ 150 хранимых процедур и 140
триггеров
4. Разбиение на этапы
Этап рефакторинга — коммит
должен укладываться
в рамки одного релиза
t
Релиз (34 недели) Шаг рефакторинга —
изменение не сказывающееся
на работоспособности системы
Рефакторинг выполняется в основной ветке разработки
5. Test Driven Refactioring
Для каждого вносимого в код изменения
Написание автотеста
Проверка автотеста путем поломки тестируемого кода
Внесение модификации (рефакторинг)
Проверка модифицированного кода автотестом
6. Структура автотестов
Test::Class
My::Test rollback после
lib/ t/lib/
каждого теста
Class1 Class1::Test
Class2 Class2::Sub1 Class2::Test Class2::Sub1::Test
Class3 Class2::Sub2 Class3::Test Class2::Sub2::Test
8. Структура до рефакторинга
Ent Ent::Smth11 Entity Entity::Smth11
new() new()
Ent::Smth12 Entity::Smth12
list() list()
get() … get() …
set() set()
save() Ent::Smth1N save() Entity::Smth1N
● Два примерно одинаковых ORM
● Методы модификации и поиска объединены в одном классе
● Доступ к полям объекта как к элементам хэша
9. Что хотим получить
DBIx::Class::Row Schema::Result::Smth11 DBIx::Class::ResultSet Schema::ResultSet::Smth11
new() Schema::Result::Smth12 search() Schema::ResultSet::Smth12
get_column() … …
set_column() Schema::Result::Smth1N Schema::ResultSet::Smth1N
insert()
update()
Schema::Result::Smth21 Schema::ResultSet::Smth21
Schema::Result::Smth22 Schema::ResultSet::Smth22
… …
Schema::Result::Smth2N Schema::ResultSet::Smth2N
● Один ORM
● Методы модификации и поиска в разных классах
● Доступ к полям объекта через акцессоры
10. Зачем?
● До рефакторинга
● Два самописных ORM в одной системе это слишком много
● Оба из них не поддерживают отношений между таблицами, тем не менее они нам
необходимы, что приводит к обилию в коде plain SQL запросов
● Вновьприбывшие разработчики вынуждены с ними разбираться и вникать в их отличия
● После рефакторинга
● Много новых хороших возможностей, которым мы все очень рады
● Мы не одни во вселенной: почти все что нам может понадобиться уже изобрели,
реализовали, отладили и устранили почти все баги, а какие не устранили, устраняют
довольно-таки быстро
● Опыт работы с DBIx::Class разработчику пригодится не только для работы над нашей
системой, поэтому он с большей вероятностью потрудится разобраться в нем
поглубже
16. Timeline рефакторинга
Схема таблиц Schema::*
Обертка Ent вокруг DBIx::Class 1 релиз
Callback методов
Перенос хуков в Избавление
Замена Ent::* →
Schema::Result::* от plain SQL N релизов
Schema>resultset('*')
Удаление старого ORM 1 релиз
t
18. Исходная структура
Service связан с объектом одного из трех
Lbill Client
●
классов, а не с одним.
● User, Server, VDS имеют примерно
одинаковый набор финансовых полей, но
не используют наследование.
● Лишняя связь от User, Server, VDS к Client.
User Server VDS
● Сложные запросы к базе со
множественными LEFT JOIN.
● Добавление новой сущности приводит к
созданию 1 класса, 3 связей и
модификации Service.
Service
19. Желаемая структура
● Добавление новой сущности
Client приводит к добавлению 1 класса и 1
связи.
Lbill User ● Финансовые операции ограничены
работой с Entity, а не с тремя User,
Server, VDS.
Entity Server
● При добавлении новой сущности
большинство возможностей (кроме
Service VDS технических) - «из коробки».
● Нет лишних связей (нормализация).
20. Структура базы
vz_vds vz_vds
servers clients servers
id id
users id users
id identity_id
client_id
id id
entity_id
client_id lbills технические
lbill_id entity_id
client_id технические
lbill_id id поля
lbill_id
финансовые технические
поля
финансовые client_id поля
поля
финансовые
поля
технические
поля services services entities
технические
поля
технические
поля user_id entity_id id
поля server_id lbill_id
vz_vds_id финансовые
поля
Было Стало
21. Миграционные триггеры
entities AFTER UPDATE
Обновление соответствующих финансовых полей в
таблицах users, servers, vz_vds при их изменении
BEFORE INSERT
vz_vds
1.Проверка, что все синхронизируемые из entities поля IS
servers
NULL — это означает, что не выполняется попытка
users
установить их значение при INSERT
2.Автоматическое заполнение синхронизируемых полей
данными из соответствующей записи в entities
AFTER INSERT OR UPDATE
Проверка, что все значения полей соответствуют
значениям всех соответствующих полей в таблице entities
22. Заполнение данными
vz_vds
id servers entity_id
entities 24786
id 1
users entity_id
38798 2
1. id 24786
id
78969
38798
1
entity_id
3
1 24786 12
2 78969
38798 23
3
INSERT 78969 3
UPDATE SET entity_id
2. services
id user_id server_id vds_id entity_id
724786 78969 3
338798 2786 26
978969 6783 365
UPDATE SET entity_id