SlideShare a Scribd company logo
1 of 27
1. Моделирование системы
  персестирования данных

2. Redis: возможности, выгоды,
    примеры использования

                        Алексей Качаев
                   Zend_Coffee&Code #3
                             Июль, 2011
Алексей Качаев
Senior/Lead PHP Developer at
Cogniance

4+ года опыта c PHP

3+ года использования Zend
Framework

Активный участник
zendframework.ru/forum

ZF2 contributor
Мои контакты
Blog:
codemehanika.org

Email:
kachayev@gmail.com

Twitter:
@kachayev

Facebook:
http://www.facebook.com/kachayev

Github:
https://github.com/kachayev
О чем мы будем говорить

1. Что такое моделирование данных и при чем здесь DDD,
DataMappers и т.д.

2. SQL, noSQL, lessSQL.

3. TTL, read/write rate, I/O, партицирование и шардинг.

4. Redis как пример key-value storage.

5. Mongo как пример документо-ориентированного
хранилища.
Что такое моделирование
         данных
Независимость кода от хранилища

Многие паттерны диктуют НЕЗАВИСИМОТЬ
ХРАНИЛИЩА.

К сожалению, для многих это так и остается просто
декларацией выгоды паттернов.

Плохо: создавать объекты по полям в таблице базы.
Плохо: создавать поля в таблице по свойствам объекта.

Нужно: понимать, что НЕЗАВИСИМОСТЬ должна быть
ДВУХСТОРОННАЯ.
SQL, noSQL, lessSQL
MySQL - это не приговор, а NoSQL не
существует
1. Key-value (Redis, Scalaris, TC, MemcacheDB)
2. Документ (MongoDB, CouchDB, Riak)
3. Семейства столбцов (Cassandra, HBase)
4. Граф (Neo4J)

Зачем?
- скорость
- ресурсо-затратность
- масштабируемость
- доп. возможности

Главное:
Моделировать по логике, а не по sql-ности.
Характеристики данных
TTL
TTL = Time To Live -> среднее время между обновление
единицы данных.

Почему это важно?
1. Кеширование
2. TTL составной ноды информации = min(TTL частей)

Пример.

1. Пользователи и их комментарии. JOIN отменяется.

2. Количество просмотров и попаданий в поисковую
выдачу. Прощай кеш объявлений.
Read/write rate

Мало пишем, много читаем - SQL.
Много пишем, редко читаем - NoSQL.

Почему:
1. Персистентность и I/O
2. Индексы
3. Locks

Например:
1. Статистика, аналитика
2. Real-time data
3. Действия пользователей и т.д.
I/O

Ресурс, о котором всегда забывают.
Верхний предел существует и постоянно уменьшается.

Примеры:

1. Сессии
2. Крупные блоки данных
3. Конкурентность I/O
Конкурентность доступа

1. Locks при write операциях (запись, таблица)

2. "Выдавливаение" кеша из ограниченного стека

3. Атомарность или почему GET X; SET X+1 не работает.
Redis. Возможности,
выгоды, использование
Что такое Redis?

http://redis.io

Не только key-value storage.

1. Очень большая скорость get/set операций
2. Expire для ключей
3. Асинхронная персистентность
4. Типы данных с внутренней оптимизацией
5. Репликация master-slave с поддержкой ветвления
6. Атомарные операции и транзакционность
7. Pub/sub
Установка
sudo -s

cd /usr/local/lib
wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz
tar xvzf redis-2.2.11.tar.gz
cd redis-2.2.11
make

## sysctl vm.overcommit_memory=1
ln -s /usr/local/lib/redis-2.2.11/redis-server /usr/bin/redis-server
Supervisor
Отключить встроенную демонизацию!

/etc/supervisor/conf.d/redis.conf
[program:redis]
command=/usr/bin/redis-server /etc/redis/redis.conf
priority=10
autorestart=true
autostart=true
startsecs=10
startretries=3
stopsignal=QUIT
stopwaitsecs=10
redirect_stderr=true
stdout_logfile=/var/log/redis.log
stdout_logfile_maxbytes=10MB
Типы данных
1. BS String (get, set, incr, incrby, getset, до 1 гб)

