Обработка большого набора данных - PullRequest
5 голосов
/ 27 июня 2010

Из онлайн-дискуссионных групп и блогов я видел много вопросов об интервью, связанных с обработкой больших массивов данных.Мне интересно, существует ли системный подход для анализа этого типа вопросов?Или, более конкретно, есть ли какая-либо структура данных или алгоритмы, которые могут быть использованы для решения этой проблемы?Любые предложения действительно приветствуются.

Ответы [ 4 ]

8 голосов
/ 27 июня 2010

«Крупномасштабные» наборы данных делятся на несколько категорий, которые я видел, каждая из которых ставит перед вами различные задачи.

  1. Данные, которые слишком велики, чтобы поместиться в памяти.Вот некоторые ключевые приемы:
    • Кэширование данных, которые часто используются для повышения производительности
    • Работа с данными из файла за раз, вместо того, чтобы пытаться сразу прочитать весь файл в память(если вы не работаете последовательно с файлом, это может быть особенно сложно!)
    • Распределение данных по памяти нескольких машин.
  2. Слишком большие данныевписаться в один файл из-за ограничений файловой системы или архитектуры оборудования.Это довольно легко решить - разделить файл - но во многих случаях возникает практический вопрос о том, каким будет разумное разделение.
  3. Данные, которые слишком велики для размещения на одном жестком диске.Здесь в основном используются методы покупки дисков большего размера :-) или распределения данных по нескольким машинам.
    • Распределение данных по нескольким машинам создает интересные проблемы, когда вам необходимо провести анализ или преобразование данных.Это глубокая тема с множеством разных подходов и задач.Структуры Map / Reduction, такие как CouchDB и Hadoop, в последнее время стали популярными инструментами для исследований и приложений в этой области.
  4. Данные, которые слишком велики для одного экземпляра базы данных.Это может быть проблемой размера диска (не хватило места) или производительности (кэш-память постоянно увеличивается, индексы просто становятся слишком большими).Поддержание надежности и производительности данных, распределенных между несколькими экземплярами БД, возможно, в нескольких центрах обработки данных, является областью постоянного интереса для крупных предприятий.Здесь возможны следующие варианты:
    • Вертикальные разбиения (разные таблицы для разных БД)
    • Горизонтальные разбиения (одна и та же таблица на разных БД, но с разными данными)

Другие проблемы, часто связанные с крупномасштабными наборами данных, но не связанные с размером per se :

  1. Данные, поступающие быстро.Представьте себе системы, которые должны масштабироваться до миллионов или даже миллиардов транзакций в минуту.
  2. Данные, которые постоянно меняются.Как вы справляетесь с устаревшими данными или данными, которые изменяются во время работы с ними?
1 голос
/ 27 июня 2010

Серебряной пули нет.Требуется больше контекстной информации, чтобы понять, какие алгоритмы и структуры данных полезны для данной крупномасштабной цели.Для данных, которые слишком велики для размещения в памяти, например, многие системы управления базами данных используют деревья B +.

1 голос
/ 27 июня 2010

Не существует единой структуры данных или алгоритма для "обработки" больших наборов данных любого характера вообще и для любых возможных целей - существует, скорее, обширная коллекция таких архитектур, структур данных и алгоритмов для столь многих разнообразных тип данных и требуемая «обработка» (в однозадачных, SMP и распределенных средах - во многих случаях они могут потребовать очень разных подходов).

0 голосов
/ 27 июня 2010

Когда люди описывают набор данных Large , они часто имеют в виду тот, где весь набор данных не может быть сохранен в памяти.Это создает проблемы относительно того, какие данные загружать и когда загружать и выгружать их.

Одним из подходов является использование файла последовательных данных и обработка от начала до конца.Это эффективно, когда характер обработки последовательный, но не работает хорошо, когда при обработке необходимо объединить данные из различных частей набора данных.

Другой подход - это какой-то индексированный файл, извлекающий необходимые данные.биты данных по мере необходимости.

Специализация этого - использование файлов с отображением в памяти, где вы позволяете менеджеру памяти обрабатывать загрузку и кэширование данных.

СУБД может значительноупростить доступ к данным, но добавляет некоторые системные издержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...