Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
Работа с данными - это ключевая функция большинства приложений. Но работать с данными не так просто как кажется. С одной стороны, нам нужна производительность, с другой все best practices диктуют нам принцип persistence ignorance, с третьей еще и хочется писать красивый и понятный код. Как найти баланс между всем этим? Чем хороший IRepository отличается от плохого? Что такое CQRS и причем тут функциональное программирование? Об этом и пойдет речь, а так же немного граблей и личного опыта.
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETDev2Dev
ASP.NET MVC простой и распространённый инструмент. Но строить на его основе большое веб-приложение не так просто. Туториалы не раскрывают проблем возникающих при росте проекта. Зачастую, изначально стройная архитектура размазывается с каждой следующей итерацией.
Я хочу поделиться своим опытом. Рассказать об основных проблемах и предложить выбранные мной решения.
До недавнего времени в Одноклассниках около 50 ТБ данных, обрабатываемых в реальном времени, хранилось в Microsoft SQL Server. Многие знают, что для такого объема обеспечить быстрый и надежный, да еще и устойчивый к отказу ЦОД доступ, используя SQL СУБД, практически невозможно. Обычно в таких случаях используют одно из NoSQL хранилищ, но не всё можно перенести в NoSQL: некоторые сущности требуют гарантий ACID-транзакций.
Это ограничение подвело нас к необходимости использования NewSQL хранилища, то есть СУБД, предоставляющей отказоустойчивость, масштабируемость и быстродействие NoSQL-систем, но при этом сохраняющей привычные для классических систем ACID-гарантии. Работающих промышленных систем этого нового класса немного (сразу приходит на ум только Google Spanner), а доступных — и вовсе нет. Поэтому мы реализовали такую систему сами на любимой нами Java и запустили ее в промышленную эксплуатацию несколько месяцев назад.
Доклад про то, как устроено это хранилище будет интересен всем, кто следит за развитием технологий управления базами данных и имеет опыт работы с (No)SQL.
Виктория Сулейманова поделится опытом тестирования RxJava. За последний год реактивное программирование прочно обосновалось в мире Android-разработки, однако у всех, кто начинает его использовать, рано или поздно возникает вопрос: как покрыть тестами этот код? И у нас есть на него ответ.
Ссылка на видеозапись: https://youtu.be/7W5NwpE5WpQ
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
Do you want to know what is the continuous integration? how does make a controlled code when team is growing, maintain quality of code and be calm after the release. Don't be afraid to use ruthless refactoring and don't break the product features. I am glad to share with you how it make.
Сегодня многие фреймворки, такие как Prism или Autofac, позволяют разработчику организовать модульную структуру приложения. При этом часто бывает непонятно, для чего ещё нужны модули, кроме как для пресловутой "красоты архитектуры".
В рамках доклада я расскажу о том, какие существуют подходы к организации модульной структуры, в каких фреймворках они реализованы и для решения каких задач дает преимущество каждый подход.
Lawrence Puckett has over 15 years of experience in construction, landscaping, and maintenance work. He has worked as a painter, carpenter, handyman, siding foreman, and in demolition. His experience includes remodeling and construction projects for hospitals, restaurants, homes, and landscaping maintenance. He has skills in drywall, carpentry, concrete, electrical, plumbing, and operating heavy equipment.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
Работа с данными - это ключевая функция большинства приложений. Но работать с данными не так просто как кажется. С одной стороны, нам нужна производительность, с другой все best practices диктуют нам принцип persistence ignorance, с третьей еще и хочется писать красивый и понятный код. Как найти баланс между всем этим? Чем хороший IRepository отличается от плохого? Что такое CQRS и причем тут функциональное программирование? Об этом и пойдет речь, а так же немного граблей и личного опыта.
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETDev2Dev
ASP.NET MVC простой и распространённый инструмент. Но строить на его основе большое веб-приложение не так просто. Туториалы не раскрывают проблем возникающих при росте проекта. Зачастую, изначально стройная архитектура размазывается с каждой следующей итерацией.
Я хочу поделиться своим опытом. Рассказать об основных проблемах и предложить выбранные мной решения.
До недавнего времени в Одноклассниках около 50 ТБ данных, обрабатываемых в реальном времени, хранилось в Microsoft SQL Server. Многие знают, что для такого объема обеспечить быстрый и надежный, да еще и устойчивый к отказу ЦОД доступ, используя SQL СУБД, практически невозможно. Обычно в таких случаях используют одно из NoSQL хранилищ, но не всё можно перенести в NoSQL: некоторые сущности требуют гарантий ACID-транзакций.
Это ограничение подвело нас к необходимости использования NewSQL хранилища, то есть СУБД, предоставляющей отказоустойчивость, масштабируемость и быстродействие NoSQL-систем, но при этом сохраняющей привычные для классических систем ACID-гарантии. Работающих промышленных систем этого нового класса немного (сразу приходит на ум только Google Spanner), а доступных — и вовсе нет. Поэтому мы реализовали такую систему сами на любимой нами Java и запустили ее в промышленную эксплуатацию несколько месяцев назад.
Доклад про то, как устроено это хранилище будет интересен всем, кто следит за развитием технологий управления базами данных и имеет опыт работы с (No)SQL.
Виктория Сулейманова поделится опытом тестирования RxJava. За последний год реактивное программирование прочно обосновалось в мире Android-разработки, однако у всех, кто начинает его использовать, рано или поздно возникает вопрос: как покрыть тестами этот код? И у нас есть на него ответ.
Ссылка на видеозапись: https://youtu.be/7W5NwpE5WpQ
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
Do you want to know what is the continuous integration? how does make a controlled code when team is growing, maintain quality of code and be calm after the release. Don't be afraid to use ruthless refactoring and don't break the product features. I am glad to share with you how it make.
Сегодня многие фреймворки, такие как Prism или Autofac, позволяют разработчику организовать модульную структуру приложения. При этом часто бывает непонятно, для чего ещё нужны модули, кроме как для пресловутой "красоты архитектуры".
В рамках доклада я расскажу о том, какие существуют подходы к организации модульной структуры, в каких фреймворках они реализованы и для решения каких задач дает преимущество каждый подход.
Lawrence Puckett has over 15 years of experience in construction, landscaping, and maintenance work. He has worked as a painter, carpenter, handyman, siding foreman, and in demolition. His experience includes remodeling and construction projects for hospitals, restaurants, homes, and landscaping maintenance. He has skills in drywall, carpentry, concrete, electrical, plumbing, and operating heavy equipment.
This presentation provides an overview of the company and its acquisition of Clarient. It summarizes that the acquisition will more than double the company's revenue and more than triple its adjusted EBITDA. The acquisition provides key benefits like synergies of $20-30 million annually within 3-5 years, a combined leadership in cancer testing, and expanded geographic coverage across the United States with field sales representatives.
Understanding Fear - Intro & Chapter 01 - Bonaro W. OverstreetManikantKant
The document discusses the results of a study on the impact of COVID-19 lockdowns on air pollution. Researchers found that lockdowns led to significant short-term reductions in nitrogen dioxide and fine particulate matter pollution globally as transportation and industrial activities declined substantially. However, the document notes that continued long-term progress on air quality will require systemic changes rather than temporary reductions from emergency measures.
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...Carola Schäfer
Brec1 is a novel recombinase developed through 145 cycles of directed molecular evolution to excise HIV proviral DNA from infected cells. Brec1 recognizes a 34-bp sequence called loxBTR that is highly conserved in the LTR regions of most HIV-1 subtypes. Testing showed that Brec1 efficiently and specifically recombines loxBTR in bacteria and mammalian cells, removing integrated HIV proviruses. Brec1 did not exhibit off-target effects and safety testing found no cytotoxicity, suggesting it has potential for clinical use as a curative treatment for HIV.
Peter Mara Expert in Wind Energy and Wind PowerPeter Mara
Peter Mara, Vice President of Finance for Westerly Wind, LLC., is a wind energy specialist with over a decade of experience. He began his career during his college years, when he worked with ScottishPower in Glasgow, Scotland. Mr. Mara went on to work as a Senior Associate with John Hancock, an Associate with US Renewables Group and, finally, with Westerly Wind, LLC., for which he was a founding team member.
Model Weapons Expert Riley's Motorcycle PresentationBenjamin Pope
This document outlines the pre-production assets for a motorcycle model including turnarounds, blueprints, and bike models as well as notes production for the motorcycle model.
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...Barthelemy D Ans
Este documento presenta sobre el desarrollo de las ciencias espaciales en Perú para la conservación ambiental y el desarrollo sostenible. Explica cómo la astronomía se nutre del desarrollo aeroespacial al contribuir en la orientación de satélites, el calendario, y el estudio de fenómenos relativistas y de altas energías. También describe cómo la astronomía puede ayudar a evaluar los recursos espaciales como agua, metales y minerales. El objetivo es desarrollar la calidad de vida en la T
Biomedical Instrumentation and its Fundamentals,Bio electric Signals(ECG, EMG ,EEG)and its Electrodes ,Physiological Transducers,Blood Pressure ,Blood Flow,Cardiac Output ,Patient Safety,Physiological Effects of Electric current on human body etc...
The document discusses implicate and explicate order according to Hitoshi Tsuchiyama's theory of body awareness. Implicate order refers to body (matter) enfolding into awareness (mind), while explicate order refers to awareness (mind) unfolding into body (matter). Both orders involve the phenomenal world enfolding or unfolding into the noumenal world through thinking and insight.
Доклад Сергея Аверина на 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-разработчиков, работающих с реляционными БД.
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьTanya Denisyuk
После этого доклада вы будете знать, что такое Handlersocket, нужен ли он вам и «как его готовить».
Все как обычно — грабли, шишки, слезы из реальной жизни, направления «куда копать», примеры из практики. Вместе с докладом Сергей выложит код самописного php-клиента для HS, который мы используем в Badoo.
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
В многоядерных высоконагруженных системах с высокой конкурентностью часто бывает сложно определить, чем занят отдельный процесс PostgreSQL. Он может находиться в ожидании локов высокого уровня, таких как локи таблиц, внутренних локов, используемых для синхронизации процессов, ввода-вывода и многих других.
В настоящий момент среди всех событий ожидания мониторить можно только локи высокого уровня с помощью представлений PostgreSQL. Другие типы ожиданий требуют использования низкоуровневых утилит типа perf, systemtap и других. Эти утилиты требуют специальных знаний и могут быть платформозависимыми. В то же время другие enterprise базы данных уже включают в себя инструменты для мониторинга ожиданий.
Мы разработали патч, который реализует мониторинг ожиданий в PostgreSQL. С минимальной настройкой (несколько конфигурационных параметров) этот патч показывает полную информацию о текущих ожиданиях в режиме реального времени и с небольшим оверхедом на всю систему. Этот патч уже работает на продакшен серверах Яндекса и показал свою полезность.
This presentation will teach you to never repeat yourself and organize your code correctly for reuse.
It also illustrates advantages of the use of third-party libraries.
Эта презентация по DFD моделированию на русском собрала в себе лучшее из зарубежных презентаций и русских.
В дополнении к презентации есть статься, в которой даются комментарии http://growandmanage.com/data-flow-diagrams-in-russian/
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьSergey Xek
Мы уже около двух лет используем Handlersocket «в бою» в проекте Badoo, начав осваивать его на заре известности. За это время у нас накопился некоторый опыт по решению проблем, которым я хочу с вами поделиться.
После этого доклада вы будете знать, что такое Handlersocket, нужен ли он вам и «как его готовить».
Что еще вы узнаете из доклада:
1. Для чего изначально был придуман HS.
2. Практические плюсы/минусы/ограничения.
3. Чем HS не является.
4. Схема работы HS внутри MySQL.
5. Вопросы взаимодействия/совместимости доступа через SQL и через HS.
6. Интерфейс/протокол HS. Разобраны все сложные места, приведены примеры. Аналоги SQL-команд в мире HS.
7. Особенности: поддерживаемые типы данных, работа с кодировками, сортировка, подстановка значений по умолчанию.
8. Примеры из практики Badoo с цифрами и графиками.
9. «Прокачка» производительности.
Все как обычно — грабли, шишки, слезы из реальной жизни, направления «куда копать», примеры из практики.
Вместе с докладом выкладываю код самописного php-клиента для HS, который мы используем в Badoo.
Микросервисы, кто-то только слышал о них, кто-то пытался делать, кто-то уже использует в продакшене. Идеи, заложенные в концепцию микросервисов, не новы и основные постулаты уже звучали раньше. Так почему же в последнее время мы всё чаще слышим о микросервисах? Что такое микросервисы для нас и чем они отличаются от старого доброго подхода SOA? Как теперь разрабатывать enterprise-приложения с микросервисным подходом на нашем любимом языке программирования Java?
На эти и некоторые другие вопросы постараемся ответить во время встречи. Наши гости, Кирилл Толкачёв и Александр Тарасов, в режиме live coding попытаются создать небольшой стартап, попутно использовав новомодные подходы и инструменты.
На пути к релизу стартапа будут затронуты основные проблемы выбранных подходов в целом и технологий в частности:
Микросервис — что это, для чего и как с этим дальше жить. Где теория брат? ;)
На чём писать API: REST или RPC, и почему Thrift имеет право на жизнь в эпоху тотального распространения JSON-а. Упрощай и превозмогай с помощью Spring boot starter;
Какой стек выбрать для разработки, что выбрали мы и почему. Небольшое сравнение легковесных и не очень java фреймворков а так же сопутствующих инструментов;
Способы упаковки, дистрибуции и разворачивания микросервисов, как Spring Boot и Docker помогают нам в решении этих непростых для разработчика проблемах;
Как микросервисам найти друг друга, как готовить Spring Cloud и как обойти существующие проблемы и ограничения. Не доверяйте технологиям, доверяйте только себе;
API Gateway. Предохраняй и сохраняй свои микросервисы.
Так же речь пойдет о других распространенных проблемах распределенных систем и их решениях.
Rails 5: awesome features and breaking changesАлександр Ежов
The document discusses the major changes in Rails 5 including:
- Many deprecated features have been removed such as respond_to/respond_with and XML serialization.
- New features have been added like ActiveRecord::Relation#or and ActiveModel::Errors#codes.
- Performance improvements including requiring Ruby 2.2.2 for speed boosts and more efficient Active Record querying.
- Breaking changes to callback behavior and parameter handling.
This document provides an overview of abstract machines for evaluating lambda calculus expressions and arithmetic expressions. It discusses the SECD machine, which evaluates lambda calculus using a stack, environment, code, and dump. It also discusses the K machine and tail call optimization. The document explains evaluation schemes and transitions for abstract machines and provides examples of evaluating expressions using different machines.
Liquor, Liquid и другие безопасные языки разметки в RoRАлександр Ежов
This document discusses various options for creating safe templates in Ruby, including Liquid, Liquor, Radius, Ruty, Laminate, and cs/Template. It provides code examples for how templates can be defined and secured in each system. The document also discusses how Liquor can be used to define attributes, named scopes, and associations for rendering complex templates in a safe way.
The document discusses configuration management tools like Chef, Puppet, and Cfengine. It also discusses using these tools to manage versions of software like MySQL, PHP, and Ruby on different server environments. Specific commands are provided to install, remove, and change software versions. The document also discusses using tools like Capistrano and Lorenz for deployment and managing state changes across servers.
Sphinx is a very fast search engine that allows for integrated full-text search and queries without temporary tables. It supports different attribute types like strings, integers, and arrays. Attributes can be used in queries with operators like equals, not equals, in, between and more. Indexes can be defined on models with indexes on fields, sorting, and field types. Searches support filtering with conditions, sorting results, and grouping results by fields with aggregate functions. Deltas indexes can be used to track changes and updated through rake tasks or indexer commands.
Использования PgQ и Londste в rails-приложенииАлександр Ежов
Londiste is a master-slave replication system for PostgreSQL that uses PgQ (Postgres Queue) to queue transactions and events. PgQ allows asynchronous replication by queuing transactions and events from the master database to be consumed by subscribers or slaves. Rake tasks are provided to install, start, stop and manage Londiste replication and PgQ queue consumers. Example code shows how to create a PgQ queue, register a consumer, and add events to the queue to be processed asynchronously.
2. • -Дедлок что это такое
• Неправильная организация доступа к
+данным пример
• MySqlСпецифика работы блокировок
• (SHOW ENGINEУзнаем больше
INNODB STATUS)
Содержание
3. Что это такое
- ,Дедлок ситуация
2в которой или более процесса ждут друг от друга
,освобождения занятых ресурсов
или более двух процессов
ждут ресурсы в циклической порядке
( http://en.wikipedia.org/wiki/Deadlock )
4. Что это такое
1Транзакция 2Транзакция
select name from events
where id = 1 for update
select name from events
where id = 2 for update
select name from events
where id = 2 for update
select name from events
where id = 1 for updateFAIL
InnoDB автоматически распознает дедлоки
и откатывает одну из транзакций
простой пример
7. Причины дедлоков
• Отсутствие фиксированного порядка
обращения к таблицам и записям
• Некорректно спроектированная БД
Неправильная организация доступа к данным
Неправильная организация доступа к
данным
9. Что это такое
1Транзакция 2Транзакция
select name from events
where id = 1 for update
select name from events
where id = 2 for update
select name from events
where id = 2 for update
select name from events
where id = 1 for updateFAIL
Отсутствие фиксированного порядка доступа
В порядке
возрастания
В порядке
убывания
Неправильная организация доступа к
данным
10. Порядок доступа
• все манипуляции с данными
лучше проводить в условленном
порядке
• ,например в порядке возрастания
первичного ключа
• это снижает вероятность
дедлоков
Неправильная организация доступа к
данным
11. • Отсутствие необходимых индексов
• 1Иногда нужно разносить таблицу
,на несколько если она несет
слишком много смысловой нагрузки
Некорректно
спроектированная БД
Неправильная организация доступа к
данным
15. first_unprocessed, v1
SELECT id AS event_id, ... FROM events
WHERE locked_at IS NULL
OR locked_at < [1.minute.ago]
ORDER BY event_time ASC LIMIT 1
FOR UPDATE
UPDATE events SET locked_at = [Time.now]
WHERE id = [event_id]
,Находим первое необработанное событие
“ ” :занимаем его и возвращаем оператору
Пример
16. touch v1
UPDATE events SET locked_at = [Time.now]
WHERE id = [event_id]
,Обновляем блокировку если обработка
занимает более одной минуты
(event_id ):получаем от клиента
Пример
18. touch v2
UPDATE events SET locked_at = [Time.now]
WHERE id = [event_id]
Используем результат запроса из
first_unprocessed ,в качестве семафора после
:чего обновляем блокировку
SELECT id AS event_id FROM events
WHERE ...
FOR UPDATE
Пример
20. first_unapproved v2
:Новое требование
.выбирать события для указанного юзера
user_id =В запрос добавляется условие
[user_id]
:Новая проблема
-Для пользователей с малым кол вом записей
MySql user_idиспользует индекс по
( )снова различные пути доступа
?Решение
FORCE INDEX index_events_on_locked_at
Пример
21. Проблемы
• снижение скорости работы при
увеличении размеров таблицы
• конфликты с другими частями
, Eventsприложения использующими
Пример
22. Решение
• Отдельная таблица для
блокировок
• /Записи добавляются удаляются
Event#after_create/update/destroyв
EVENT_LOCKS
id event_id user_id event_time locked_at
... ... ... ... ...
Изменения в структуре БД
Пример
23. Summary
• Унифицировать порядок обращения
• Разнести конфликтующий
функционал по разным таблицам
,Дедлоки
обусловленные неправильной организацией
, :доступа к данным можно устранить
Неправильная организация доступа к
данным
25. Причины дедлоков
• MySql 5.0
• InnoDB
• InnoDB ,блокирует не строки таблицы а
записи индексов
• ( , InnoDBесли в таблице нет индексов
)создает скрытый
MySqlспецифика работы блокировок
C MySqlпецифика работы блокировок
26. MySqlБлокировки в
Row Lock Блокировка записи индекса
Next-key Lock
Row lock + блокировка
“ ”промежутка записей индекса
C MySqlпецифика работы блокировок
27. Row Lock
• Блокируется только одна запись
• Используется только при выборке с
использованием уникального индекса
SELECT name FROM events WHERE id = 3
(id - )первичный ключ
C MySqlпецифика работы блокировок
28. Next-key Lock
(-inf.. 3] (3..5] (5..10] (10..15]
(15..+inf)
Next-key Lock =
(Row Lock) +блокировка записи
“ ”блокировка промежутка перед записью
Пример
C MySqlпецифика работы блокировок
29. Next-key Lock
phantom readиспользуется для предотвращения
1Транзакция 2Транзакция
SELECT * FROM events WHERE
another_id > 8 FOR UPDATE
INSERT INTO events
(another_id) VALUES (9)
SELECT * FROM events WHERE
another_id > 8 FOR UPDATE
FAIL
2й запрос возвращает
другие данные
C MySqlпецифика работы блокировок
30. Next-key Lock
... 3 3..5 5..10 10..15
15...
InnoDB блокирует все встреченные записи
,индекса используемого в запросе
SELECT * FROM events WHERE another_id > 8
FOR UPDATE
C MySqlпецифика работы блокировок
31. Next-key Lock
, InnoDBЕсли не используется индекс фактически
!блокирует все таблицу
• READизменить уровень изоляции на
COMMITTED
• включить системную переменную
innodb_locks_unsafe_for_binlog
Next-key lock :можно отключить
( phantom read)возможен
C MySqlпецифика работы блокировок
32. MySql 5.1
• READ-меньше блокировок в
COMMITTED DML -при операциях
,блокируются только те строки
которые действительно изменяются
• более производительная блокировка
AUTO_INCREMENTдля полей
( -подробнее тут http://bit.ly/4iF2mu )
C MySqlпецифика работы блокировок
34. Решение
• Делаем мало блокировок
( )правильные индексы
• Используем короткие транзакции
C MySqlпецифика работы блокировок
35. 1Пример
• better_nested_set
• не приспособлен к конкурентной
-модификации дерева большие
, updateтранзакции по всей таблице
• has_tree (как альтернатива данные об
иерархии хранятся в отдельной
) http://github.com/dima-таблице
exe/has_tree
C MySqlпецифика работы блокировок
36. 2Пример
• counters has_manyв
• update- ,ы в произвольном порядке
вероятность дедлоков выше при
длинных транзакциях
• -альтернатива вынести счетчики в
,отдельную таблицу уменьшить
размеры транзакций
C MySqlпецифика работы блокировок
37. Что делать
• deadlock_retry (
http://github.com/rails/deadlock_retry ) -
если дедлоков мало
• LOCK TABLES - блокировки на уровне
(think MyISAM)таблиц
• READ-COMMITTEDИспользовать
( phantom-read)помним о
C MySqlпецифика работы блокировок
38. Summary
• Используем индексы
• Короткие транзакции
• ,Если дедлоков мало их можно
,игнорировать перезапуская
транзакции
C MySqlпецифика работы блокировок