2. List (связанный список, добавление O(1), захват по
индексу O(n), [push | pop | insert], [set | index | rem], [range |
trim])

3. Set (неупорядоченный набор строк, хеш-таблица,
сложность операций O(1), resize таблицы блокирующий,
[sadd | srem | sismember | smove | spop], scard, smembers,
[sdiff | sunion | sinter])

4. Sorted set

5. Hashes
Sorted Set
Суть: коллекция строк с ассоциированными числами
Скорость: получение элемента по оценке - O(1),
обновеить значение оценки - O(n)
Внутренняя реализация: через двойную структуру
(двунаправленный список+хеш-таблица)

Команды:
ZADD key score member; ZREM key member; ZINCRBY key increment member
ZRANK key member; ZREVRANK key member;
ZRANGE key start end; ZREVRANGE key start end;
ZRANGEBYSCORE key min max; ZCOUNT key min max;
ZCARD key; ZSCORE key element;
ZREMRANGEBYRANK key min max; ZREMRANGEBYSCORE key min max
Redis Hash
Суть: неупорядоченный набор соответствий между field и
value.
Удобно для: хранения объектов по одному ключу
Сложность: Добавить, удалить, проверить поле - O(1),
перебрать все поля и/или значения - O(n)
Внутренняя реализация: для "маленьких" хешей - zipmap
(медленнее, но компактно), для "больших" - hash table
(быстро, но много)

Команды:
HSET key field value; HGET key field
HMGET key field1 ... fieldN; HMSET key field1 value1 ... fieldN valueN HINCRBY key field integer
HEXISTS key field; HDEL key field; HLEN key
HKEYS key; HVALS key; HGETALL key
Скорость, I/O и fsync
Скорость до 100.000 записей в секунду. Чтение
медленнее, чем запись в большинстве случаев.

Два механизма персестирования:
1. Snapshot
save 300 1000
dbfilename /var/redis/dump.rdb
2. AOF
appendonly yes|no
appendfsync always|everysec|no

Оба персистера работают на уровне форка процесса.

Механизм VM, SWAP и работа при дефиците (или
искусственном ограничении) оперативной памяти.
Атомарность операций и транзакции

Атомарные счетчики: INCR, INCRBY, DECR, DECRBY

Транзакции:
1. Все команды сериализуются и выполняются
последовательно
2. Выполняются либо все команды, либо ни одной

Команды:
MULTI....EXEC or DISCARD (транзакция)

WATCH key....MULTI....EXEC (оптимистичная блокировка)
Использование Rediska + Zend
Использование Rediska + Zend
Решение специфических задач

0. Генерирование уникального ID для сущности при работе
на нескольких серверах

1. Последнии 10 добавленных комментариев всеми
пользователями (LPUSH, LRANGE)

2. Рейтинг игроков (ZADD, ZREVRANGE)
http://codemehanika.org/blog/2011-07-15-redis-types-
usage.html

3. Подсчет уникальных посетителей (SADD, SCARD)

4. Pub/sub, очереди, кеширование
Мониторинг, деббаг и другое

REDIS-CLI или TELNET

1. info, dbsize
2. monitor
3. debug object
4. config get|set
5. flushall, flushdb
6. bgsave, bgrewriteaof
7. slowlog
Спасибо за внимание!



            Вопросы
              ???

More Related Content

What's hot

DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info it-people
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?Alexey Tokar
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDBGleb Lebedev
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Ontico
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминHOWWEDOIT
 
C++ для web с помощью Emscripten
C++ для web с помощью EmscriptenC++ для web с помощью Emscripten
C++ для web с помощью Emscriptencorehard_by
 

What's hot (20)

DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDB
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данныхCodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
 
C++ для web с помощью Emscripten
C++ для web с помощью EmscriptenC++ для web с помощью Emscripten
C++ для web с помощью Emscripten
 

Viewers also liked

3rd Quarter Outlook Alabama Real Estate
3rd Quarter Outlook Alabama Real Estate3rd Quarter Outlook Alabama Real Estate
3rd Quarter Outlook Alabama Real EstateTom Brander
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Ontico
 

Viewers also liked (6)

Redis presentation
Redis presentationRedis presentation
Redis presentation
 
