Структуры данных (Data structures) — это средства, с помощью которых программы хранят и извлекают данные. Эта книга посвящена структурам данных типа «ключ-значение», которые широко используются в высоконагруженных приложениях благодаря универсальности модели данных типа «ключ-значение». Структуры данных типа «ключ-значение» управляют коллекцией записей типа «ключ-значение» с тем свойством, что данный ключ связан только с одним значением, но одно и то же значение может быть связано со многими ключами. Часть значения записи данных может иметь произвольную семантику. Например, это может быть запись в реляционной базе данных или Pandas DataFrame, или произвольный набор полей, которые приложение умеет анализировать и использовать в системе NoSQL. В некоторых случаях, например, когда системы управляют данными для социальных сетей, значение может содержать ссылку на большой объект, такой как изображение или видео.
Физически структура данных «ключ-значение» состоит из (1) данных, физически хранящихся в некоторой памяти, (2) необязательных метаданных, облегчающих навигацию по данным, и (3) алгоритмов, поддерживающих операции хранения и извлечения данных (Hellerstein и др., 2007; Selinger и др., 1979; Idreos и др., 2018a). Другие термины, используемые в литературе для структур данных, включают «методы доступа», «контейнеры данных» и «поисковые структуры».
Системы данных, операционные системы, файловые системы, компиляторы и сетевые системы используют разнообразные структуры данных. Примеры в этой книге взяты в основном из области систем данных большого объёма, требующих вторичных устройств хранения, но основные аспекты анализа и проектирования применимы и к системам, работающим исключительно в памяти, где доступ к ОЗУ (памяти с произвольным доступом) намного медленнее, чем доступ к кэшу. Фактически, анализ применим к любой системе, в которой есть два или более уровней в иерархии памяти/хранилища.
Учитывая обилие приложений, которые можно смоделировать с помощью данных типа «ключ-значение», такие структуры данных обладают огромной общей полезностью. Например, определённая структура данных может быть использована для описания (1) доступа к метаданным в файлах, сетях и операционных системах (Bovet и Cesati, 2005; Rodeh, 2008), (2) доступа к данным в реляционных системах (Hellerstein и др., 2007), (3) доступа к данным в системах NoSQL и NewSQL (Idreos и Callaghan, 2020; Mohan, 2014), и (4) разработки признаков и структуры моделей в конвейерах машинного обучения (Wasay и др., 2021).