Jump to content

Пропустить график

Графы пропуска — это своего рода распределенная структура данных, основанная на списках пропуска . Их изобрели в 2003 году Джеймс Аспнес и Гаури Шах. Почти идентичная структура данных под названием SkipNet была независимо изобретена Николасом Харви, Майклом Джонсом, Стефаном Саройу, Марвином Теймером и Алеком Вулманом также в 2003 году. [1]

Графы пропуска обладают полной функциональностью сбалансированного дерева в распределенной системе . Графы пропуска чаще всего используются при поиске одноранговых сетей . Поскольку они предоставляют возможность выполнять запросы по порядку ключей , они превосходят инструменты поиска, основанные только на функциональности хэш-таблицы . В отличие от списков пропуска и других древовидных структур данных , они очень устойчивы и могут выдерживать большую часть сбоев узлов . Кроме того, построение, вставка, поиск и восстановление графа пропуска, нарушенного неисправными узлами, можно выполнить с помощью простых алгоритмов. [2]

Описание

[ редактировать ]

Граф пропуска — это распределенная структура данных , основанная на списках пропуска , напоминающая сбалансированное дерево поиска . Это один из нескольких методов реализации распределенной хеш-таблицы , которая используется для поиска ресурсов, хранящихся в разных местах сети, по имени (или ключу) ресурса. Пропускные графы предлагают несколько преимуществ по сравнению с другими схемами распределенных хэш-таблиц, такими как Chord (одноранговая сеть) и Tapestry (DHT) , включая добавление и удаление за ожидаемое логарифмическое время, логарифмическое пространство на ресурс для хранения индексирующей информации, не требуется знание количество узлов в наборе и поддержка сложных запросов диапазона. Основным отличием от Chord и Tapestry является отсутствие хеширования ключей поиска ресурсов, что позволяет связанным ресурсам находиться рядом друг с другом в графе пропуска; это свойство делает возможным поиск значений в заданном диапазоне. Еще одним преимуществом графов пропуска является устойчивость к сбоям узлов как в моделях случайных, так и в состязательных моделях отказов.

Детали реализации

[ редактировать ]

Как и в списках пропуска , узлы располагаются в порядке возрастания на нескольких уровнях; каждый узел на уровне i содержится на уровне i +1 с некоторой вероятностью p (регулируемый параметр). Уровень 0 состоит из одного двусвязного списка, содержащего все узлы набора. На более высоких уровнях списки становятся все более разреженными, пока список не будет состоять всего из одного узла. Графы пропуска отличаются от списков пропуска тем, что каждый уровень i ≥1 будет содержать несколько списков; членство ключа x в списке определяется вектором принадлежности . Вектор принадлежности определяется как бесконечное случайное слово в фиксированном алфавите, каждый список в графе пропуска идентифицируется конечным словом w из того же алфавита, если это слово является префиксом тогда узел x является членом списка. [2]

Операции

[ редактировать ]

Графики пропуска поддерживают основные операции поиска , вставки и удаления . Пропуск графиков также будет поддерживать более сложную операцию поиска диапазона .

Алгоритм поиска графов пропуска практически идентичен алгоритму поиска списков пропуска, но он модифицирован для работы в распределенной системе. Поиск начинается с верхнего уровня и проходит через всю структуру. На каждом уровне поиск проходит по списку до тех пор, пока следующий узел не будет содержать больший ключ. Когда найден больший ключ, поиск переходит на следующий уровень, продолжаясь до тех пор, пока ключ не будет найден или не будет определено, что ключ не содержится в наборе узлов. Если ключ не содержится в наборе узлов, возвращается наибольшее значение, меньшее, чем ключ поиска.

Каждый узел в списке имеет следующие поля:

key
Значение узла.
neighbor[R/L][level]
Массив, содержащий указатели на правого и левого соседа узла, дважды связанного на уровне i.
search(searchOp, startNode, searchKey, level)
    if (v.key = searchKey) then
        send(foundOp, v) to startNode
    if (v.key < searchKey) then
        while level ≥ 0
            if (v.neighbor[R][level].key ≤ searchKey) then
                send(searchOp, startNode, searchKey, level) to v.neighbor[R][level]
                break
            else
                level = level - 1
    else
        while level ≥ 0
            if ((v.neighbor[L][level]).key ≥ searchKey) then
                send(searchOp, startNode, searchKey, level) to v.neighbor[L][level]
                break
            else
                level = level - 1
    if (level < 0) then
        send(notFoundOp, v) to startNode

Анализ, проведенный Уильямом Пью, показывает, что в среднем список пропуска и, как следствие, граф пропуска содержат уровни для фиксированного значения p . [3] Учитывая, что максимум узлы ищутся в среднем за уровень, общее ожидаемое количество отправленных сообщений равно и ожидаемое время поиска равно . [2] Следовательно, для фиксированного значения p ожидается, что операция поиска займет O (log n ) время с использованием сообщений O (log n ) . [2]

Вставлять

[ редактировать ]

Вставка выполняется в два этапа и требует, чтобы новый узел u знал некоторый вводящий узел v ; вводящим узлом может быть любой другой узел, находящийся в данный момент в графе пропуска. На первом этапе новый узел u использует вводящий узел v для поиска своего собственного ключа; Ожидается, что этот поиск завершится неудачей и вернет узел s с наибольшим ключом, меньшим, чем u . На втором этапе u вставляет себя на каждый уровень, пока не станет единственным элементом в списке на верхнем уровне. [2] Вставка на каждом уровне осуществляется с помощью стандартных операций с двусвязным списком; следующий указатель левого соседа изменяется, чтобы указывать на новый узел, а предыдущий указатель правого соседа изменяется, чтобы указывать на узел.