3rd Quarter Outlook Alabama Real Estate
3rd Quarter Outlook Alabama Real Estate3rd Quarter Outlook Alabama Real Estate
3rd Quarter Outlook Alabama Real Estate
 
Real-time ASP.NET with SignalR
Real-time ASP.NET with SignalRReal-time ASP.NET with SignalR
Real-time ASP.NET with SignalR
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
 
Redis 101
Redis 101Redis 101
Redis 101
 
Generators: The Final Frontier
Generators: The Final FrontierGenerators: The Final Frontier
Generators: The Final Frontier
 

Similar to Redis: возможности, выгоды, примеры использования

Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Ontico
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBIurii Ogiienko
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхRoman Elizarov
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинПрактическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинFuenteovejuna
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. RussianRawan Qurmet
 
Rybak Big Projects New
Rybak Big Projects NewRybak Big Projects New
Rybak Big Projects NewOntico
 
Web20 from zero
Web20 from zeroWeb20 from zero
Web20 from zeroqweasdrty
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Ontico
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияAndrew Babiy
 

Similar to Redis: возможности, выгоды, примеры использования (20)

Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данных
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинПрактическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
 
Sivko
SivkoSivko
Sivko
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. Russian
 
Rybak Big Projects New
Rybak Big Projects NewRybak Big Projects New
Rybak Big Projects New
 
Web20 from zero
Web20 from zeroWeb20 from zero
Web20 from zero
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обучения
 

