Hcs3

1,526 views
1,457 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,526
On SlideShare
0
From Embeds
0
Number of Embeds
828
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Hcs3

  1. 1. Нереляционные системы хранения данных Павел Уваров <puvar@rambler-co.ru> Рамблер
  2. 2. Хранение данных <ul><li>Суммарный объем </li></ul><ul><li>Важность данных (допустимость их потери) </li></ul><ul><ul><li>Стоимость потери MB = Стоимость хранения MB </li></ul></ul><ul><li>Классы задач </li></ul><ul><ul><li>Метод доступа (random/serial) </li></ul></ul><ul><ul><li>Максимальное допустимое время отклика </li></ul></ul><ul><ul><li>Средний размер порций данных </li></ul></ul><ul><ul><li>Частота извлечения/добавления данных </li></ul></ul>
  3. 3. Диски и файлы <ul><li>Файловые системы (ext2, ext3, xfs, reiserfs) </li></ul><ul><li>RAIDы </li></ul><ul><li>Сетевой доступ к устройству: SAN (SCSI или ATA по сети) </li></ul><ul><li>Сетевой доступ к хранилищу: NAS (NFS, SMB/CIFS) </li></ul><ul><li>Распределенные файловые системы (AFS, DFS, Coda, Hadoop, GFS, MogileFS) </li></ul>
  4. 4. Встраиваемые БД <ul><li>Популярные </li></ul><ul><ul><li>Berkley DB – ключ/значение </li></ul></ul><ul><ul><li>Berkley DB XML – XQuery </li></ul></ul><ul><ul><li>SQLite – SQL </li></ul></ul><ul><ul><li>HSQLDB – Java, SQL </li></ul></ul><ul><li>Особенности </li></ul><ul><ul><li>Нулевое администрирование </li></ul></ul><ul><ul><li>Дуализм: БД/формат файла </li></ul></ul>
  5. 5. Сетевые БД <ul><li>SQL СУБДы (MySQL, PostgreSQL, Oracle, MSSQL) </li></ul><ul><ul><li>Транзакции, контроль целостности </li></ul></ul><ul><ul><li>Одновременный доступ (concurrent access) </li></ul></ul><ul><ul><li>Гибкость схем данных и языка запросов -> широкий класс задач </li></ul></ul><ul><ul><li>Построчный доступ </li></ul></ul><ul><li>XML СУБД (Oracle XML DB, IBM DB2 pureXML) </li></ul>
  6. 6. Другие решения <ul><li>Memcached – бездисковый сетевой кэш </li></ul><ul><li>Ленточные накопители – дешевое оффлайновое хранилище </li></ul>
  7. 7. Хранилице индекса в Рамблере <ul><li>Сверхбольшие объемы данных </li></ul><ul><ul><li>Хранилище ~10-20Tb (~10^11 строк) </li></ul></ul><ul><ul><li>Ежедневное обновление ~100-200Gb </li></ul></ul><ul><li>Класс задач: R = F(A,B,C,…) </li></ul><ul><ul><li>R, A, B, C – сверхбольшие таблицы </li></ul></ul><ul><ul><li>F – некоторая операция </li></ul></ul>
  8. 8. Скорость <ul><li>Память ~1 Gb/s </li></ul><ul><li>Диск (random I/O) ~50-200 seeks/s </li></ul><ul><ul><li>Если пытаться использовать диск в качестве SDRAM, то все упрется в seek rate </li></ul></ul><ul><ul><li>Асинхронно из диска можно выжать те же 100 Mb/s (но это тема для отдельного доклада) </li></ul></ul><ul><li>Диск (serial I/O) ~50-200 Mb/s </li></ul><ul><ul><li>Это самый экономичный способ обработки информации </li></ul></ul>
  9. 9. Наше решение <ul><li>Любая распределенная файловая система </li></ul><ul><ul><li>Кластер из обычных серверов с обычными дисками </li></ul></ul><ul><li>Один файл – одна сверхбольшая таблица </li></ul><ul><ul><li>Таблица может быть размазана по нескольким файлам </li></ul></ul><ul><ul><li>Гибкая схема данных </li></ul></ul><ul><ul><li>Оптимизация на последовательное I/O </li></ul></ul>
  10. 10. HCS (хикс) <ul><li>HCS = Hierarchically Compressed Stream </li></ul><ul><ul><li>Иерархически сжатый поток кортежей </li></ul></ul><ul><li>Особенности </li></ul><ul><ul><li>Дуализм протокол/формат </li></ul></ul><ul><ul><li>Внешне похож на реляционную таблицу </li></ul></ul><ul><ul><li>Схема кортежа в заголовке </li></ul></ul><ul><ul><li>Контроль четности (CRC32) </li></ul></ul>
  11. 11. Кортежи <ul><li>Кортеж определяется схемой: </li></ul><ul><ul><li>H4{host}:U6{uri},C*1024{url} </li></ul></ul><ul><ul><li>i2,i4:f8{pagerank}:T4 </li></ul></ul><ul><li>Основные типы полей: </li></ul><ul><ul><li>I (integer), F (float), T (antitime), C (string) </li></ul></ul><ul><li>Сравнение кортежей </li></ul><ul><ul><li>Универсальное двухуровневое лексикографическое сравнение => универсальные утилиты обработки </li></ul></ul>
  12. 12. Иерархичность
  13. 13. Управление потоками <ul><li>Класс задач: R = F1(A,F2(B,C),F3(D)) </li></ul><ul><li>Последовательный вывод порождает другой HCS-поток </li></ul><ul><li>Последовательный ввод может быть из любого сокета </li></ul>
  14. 14. Что можно делать последовательно? <ul><ul><li>Сортировка (merge sort) </li></ul></ul><ul><ul><li>sorted = F(sorted,sorted,…) </li></ul></ul><ul><ul><ul><li>Merge (Annihilate, Aggregate (reduce), Filter) </li></ul></ul></ul><ul><ul><ul><li>Join (map) по первым полям </li></ul></ul></ul><ul><ul><li>Filter/Grep по какому-нибудь условию </li></ul></ul><ul><ul><li>Select (меняет схему) </li></ul></ul><ul><ul><li>Dump/Undump (для отладки) </li></ul></ul>
  15. 15. Таблица из 125 миллионов строк
  16. 16. Пример из жизни <ul><li>Статистика кликов в Рамблере </li></ul><ul><ul><li>Ежедневно приходит 7.2G сжатых логов (40M строк) </li></ul></ul><ul><ul><li>Порождается статистика посредством join трех логов (200M строк) </li></ul></ul><ul><ul><li>На это тратится 30 минут </li></ul></ul><ul><ul><li>Плюс 2 часа на агрегацию </li></ul></ul><ul><ul><li>Все это на одном сервере </li></ul></ul>
  17. 17. Основы библиотеки <ul><li>Класс Output, метод put </li></ul><ul><li>Класс Input, метод get </li></ul><ul><li>Обертки с теми же интерфейсами (Output_sort) </li></ul><ul><li>Классы-утилиты (Merger и др.) </li></ul>
  18. 18. Считаем Pagerank <ul><li>Схема pagerank: I4{page},f8{pagerank} </li></ul><ul><li>Схема графа: I4{page_from},I2{L}:I4{page_to} </li></ul><ul><li>Пишем сумматор Output_sum </li></ul><ul><li>Сортер: Output_sort<Merger<Output_sum>,Output_sum> </li></ul>
  19. 19. Область применения HCS <ul><li>Любая поисковая система </li></ul><ul><li>Обработка статистики </li></ul><ul><li>Биллинг </li></ul>
  20. 20. HCS будет в OpenSource <ul><li>В конце октября 2008 </li></ul><ul><li>Пишите: puvar@rambler-co.ru </li></ul>
  21. 21. Вопросы?

×