Your SlideShare is downloading. ×
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Silverspoon2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Silverspoon2

1,247

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,247
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
23
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Как мы храним дружбы.
  • 2. Что такое «дружба» и зачем она нужна.
  • 3. Требования заказчика: • Ребер → 109 • Вершин → 5 · 107 • Соединений → 2000 – 5000 • Запросов → 12000 – 20000 в сек. • Обновлений → 200 – 1000 в сек. • Данных на ребре → 6 байт
  • 4. Типы запросов: • Высокой актуальности: – Мои друзья (прямые связи) – Обратные связи • Средней актуальности: – Общие друзья – Друзья моих друзей – Я знаком с Васей через Петю и Машу
  • 5. Граф в реляционной базе Таблица смежности Вася Петя Дружит 30 байт заголовка Маша Костю Дружит 14 байт данных Катя Дашу Ненавидит 80 байт с индексами – Сложность поиска пути – Сложности с друзьями друзей
  • 6. Что можно предпринять? • Упаковать данные Вася – Фрагментация Катя – Сложно писать запросы Маша • Кеширование – Построчно – бессмысленно – Запросы целиком – сложно инвалидировать
  • 7. Наш ответ • Не надо изобретать велосипеды. – slab аллокатор , сетевое ядро из memcached – khash.h – libev • Чем проще – тем надежнее. – Простота устройства – легкость сопровождения.
  • 8. In memory storage hash slabs buffers A 1GB B C 22GB 1GB ∑ = 24GB
  • 9. Сетевая подсистема • fork() — невозможно • -lpthread — сложно разрабатывать и отлаживать • FSM – решение проблемы 10k – сложно с обрабатывать вычислительные запросы – запись на диск – отдельным процессом
  • 10. Persistance T0 T1 T2 – snapshot – WAL – Надежное чтение – CRC32
  • 11. Persistance parent fork child req writer HDD
  • 12. Hot standby – bind() – может быть только один – Пока не можем bind() – проигрываем все новое и отвечаем на запросы – Начальный load balancing A port B
  • 13. Резервное копирование и репликация • Новые данные на диск пишутся только в режиме O_APPEND → rsync! • WAL log player • Реплики только для чтения – direct – light
  • 14. Спасибо за внимание. Вопросы?

×