Введение

Тип ассоциативного массива

В информатике, Judy-массив — это структура данных, реализующая тип ассоциативного массива с высокой производительностью и низким потреблением памяти. В отличие от большинства других хранилищ ключ-значение, Judy-массивы не используют хеширование, применяют сжатие к своим ключам (которые могут быть целыми числами или строками) и могут эффективно представлять разреженные данные; то есть они могут иметь большие диапазоны неназначенных индексов без существенного увеличения использования памяти или времени обработки. Они разработаны для сохранения эффективности даже при размерах структур в диапазоне пета-элементов, с масштабированием производительности порядка O(log n). По сути, Judy-массивы — это высокооптимизированные 256-ичные радикс-деревья. Judy-деревья обычно быстрее, чем AVL-деревья, B-деревья, хеш-таблицы и списки пропусков, поскольку они оптимизированы для максимального использования кэша процессора. Кроме того, им не требуется балансировка дерева и не используется алгоритм хеширования.

История

Массив Джуди был изобретен Дугласом Баскинсом и назван в честь его сестры.

Распределение памяти

Массивы Джуди динамичны и могут увеличиваться или уменьшаться по мере добавления или удаления элементов. Объем памяти, используемый массивами Джуди, почти пропорционален числу элементов в массиве.

Скорость

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

Недостатки

Схемы Джуди крайне сложны. Даже самые простые реализации насчитывают тысячи строк кода. Более того, схемы Джуди оптимизированы для машин с кэш-линиями размером 64 байта, что делает их практически непереносимыми без существенной переработки.