От дискуссионных групп онлайн и блогов, я видел, что много вопросов об интервью связано с обработкой крупномасштабного набора данных. Я задаюсь вопросом, там систематический подход для анализа этого типа вопросов? Или в более определенном, там какая-либо структура данных или алгоритмы, которые могут использоваться для контакта с этим? Любые предложения действительно ценятся.
«Крупномасштабные» наборы данных, которые я видел, подразделяются на несколько категорий, каждая из которых представляет для вас разные проблемы.
Другие проблемы, часто связанные с крупномасштабными наборами данных, но не связанные с размером как таковые , это:
Не существует единой структуры данных или алгоритма для «обработки» больших наборов данных любого характера и для всех возможных целей - скорее, существует обширная коллекция таких архитектур, структур данных, и алгоритмы для такого множества различных типов данных и требуемой «обработки» (в однозадачных, SMP и распределенных средах - они вполне могут потребовать очень разных подходов во многих случаях).
Серебряной пули не существует. Чтобы понять, какие алгоритмы и структуры данных полезны для конкретной крупномасштабной цели, требуется больше контекстной информации. Для данных, которые слишком велики, чтобы поместиться в памяти, например, многие системы управления базами данных используют B+ Trees".
Когда люди описывают большой набор данных, они часто имеют в виду такой набор данных, который не может быть сохранен в памяти целиком. Это создает проблемы с тем, какие данные загружать и когда их загружать и выгружать.
Один из подходов заключается в использовании последовательного файла данных и обработке от начала до конца. Это эффективно, когда характер обработки является последовательным, но не очень хорошо работает, когда при обработке необходимо объединить данные из различных частей набора данных.
Другой подход - это своего рода индексированный файл, извлекающий необходимые биты данных по мере их необходимости.
Специализацией этого подхода является использование файлов с отображением памяти, когда вы позволяете менеджеру памяти обрабатывать загрузку и кэширование данных.
СУБД может значительно упростить доступ к данным, но добавляет некоторые системные накладные расходы.