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

Hcs3

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