insert()
search for s
L = 0
while true
    insert u into level L from s
    Scan through level L to find s' such which has membership vector matching membership vector of u for first L+1 characters
    if no s' exists
        exit
    else
        s = s'
        L = L + 1

Подобно поиску, операция вставки занимает ожидаемое количество сообщений O (log n ) и время O (log n ). При фиксированном значении р; Ожидается, что операция поиска на этапе 1 займет O (log n ) времени и сообщений. На этапе 2 на каждом уровне L ≥ 0 u взаимодействует со средним числом 1/ p других узлов, чтобы найти s ', для этого потребуется время O (1/ p ) и сообщения, ведущие к времени O (1) и сообщениям для каждого шага в фаза 2. [2]

Узлы могут быть удалены параллельно на каждом уровне за O (1) раз и O (log n ) сообщений. [2] Когда узел желает покинуть граф, он должен отправить сообщения своим непосредственным соседям, чтобы переставить их указатели следующего и предыдущего узла. [2]

delete()
for L = 1 to max level, in parallel
    delete u from each level.
delete u from level 0

График пропуска содержит среднее значение O (log n ) уровней; на каждом уровне вы должны отправить 2 сообщения для завершения операции удаления в двусвязном списке. Поскольку операции на каждом уровне могут выполняться параллельно, операция удаления может быть завершена с использованием времени O (1) и ожидаемых сообщений O (log n ).

Отказоустойчивость

[ редактировать ]

В графах пропуска отказоустойчивость описывает количество узлов, которые могут быть отключены от графа пропуска из-за сбоев других узлов. [2] Были рассмотрены две модели отказа; случайные сбои и состязательные сбои. В модели случайного отказа любой узел с некоторой вероятностью может выйти из строя независимо от любого другого узла. Состязательная модель предполагает, что отказы узлов планируются таким образом, что на каждом этапе достигается наихудший возможный отказ, известна вся структура графа пропусков и выбираются отказы для максимального увеличения отключения узла. Недостатком пропуска графов является отсутствие механизма восстановления ; в настоящее время единственный способ удалить и восстановить граф пропуска — это построить новый граф пропуска с уцелевшими узлами.

Случайный сбой

[ редактировать ]

Графики пропуска обладают высокой устойчивостью к случайным сбоям. Благодаря сохранению информации о состоянии соседей и использованию резервных каналов во избежание отказа соседей нормальная работа может продолжаться даже при большом количестве сбоев узлов. Пока количество вышедших из строя узлов меньше график пропуска может продолжать нормально функционировать. [2] Моделирование, выполненное Джеймсом Аспнесом, показывает, что граф пропусков с 131072 узлами способен выдерживать до 60% сбоев своих узлов до того, как выжившие узлы будут изолированы. [2] Хотя другие распределенные структуры данных могут достичь более высокого уровня отказоустойчивости, они, как правило, гораздо более сложны.

Состязательный провал

[ редактировать ]

Состязательный отказ сложно смоделировать в большой сети, поскольку становится трудно найти модели сбоя в худшем случае. [2] Теоретический анализ показывает, что устойчивость зависит от коэффициента расширения вершин графа, определяемого следующим образом. Для набора узлов A в графе G коэффициент расширения равен количеству узлов не в A, но смежных с узлом в A, делённому на количество узлов в A. Если графы пропуска имеют достаточно большой коэффициент расширения тогда самое большее узлы могут быть разделены, даже если конкретно запланировано до f отказов. [2]

  1. ^ Николас Дж. А. Харви; Майкл Б. Джонс; Стефан Шарою; Марвин Теймер; Алек Вольман. «SkipNet: масштабируемая наложенная сеть с практичными свойствами локальности» (PDF) .
  2. ^ Перейти обратно: а б с д и ж г час я дж к л м Джеймс Аспнес; Гаури Шах. «Пропустить графики» (PDF) . Компьютерные науки – Йельский университет . Графы пропуска — это новая распределенная структура данных, основанная на списках пропуска, которая обеспечивает полную функциональность сбалансированного дерева в распределенной системе, где ресурсы хранятся в отдельных узлах, которые могут выйти из строя в любой момент. Они предназначены для использования в поисковых одноранговых системах и, предоставляя возможность выполнять запросы на основе порядка ключей, улучшают существующие инструменты поиска, которые предоставляют только функциональность хэш-таблиц. В отличие от списков пропусков или других древовидных структур данных, графы пропусков обладают высокой отказоустойчивостью и допускают большую часть отказов узлов без потери связности. Кроме того, можно использовать простые и понятные алгоритмы для построения графа пропуска, вставки в него новых узлов, поиска в нем, а также обнаружения и исправления ошибок в графе пропуска, возникших из-за сбоев узлов.
  3. ^ Уильям Пью. «Списки пропуска: вероятностная альтернатива сбалансированным деревьям» (PDF) .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8aaaadb40542cd96a432d008a54913f0__1656941220
URL1:https://arc.ask3.ru/arc/aa/8a/f0/8aaaadb40542cd96a432d008a54913f0.html
Заголовок, (Title) документа по адресу, URL1:
Skip graph - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)