Redis: возможности, выгоды, примеры использования

  • 1. 1. Моделирование системы персестирования данных 2. Redis: возможности, выгоды, примеры использования Алексей Качаев Zend_Coffee&Code #3 Июль, 2011
  • 2. Алексей Качаев Senior/Lead PHP Developer at Cogniance 4+ года опыта c PHP 3+ года использования Zend Framework Активный участник zendframework.ru/forum ZF2 contributor
  • 4. О чем мы будем говорить 1. Что такое моделирование данных и при чем здесь DDD, DataMappers и т.д. 2. SQL, noSQL, lessSQL. 3. TTL, read/write rate, I/O, партицирование и шардинг. 4. Redis как пример key-value storage. 5. Mongo как пример документо-ориентированного хранилища.
  • 6. Независимость кода от хранилища Многие паттерны диктуют НЕЗАВИСИМОТЬ ХРАНИЛИЩА. К сожалению, для многих это так и остается просто декларацией выгоды паттернов. Плохо: создавать объекты по полям в таблице базы. Плохо: создавать поля в таблице по свойствам объекта. Нужно: понимать, что НЕЗАВИСИМОСТЬ должна быть ДВУХСТОРОННАЯ.
  • 8. MySQL - это не приговор, а NoSQL не существует 1. Key-value (Redis, Scalaris, TC, MemcacheDB) 2. Документ (MongoDB, CouchDB, Riak) 3. Семейства столбцов (Cassandra, HBase) 4. Граф (Neo4J) Зачем? - скорость - ресурсо-затратность - масштабируемость - доп. возможности Главное: Моделировать по логике, а не по sql-ности.
  • 10. TTL TTL = Time To Live -> среднее время между обновление единицы данных. Почему это важно? 1. Кеширование 2. TTL составной ноды информации = min(TTL частей) Пример. 1. Пользователи и их комментарии. JOIN отменяется. 2. Количество просмотров и попаданий в поисковую выдачу. Прощай кеш объявлений.
  • 11. Read/write rate Мало пишем, много читаем - SQL. Много пишем, редко читаем - NoSQL. Почему: 1. Персистентность и I/O 2. Индексы 3. Locks Например: 1. Статистика, аналитика 2. Real-time data 3. Действия пользователей и т.д.
  • 12. I/O Ресурс, о котором всегда забывают. Верхний предел существует и постоянно уменьшается. Примеры: 1. Сессии 2. Крупные блоки данных 3. Конкурентность I/O
  • 13. Конкурентность доступа 1. Locks при write операциях (запись, таблица) 2. "Выдавливаение" кеша из ограниченного стека 3. Атомарность или почему GET X; SET X+1 не работает.
  • 15. Что такое Redis? http://redis.io Не только key-value storage. 1. Очень большая скорость get/set операций 2. Expire для ключей 3. Асинхронная персистентность 4. Типы данных с внутренней оптимизацией 5. Репликация master-slave с поддержкой ветвления 6. Атомарные операции и транзакционность 7. Pub/sub
  • 16. Установка sudo -s cd /usr/local/lib wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz tar xvzf redis-2.2.11.tar.gz cd redis-2.2.11 make ## sysctl vm.overcommit_memory=1 ln -s /usr/local/lib/redis-2.2.11/redis-server /usr/bin/redis-server
  • 17. Supervisor Отключить встроенную демонизацию! /etc/supervisor/conf.d/redis.conf [program:redis] command=/usr/bin/redis-server /etc/redis/redis.conf priority=10 autorestart=true autostart=true startsecs=10 startretries=3 stopsignal=QUIT stopwaitsecs=10 redirect_stderr=true stdout_logfile=/var/log/redis.log stdout_logfile_maxbytes=10MB
  • 18. Типы данных 1. BS String (get, set, incr, incrby, getset, до 1 гб) 2. List (связанный список, добавление O(1), захват по индексу O(n), [push | pop | insert], [set | index | rem], [range | trim]) 3. Set (неупорядоченный набор строк, хеш-таблица, сложность операций O(1), resize таблицы блокирующий, [sadd | srem | sismember | smove | spop], scard, smembers, [sdiff | sunion | sinter]) 4. Sorted set 5. Hashes
  • 19. Sorted Set Суть: коллекция строк с ассоциированными числами Скорость: получение элемента по оценке - O(1), обновеить значение оценки - O(n) Внутренняя реализация: через двойную структуру (двунаправленный список+хеш-таблица) Команды: ZADD key score member; ZREM key member; ZINCRBY key increment member ZRANK key member; ZREVRANK key member; ZRANGE key start end; ZREVRANGE key start end; ZRANGEBYSCORE key min max; ZCOUNT key min max; ZCARD key; ZSCORE key element; ZREMRANGEBYRANK key min max; ZREMRANGEBYSCORE key min max
  • 20. Redis Hash Суть: неупорядоченный набор соответствий между field и value. Удобно для: хранения объектов по одному ключу Сложность: Добавить, удалить, проверить поле - O(1), перебрать все поля и/или значения - O(n) Внутренняя реализация: для "маленьких" хешей - zipmap (медленнее, но компактно), для "больших" - hash table (быстро, но много) Команды: HSET key field value; HGET key field HMGET key field1 ... fieldN; HMSET key field1 value1 ... fieldN valueN HINCRBY key field integer HEXISTS key field; HDEL key field; HLEN key HKEYS key; HVALS key; HGETALL key
  • 21. Скорость, I/O и fsync Скорость до 100.000 записей в секунду. Чтение медленнее, чем запись в большинстве случаев. Два механизма персестирования: 1. Snapshot save 300 1000 dbfilename /var/redis/dump.rdb 2. AOF appendonly yes|no appendfsync always|everysec|no Оба персистера работают на уровне форка процесса. Механизм VM, SWAP и работа при дефиците (или искусственном ограничении) оперативной памяти.
  • 22. Атомарность операций и транзакции Атомарные счетчики: INCR, INCRBY, DECR, DECRBY Транзакции: 1. Все команды сериализуются и выполняются последовательно 2. Выполняются либо все команды, либо ни одной Команды: MULTI....EXEC or DISCARD (транзакция) WATCH key....MULTI....EXEC (оптимистичная блокировка)
  • 25. Решение специфических задач 0. Генерирование уникального ID для сущности при работе на нескольких серверах 1. Последнии 10 добавленных комментариев всеми пользователями (LPUSH, LRANGE) 2. Рейтинг игроков (ZADD, ZREVRANGE) http://codemehanika.org/blog/2011-07-15-redis-types- usage.html 3. Подсчет уникальных посетителей (SADD, SCARD) 4. Pub/sub, очереди, кеширование
  • 26. Мониторинг, деббаг и другое REDIS-CLI или TELNET 1. info, dbsize 2. monitor 3. debug object 4. config get|set 5. flushall, flushdb 6. bgsave, bgrewriteaof 7. slowlog