RU2517238C2 - Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений - Google Patents

Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений Download PDF

Info

Publication number
RU2517238C2
RU2517238C2 RU2011144807/08A RU2011144807A RU2517238C2 RU 2517238 C2 RU2517238 C2 RU 2517238C2 RU 2011144807/08 A RU2011144807/08 A RU 2011144807/08A RU 2011144807 A RU2011144807 A RU 2011144807A RU 2517238 C2 RU2517238 C2 RU 2517238C2
Authority
RU
Russia
Prior art keywords
segment
segments
hashing
hash table
hashed
Prior art date
Application number
RU2011144807/08A
Other languages
English (en)
Other versions
RU2011144807A (ru
Inventor
Антон Александрович Малахов
Original Assignee
Интел Корпорейшн
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Интел Корпорейшн filed Critical Интел Корпорейшн
Publication of RU2011144807A publication Critical patent/RU2011144807A/ru
Application granted granted Critical
Publication of RU2517238C2 publication Critical patent/RU2517238C2/ru

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Abstract

Изобретение относится к области обработки хеш-таблиц. Техническим результатом является параллельное выполнение изменения размеров и выполняемого по требованию для каждого адресуемого сегмента повторного хеширования для одновременно обрабатываемой хеш-таблицы, которая представляет собой совместно используемое запоминающее устройство, доступ к которому осуществляется одним или больше потоками, которые могут выполнять одно или больше ядер многопроцессорной системы, такой как система, имеющая один или больше многоядерных процессоров. Раскрывается способ для выделения второго количества сегментов для хеш-таблицы, совместно одновременно используемой множеством потоков, где второе количество сегментов логически отображают на соответствующий родительский сегмент первого количества сегментов, и публикуют обновленную емкость хеш-таблицы для завершения выделения без выполнения какого-либо повторного хеширования, таким образом, что повторное хеширование может быть выполнено позже по требованию для каждого сегмента. 3 н. и 17 з.п. ф-лы, 6 ил., 4 табл.

Description

Уровень техники
Хэш-таблицы представляют собой фундаментальный строительный блок в различных приложениях, таких как базы данных, поисковые системы, статистическая обработка и языки динамических сценариев. Хэш-таблицы представляют собой семейство контейнеров, которые ассоциируют ключи со значениями. Хэш-таблицы рассчитывают положение размещения для элемента, сохраненного на входе таблицы, то есть адресуемого сегмента, используя его хеш-значение и текущую емкость контейнера. Однако контейнеры обычно должны динамически увеличивать емкость, что означает либо изменение размещения или выделение дополнительного объема памяти. Поэтому увеличение емкости приводит к недействительности размещения элемента и требует перемещения элементов в новые места, что обычно называется повторным хешированием.
Для известных алгоритмов параллельной обработки хеш-таблиц, когда поток принимает решение изменить размеры контейнера, он блокирует (то есть временно останавливает) некоторые (или даже все) одновременно выполняемые операции по таблице до тех пор, пока он не закончит оба процесса изменения размеров и повторного хеширования. Это приводит к деградации параллельного выполнения операций, и, таким образом, рабочих характеристик. Другая проблема состоит в том, что время выполнения и сложность операций при изменении размеров существенно отличаются от тех же операций без изменения размеров.
Краткое описание чертежей
На фиг.1 показана блок-схема последовательности операций способа для обновления хеш-таблицы в соответствии с одним вариантом осуществления настоящего изобретения.
На фиг.2А показана блок-схема сегмента в соответствии с одним вариантом осуществления настоящего изобретения.
На фиг.2В показана блок-схема, иллюстрирующая выделение новых сегментов в соответствии с одним вариантом осуществления настоящего изобретения.
На фиг.2С показана блок-схема, иллюстрирующая выделение новых сегментов в соответствии с другим вариантом осуществления настоящего изобретения.
На фиг.3 показана блок-схема последовательности операций способа для выполнения поиска/повторного хеширования в соответствии с вариантом осуществления настоящего изобретения.
На фиг.4 представлена блок-схема системы в соответствии с одним вариантом осуществления настоящего изобретения.
Подробное описание изобретения
Варианты осуществления можно использовать для параллельного выполнения изменения размеров и выполняемого по требованию для каждого адресуемого сегмента повторного хеширования для одновременно обрабатываемой хеш-таблицы, которая представляет собой совместно используемое запоминающее устройство, доступ к которому осуществляется одним или больше потоками, которые могут выполнять одно или больше ядер многопроцессорной системы, такой, как система, имеющая один или больше многоядерных процессоров. Они применимы для хеш-таблиц, где адресуемый сегмент может содержать набор элементов. Для простоты предположим, что исходная емкость таблицы представляет собой степень двух. Остаток деления хеш-значения для элемента на емкость приводит к получению индекса адресуемого сегмента, в котором содержится элемент. В некоторых вариантах осуществления, в результате упрощения, индекс адресуемого сегмента также может быть рассчитан по следующей формуле:
b u c k e t _ i d x = h a s h & ( е м к о с т ь 1 ) у р а в н е н и е [ 1 ]
Figure 00000001
где hash представляет собой значение хеш-функции, которое получают путем расчета хеш-функции, в которой ключ применяют для хеш-функции, которая генерирует значение хеш-функции, и знак "&" обозначает побитную операцию "И" для двоичных представлений. В одном варианте осуществления емкость может быть выражена в единицах количества адресуемых сегментов хеш-таблицы, хотя объем настоящего изобретения не ограничен в этом отношении.
Для увеличения емкости алгоритм в соответствии с вариантом осуществления настоящего изобретения может выделять такое количество адресуемых сегментов, какое уже существует, и поддерживают старые сегменты, удваивая, таким образом, количество сегментов. Каждый новый сегмент логически отображают на существующий сегмент (родительский), который имеет индекс, включающий в себя то же значение (то есть набор битов), что и индекс нового сегмента, за исключением наибольшего бита, содержащего значение 1. Например, если индекс сегмента составляет 00101101 в бинарном выражении, тогда соответствующий индекс родительского сегмента представляет собой 00001101. А именно индекс родительского сегмента может быть получен следующим образом:
p a r e n t _ i d x = b u c k e t _ i d x & ( 1 < < | _ L o g 2 ( b u c k e t _ i d x ) _ | 1 ) у р а в н е н и е [ 2 ]
Figure 00000002
где << обозначает сдвиг двоичного левого операнда на количество битов, указанное правым операндом.
Во многих вариантах осуществлении некоторые новые сегменты могут иметь другие новые сегменты, в качестве родительских. Выделение, которое приводит к этому, может быть скомбинировано в одиночный запрос памяти в некоторых вариантах осуществлении, как описано ниже.
Рассмотрим теперь фиг.1, на которой показана блок-схема последовательности операций способа, для обновления хеш-таблицы в соответствии с одним вариантом осуществления настоящего изобретения. Как показано на фиг.1, способ 10 может начаться путем определения того, что в хеш-таблице требуется увеличенное пространство (блок 20). Хотя объем настоящего изобретения не ограничен в этом отношении, такое определение может быть выполнено на основе коэффициента загрузки таблицы, например, системным программным обеспечением после операции вставки новой пары данных, когда количество данных, сохраненных в хеш-таблице, достигает заданного порогового значения, например определенного процента всей величины таблицы. Конечно, другие способы определения того, что требуется увеличенное пространство, можно использовать в других вариантах осуществления. Например, пользователь может указывать количество сегментов в вызове обратной операции.
После такого определения управление переходит в блок 30, где может быть выделено определенное количество новых сегментов. Более конкретно, может быть выделено количество сегментов, соответствующее настоящему количеству сегментов в хеш-таблице. Таким образом, количество сегментов, выделенных в таблице, удваивается. В одном варианте осуществления вызывают распределитель для получения требуемого объема запоминающего устройства, и сегменты инициализируют, как новые пустые сегменты. Затем такое новое пространство может быть опубликовано (блок 40). В то время как объем настоящего изобретения не ограничен в этом отношении, публикация может быть выполнена через обновление до переменной, содержащей величину емкости. В одном варианте осуществления обновление может выполняться через сохранение с операцией высвобождения (или с помощью элементарной записи) до значения "емкости". В качестве альтернативы, такое обновление может представлять маску, которая соответствует значению емкости минус 1. Таким образом, путем выделения новых сегментов и публикации этого нового пространства выделение заканчивают без необходимости выполнения полного повторного хеширования данных, присутствующих в исходных сегментах, в новые сегменты. Таким образом, выделение выполняют независимо от повторного хеширования, и его заканчивают путем публикации нового пространства. Каждый сегмент во вновь опубликованном пространстве первоначально повторно маркируют, как нехешированный.
Рассмотрим теперь фиг.2А, на которой показана блок-схема адресуемого сегмента в соответствии с одним вариантом осуществления настоящего изобретения. Как показано на фиг.2А, сегмент 100 может включать в себя данные, а именно участок 110 данных, который включает в себя ключ и пары элементов, называемых здесь, в общем, парами данных. Участок 110 данных может, в случае необходимости, содержать ограниченный набор (массив) пар, непосредственно (внедренных) и опосредованно, например, через указатель. Кроме того, присутствует информация 120 управления. Различная информация может быть включена в информацию 120 управления, включающую в себя, например, объект (а) синхронизации, такой как взаимное исключение, поле (b) управления, которое может включать в себя различную информацию, такую как флаги, счетчики и т.д., и поле (с) состояния повторного хеширования, которое может включать в себя различную информацию, обозначающую, был ли повторно хеширован заданный сегмент, и количество уровней повторного хеширования (которые могут использоваться для подхода "один-множество", описанного ниже).
Рассмотрим теперь фиг.2В, на которой показана блок-схемы, иллюстрирующая выделение новых сегментов в соответствии с вариантом осуществления настоящего изобретения. Как показано на фиг.2В, присутствует множество существующих сегментов 200а-200n. Каждый такой сегмент может соответствовать сегменту 100 по фиг.2А, в качестве примера. В соответствии с операцией изменения размещения новые сегменты логически отображают на родительские сегменты, формируя новый набор пустых сегментов 210а-210n. Как можно видеть, выделение выполняется для того же количества сегментов, какое уже существует. Каждый из этих новых сегментов логически отображается на один из родительских сегментов и помечается, как не подвергавшийся повторному хешированию, например, в его информации 120 управления, такой как поле (с) повторного хеширования, показанное на фиг.2А.
В других случаях, по меньшей мере, некоторые из новых сегментов могут быть отображены на другие новые сегменты, как показано на фиг.2С. Таким образом, фиг.2С представляет собой поднабор фиг.2В, и в ней описаны две отдельных возможности: (1) родительские сегменты также могут не быть повторно хешированными; и (2) выделения могут быть скомбинированы. Как можно видеть, новые пустые сегменты 210а-210n отображаются на существующие сегменты 200а-200n. В свою очередь, дополнительные новые пустые сегменты 220а-220n также отображаются на существующие сегменты 200а-200n. Кроме того, другие новые пустые сегменты 230а-230n отображаются на новые пустые сегменты 210а-210n. Следует отметить, что новые пустые сегменты, начинающиеся в сегменте 210а и заканчивающиеся в 230n, могут представлять собой непрерывное пространство комбинированных выделений, и количество сегментов может быть удвоено несколько раз одновременно, например количество сегментов может быть умножено на коэффициент 4.
После выделения и публикации нового значения емкости, с помощью операции просмотра рассчитывают индекс сегмента, используя новое значение емкости. После публикации новой емкости любая операция просмотра нового сегмента должна вначале просматривать родительский сегмент (сегменты), и в случае необходимости (но в конечном итоге) выполняют повторное хеширование ее (их) содержания в новый сегмент (сегменты). Таким образом, работа по повторному хешированию может быть задержана и разделена по последующим операциям в пределах контейнера. Рассчитанный индекс, с использованием нового значения емкости может указывать на сегмент, помеченный, как не подвергавшийся повторному хешированию. Если это так, операция просмотра может переходить вначале на просмотр родительского сегмента, родительского сегмента для родительского сегмента и т.д., до тех пор, пока не будет найден сегмент, подвергавшийся повторному хешированию или необходимый ключ. Когда будет найдена требуемая информация, результаты просмотра могут быть возвращены по запросу. Также, кроме того, повторное хеширование может происходить для каждого сегмента (обрабатываемых сегментов). Такое повторное хеширование может называться ленивым повторным хешированием, поскольку для него не используются время и затраты для выполнения полного повторного хеширования всей таблицы по изменению положения, а только отдельное повторное хеширование сегмента (по требованию) может происходить в ответ на запрос просмотра. В качестве альтернативы, такое повторное хеширование может происходить по внешнему запросу (пользователя).
Таким образом, в случае необходимости (но в конечном итоге), все элементы, которых это касается, могут быть повторно хешированы, путем перемещения пар данных в новый сегмент (сегменты), если они принадлежат ему. С этой целью возможны различные стратегии. В качестве примера, два состояния можно использовать для идентификации сегментов, повторно хешированных и не повторно хешированных. В этом варианте осуществления предусмотрен специально выделенный владелец для операции повторного хеширования. С этой целью поток блокирует сегмент, используя взаимно исключающую синхронизацию, таким образом, что никакой другой поток не может получить доступ к нему в течение времени операции и, таким образом, должен подождать.
Третье состояние может быть добавлено, а именно состояние "частично повторно хешировано" так, что другие потоки могут одновременно получать доступ к новому сегменту, который повторно хешируют, или участвовать в повторном хешировании одного и того же родительского повторного сегмента. Основное назначение воплощения в третьем состоянии состоит в том, чтобы разблокировать потоки, которые, в противном случае, должны были ожидать до тех пор, пока произойдет повторное хеширование сегмента другим потоком.
Для логики двух состояний может быть выполнено рекурсивное повторное хеширование между двумя сегментами (например, родительским и следующим потомком), или может применяться подход "один-множество", где родительский сегмент повторно хешируют во все не хешированные повторно потомки. Для алгоритма рекурсивного повторного хеширования с двумя состояниями переменная одного состояния (например, присутствующая в информации 120 управления на фиг.2А) может быть представлена с состояниями НОВЫЙ (пустой без повторного хеширования), ПУСТОЙ (но повторно хешированный) и ЗАПОЛНЕННЫЙ (повторно хешированный). Например, указатель на пары данных может представлять все три состояния и все еще относиться к данным. Следует отметить, что вариант воплощения "один - множество" использует дополнительный элемент структуры данных адресуемого сегмента, который выражает количество уровней повторного хеширования (емкость) для сегмента.
На фиг.3 показана блок-схема последовательности операций способа для выполнения просмотра/повторного хеширования в соответствии с вариантом осуществления настоящего изобретения. Эта блок-схема последовательности операций предназначена для представления обзора высокого уровня, который соответствует как взаимно-однозначному (рекурсивному) подходу, так и подходу "один-множество", любой из которых может быть воплощен, и оба из которых дополнительно описаны ниже. Запрос на просмотр может представлять запрос, предназначенный только для операции поиска или операции вставки. Для простоты описания будет описана операция поиска. Как показано на фиг.3, способ 300 может начинаться с расчета индекса адресуемого сегмента и адреса для запроса просмотра (блок 305). Например, ключ, ассоциированный с запрашиваемой парой данных, может быть предусмотрен в хеш-функции, которая генерирует хеш-значение, которое вместе с емкостью хеш-таблицы можно использовать для получения индекса и, таким образом, адреса в запоминающем устройстве. Далее может быть определено, представляет ли запрос на просмотр повторно не хешированный пустой сегмент (ромб 310). В противном случае, просмотр может быть выполнен путем получения доступа к индексированному сегменту, и представления пары (пар) данных по запросу (блок 315). Следует отметить, что дополнительные операции, такие как синхронизация, поиск через сегмент, проверка состояния "гонки" и в случае необходимости повторный запуск всей операции поиска (если будет детектирована гонка) могут быть выполнены во время этого этапа, как будет дополнительно описано ниже.
Если вместо этого определяют, что запрос на поиск представляет собой сегмент, не подвергавшийся повторному хешированию, управление переходит в блок 320. В блоке 320 могут быть рассчитаны индекс и адрес для родительского сегмента. Как описано выше, такой индекс может быть рассчитан в соответствии с Уравнением 2, в некоторых вариантах осуществления. Когда индекс рассчитывают, его можно использовать для получения доступа к родительскому сегменту. Такой сегмент во время доступа может проверяться для определения, был ли он повторно хеширован или включает ли он в себя запрашиваемую пару данных (ромб 330). Такое определение может быть основано частично на состоянии повторного хеширования сегмента. Если будет найден повторно хешированный сегмент, сегменты могут быть синхронизированы (блок 340), и пара данных может быть возвращена по запросу (блок 350). В противном случае управление переходит обратно в блок 320 для дальнейшей итерации в этой петле цикла. Синхронизация в блоке 340 может включать в себя блокирование сегментов, представляющих интерес, до выполнения какого-либо поиска или операции повторного хеширования. Следует отметить, что в блоке 350 решение в отношении повторного хеширования может зависеть от заданного алгоритма, который может обеспечить повторное хеширование по запросу, частичное повторное хеширование или повторное хеширование по специально выделенным потокам. Если выполняется повторное хеширование, состояние повторного хеширования одного или больше сегментов может быть обновлено, когда выполняют повторное хеширование. Для подхода "один-множество" изменяются состояния родительских и всех новых сегментов. Следует отметить, что в этот момент, после повторного хеширования, из родительского сегмента могут быть сняты некоторые пары для перемещения их в сегменты - потомки (состояние, измененное для подхода "один-множество").
Поскольку сегменты никогда не освобождают или не перемещают одновременно, некоторые алгоритмы, не использующие блокирование или не содержащие фиксацию, могут использоваться для доступа к сегментам и внедренным в них данным. Таким образом, могут быть повышены рабочие характеристики и масштабируемость приложений, используя хеш-таблицы.
Когда множество потоков получают доступ к хеш-таблице, как к совместно используемому ресурсу, становится возможным возникновение состояния гонки при просмотре повторного хеширования. Если ключ не будет найден, также возможно, что он был одновременно перемещен при повторном хешировании сегмента. Для того, чтобы удостовериться, что ключ не существует, текущую емкость требуется сравнить с исходной емкостью, которая использовалась для расчета индекса сегмента. Если они не равны, тогда можно затем определить, являются ли индексы сегмента, рассчитанные по этим значениями, отличными друг от друга (оба сравнения могут быть сведены к последнему одному). Если это так, и если ближайший сегмент-наследник был повторно хеширован, или его повторно хешируют, просмотр должен быть повторно запущен (для того, чтобы удостовериться, что ключ не существует). Следует отметить, что может существовать не только один наследник, если емкость была умножена более чем на 2. В качестве одного примера состояния гонки рассмотрим следующую последовательность, которая возможна в одновременно исполняемой среде:
Таблица 1
1. Поток 1: получают текущую емкость и рассчитывают индекс (X) сегмента для операции просмотра.
2. Поток 2: заканчивают выделение новых сегментов и публикуют новую емкость.
3. Поток 3: получают новое значение емкости и начинают повторное хеширование сегмента (X) в новое пространство (Y).
4. Поток 1: продолжается в результате поиска в сегменте (X) элемента и не может его найти. Но это не означает, что такой элемент не существует во всей таблице, поскольку он мог быть перемещен (в Y) из-за одновременного роста (2) и повторного хеширования (3).
Рассмотрим теперь Таблицу 2, здесь показан пример псевдокода, для определения существования состояния гонки в соответствии с вариантом осуществления настоящего изобретения, а именно, примерный алгоритм для проверки, может ли возникнуть коллизия во время повторного хеширования.
Таблица 2
bool check_rehashmg_collision (hash, capacity_old, capacity_new) {
if((hash & (capacity_old-l)) !=(hash & (capacity_new-l))) {
//найти следующую применимую маску после старого уровня while((hash & capacity_old)=0)
capacity_old=(capacity_old<<1);
capacity_pld=(capacity_old<<1);
//проверить, происходит ли повторное хеширование или было выполнено
if(! is_marked_for_rehashing (hash & (capacity_old-1)))
return true; / / просмотр должен быть запущен повторно
}
return false; / / коллизия отсутствует
}
В одном варианте осуществления может использоваться рекурсивный алгоритм повторного хеширования с двумя состояниями, с тремя функциями, а именно функцией просмотра, функцией получения сегмента, которая выполняет синхронизацию и вызов третьей функции, а именно функции повторного хеширования. Рассмотрим теперь Таблицу 3, которая представлена в виде псевдокода для такого рекурсивного алгоритма повторного хеширования с двумя состояниями.
Таблица 3
Просмотр:
1. рассчитать хеш-значение для заданного ключа
2. получить текущее значение емкости и рассчитать индекс сегмента (используя хеш-значение и емкость)
3. вызвать: Get bucket для считывания
4. выполнить поиск ключа в сегменте
а. если будет найден: высвободить сегмент и вернуть данные, для которых должна быть выполнена обработка
5. не найден: проверить наличие гонки при повторном хешировании (например, в соответствии с Таблицей 2)
а. если гонка не возникла: [может быть выполнена операция вставки или] высвободить сегмент и вернуться
b. гонка детектирована: высвободить сегмент и перейти к (2)
Get bucket (воплощение для блокирования считывания-записи):
1. рассчитать/получить адрес сегмента
2. получить состояние сегмента
а. если НОВЫЙ (не повторно хешированный): попытаться получить исключительный доступ к сегменту (некоторые потоки могут успешно выполняться), если не так: перейти к (3)
b. получен: если состояние сегмента все еще НОВЫЙ (двойная проверка), вызвать: повторное хеширование сегмента и затем возврат
3. получить установленный доступ к сегменту
Get bucket (воплощение только для взаимно исключающих блокирований):
1. рассчитать адрес сегмента, используя значения хеш-функции и емкости
2. получить (исключительный) доступ к сегменту
3. получить состояние сегмента
а. если НОВЫЙ (не повторное сегментированный): вызвать: сегмент Rehash bucket
Rehash bucket: (который выполняют при исключительном блокировании, в соответствии с алгоритмом "Get bucket"),
1. пометить новый сегмент, как повторно хешированный
2. рассчитать индекс родительского сегмента
3. вызвать: Получить родительский сегмент для считывания
4. для каждого элемента данных в родительском сегменте:
а. рассчитать значение хеш-функции
b. проверить, следует ли переместить элемент в новый сегмент, и если да:
i. в случае необходимости обновить родительский сегмент до получения исключительного доступа (если блокирование было прервано для обновления, повторно возобновить, начиная с (4)),
ii. переместить элемент из родительского сегмента в новый сегмент
Следует отметить, что взаимная связь между функциями Rehash bucket и Get bucket означает, что этот алгоритм является рекурсивным. Следует также отметить, что алгоритм одновременного повторного хеширования в соответствии с вариантом осуществления настоящего изобретения не требует определенных алгоритмов фиксации, поскольку вместо этого он только устанавливает уровень синхронизации. Например, "получить сегмент для считывания" может означать любое фактическое использование: получение исключительного блокирования, совместно используемого (блоком считывания) блокирования, или даже использование только счетчика версии (для операции считывания без блокирования).
В еще одном другом варианте осуществления можно использовать подход "один-множество". В Таблице 4 показана презентация в виде псевдокода для алгоритма "один-множество".
Таблица 4
Просмотр:
1. рассчитать значение хеш-функции для заданного ключа
2. получить текущее значение емкости и рассчитать индекс сегмента (используя значение хеш-функции и емкость) и адрес
3. получить состояние сегмента, если он не был повторно хеширован (новый):
а. найти ближайший повторно хешированный корень (родительский/прародительский и т.д.) сегмента
b. пытаться получить исключительный доступ к корневому сегменту, пока не будет получен, или состояние нового сегмента не будет изменено на "повторно сегментированный"
если состояние изменяется: освободить блокирование в случае необходимости и перейти к (4)
с. вызвать: Rehash bucket
4. получить определенный доступ к сегменту
5. выполнить поиск ключа в сегменте
d. если будет найден: высвободить сегмент и вернуть данные, который должны быть обработаны
6. если не будет найден: проверить наличие гонки повторного хеширования (например, в соответствии с Таблицей 2)
е. если гонка отсутствует: [может быть выполнена операция вставки или] высвободить сегмент и вернуться
f. гонка детектирована: высвободить сегмент и перейти в (2)
Rehash bucket: (который выполняют при исключительном блокировании),
1. для корневого сегмента и каждого из всех его сегментов наследников:
а. сохранить значение емкости для поля уровня повторного хеширования (и таким образом, пометить сегмент, как повторно хешированный)
2. для каждого элемента данных в корневом сегменте:
b. рассчитать значение хеш-функции
с. проверить, следует ли переместить элемент в новый сегмент, и если да:
i. переместить элемент для родительского сегмента в соответствующий новый сегмент
Вариант осуществления может быть воплощен в коде для соответствующего контейнера в библиотеке. Таким образом, в различных вариантах осуществления, вместо блокирования всего контейнера (или участка контейнера) для обновлений, выделение может выделять такое количество сегментов, которое уже существует, и поддерживать старые сегменты, удваивая, таким образом, количество сегментов. Каждый новый сегмент помечается как повторно не хешированный, и его логически отображают на существующий сегмент (родительский) с тем же индексом. В некоторых вариантах осуществления выделение также может быть скомбинировано в одну публикацию, и может использоваться один запрос памяти. Таким образом, изменение размеров в соответствии с вариантом осуществления настоящего изобретения не нарушает одновременность, поскольку оно не делает недействительными, не блокирует существующие сегменты.
Варианты осуществления могут быть воплощены во множестве различных типов системы. Рассмотрим теперь фиг.4, на которой показана блок-схема системы в соответствии с вариантом осуществления настоящего изобретения. Как показано на фиг.4, многопроцессорная система 500 представляет собой систему взаимного двухточечного соединения, и включает в себя первый процессор 570 и второй процессор 580, соединенные через взаимное двухточечное соединение 550. Как показано на фиг.4, каждый из процессоров 570 и 580 может представлять собой многоядерные процессоры, включающие в себя первое и второе ядра процессора (то есть ядра 574а и 574b процессора и ядра 584а и 584b процессора), хотя потенциально намного большее количество ядер могут присутствовать в процессорах. Ядра процессора могут выполнять различные потоки, которые могут обращаться к хеш-таблицам, сохраненным в системном запоминающем устройстве, в соответствии с вариантом осуществления настоящего изобретения, описанным выше.
Все еще обращаясь к фиг.4, первый процессор 570 дополнительно включает в себя концентратор 572 контроллера памяти (МСН) и двухточечные интерфейсы 576 и 578 (Р-Р). Аналогично, второй процессор 580 включает в себя МСН 582 и интерфейсы 586 и 588 Р-Р. Как показано на фиг.4, МСН 572 и 582 соединяют процессоры с соответствующим запоминающими устройствами, а именно запоминающим устройством 532 и запоминающим устройством 534, которые могут представлять собой части оперативного запоминающего устройства (например, динамического оперативного запоминающего устройства (DRAM)), локально установленные для соответствующих процессоров, и которые могут сохранять одну или больше хеш-таблиц, которые могут быть одновременно повторно хешированы в соответствии с вариантом осуществления настоящего изобретения. Первый процессор 570 и второй процессор 580 могут быть соединены с набором микросхем 590 через взаимные соединения 552 и 554 Р-Р соответственно. Как показано на фиг.4, набор 590 микросхем включает в себя интерфейсы 594 и 598 Р-Р.
Кроме того, набор 590 микросхем включает в себя интерфейс 592 для соединения набора 590 микросхем с высокопроизводительным графическим механизмом 538 через Р-Р взаимные соединения 539. В свою очередь, набор 590 микросхем может быть соединен с первой шиной 516 через интерфейс 596. Как показано на фиг.3, различные устройства 514 входа-выхода (I/O) могут быть соединены с первой шиной 516, вместе с мостом 518 шины, который соединяет первую шину 516 со второй шиной 520. Различные устройства могут быть соединены со второй шиной 520, включающей в себя, например, клавиатуру/мышь 522, устройство 526 передачи данных и накопитель данных; модуль 528, такой как привод диска, или другое устройство - накопитель информации, которое может включать в себя код 530, в одном варианте осуществления. Кроме того, аудиовход 524 I/O может быть соединен со второй шиной 520.
Варианты осуществления могут быть воплощены в коде и могут быть сохранены на носителе записи, на котором записаны инструкции, которые могут использоваться для программирования системы, для выполнения инструкций. Носитель записи может включать в себя, но не ограничен этим, любой тип диска, включая в себя гибкие диски, оптические диски, постоянное запоминающее устройство на компактных дисках (CD-ROM), компакт-диски, предназначенные для перезаписи (CD-RW), и магнитооптические диски, полупроводниковые устройства, такие как постоянное запоминающее устройство (ROM), оперативное запоминающее устройство (RAM), такие как динамические оперативные запоминающие устройства (DRAM), статические оперативные запоминающие устройства (SRAM), стираемые программируемые постоянные запоминающие устройства (EPROM), запоминающее устройство типа флэш, электрически стираемые программируемые постоянные запоминающие устройства памяти (EEPROM), магнитные или оптические карты, или любые другие типы носителей, пригодные для сохранения электронных инструкций.
В то время как настоящее изобретение было описано со ссылкой на ограниченное количество вариантов осуществления, для специалиста в данной области техники будут понятны множество модификаций и изменений для него. Предполагается, что приложенные формулы изобретения охватывают все такие модификации и изменения и попадают в пределы истинной сущности и объема данного настоящего изобретения.

Claims (20)

1. Способ для выделения второго количества сегментов для хэш-таблицы, совместно одновременно используемой множеством потоков, содержащий этапы, на которых:
выделяют второе количество сегментов для хеш-таблицы, совместно одновременно используемой множеством потоков, при этом хеш-таблица имеет первое количество сегментов, второе количество сегментов, по меньшей мере, равно первому количеству сегментов, и каждый из второго количества сегментов логически отображают на соответствующий родительский один из первого или второго количества сегментов; и
публикуют обновленную емкость хеш-таблицы, включающей в себя первое и второе количество сегментов, при этом выделение заканчивается посредством публикации обновленной емкости и без выполнения повторного хеширования элементов содержания первого количества сегментов.
2. Способ по п.1, дополнительно содержащий этап, на котором выполняют проверку, не блокируя сегмент, чтобы определить, необходимо ли повторное хеширование.
3. Способ по п.1, дополнительно содержащий этап, на котором затем выполняют повторное хеширование элементов содержания первого сегмента из первого количества сегментов до второго сегмента второго количества сегментов, выполняя операцию поиска для пары данных, присутствующей в первом сегменте.
4. Способ по п.1, дополнительно содержащий этапы, на которых вычисляют индекс сегмента, используя обновленную емкость, получают доступ к сегменту, используя индекс сегмента, определяют, что сегмент не был повторно хеширован, и рекурсивно вычисляют родительский индекс сегмента для родительского сегмента, пока повторно хешированный корневой сегмент не будет найден, на который сегмент логически отображает, используя обновленную емкость.
5. Способ по п.4, дополнительно содержащий этап, на котором выполняют повторное хеширование, по меньшей мере, части элементов содержания повторно хешированного корневого сегмента до сегмента во время выполнения или до выполнения поиска пары данных запроса поиска.
6. Способ по п.5, дополнительно содержащий этап, на котором устанавливают частичный индикатор повторного хеширования, когда только часть элементов содержания корневого сегмента повторно хеширована.
7. Способ по п.4, дополнительно содержащий поиск сегментов для пары данных запроса поиска и возврат пары данных, и без выполнения повторного хеширования элементов содержания сегментов.
8. Способ по п.1, дополнительно содержащий этапы, на которых в ответ на операцию поиска первым потоком, который не находит запрашиваемую пару данных в первом сегменте первого количества сегментов, сравнивают текущую величину емкости хеш-таблицы со значением емкости хеш-таблицы, использовавшимся при определении индекса сегмента для операции поиска, и если величина тока и значение являются разными, вычисляют индекс самого близкого сегмента наследника, получают доступ к самому близкому сегменту наследника и определяют состояние повторного хеширования для самого близкого сегмента наследника.
9. Способ по п.8, дополнительно содержащий этап, на котором повторно запускают операцию поиска, если состояние повторного хеширования не обозначает новое (повторно не хешированное) состояние.
10. Способ по п.1, дополнительно содержащий этап, на котором объединяют множество выделений в одиночное выделение для второго количества сегментов.
11. Способ по п.1, дополнительно содержащий этапы, на которых публикуют множество выделений и публикуют обновленную емкость один раз для множества выделений.
12. Изделие, содержащее машиносчитываемый носитель информации, включающий в себя инструкции, которые при их выполнении устройством обеспечивают возможность для устройства выполнить способ для выделения второго количества сегментов для хэш-таблицы, совместно одновременно используемой множеством потоков, содержащий этапы, на которых:
выделяют второе количество сегментов для хеш-таблицы, совместно одновременно используемой множеством потоков, при этом хеш-таблица имеет первое количество сегментов, второе количество сегментов, по меньшей мере, равно первому количеству сегментов, и каждый из второго количества сегментов логически отображают на соответствующий родительский один из первого или второго количества сегментов; и
публикуют обновленную емкость хеш-таблицы, включающей в себя первое и второе количество сегментов, при этом выделение заканчивается посредством публикации обновленной емкости и без выполнения повторного хеширования элементов содержания первого количества сегментов.
13. Изделие по п.12, в котором способ дополнительно содержит выполнение проверки, не блокируя сегмент, чтобы определить, необходимо ли повторное хеширование.
14. Изделие по п.12, в котором способ дополнительно содержит выполнение повторного хеширования элементов содержания первого сегмента из первого количества сегментов до второго сегмента второго количества сегментов, выполняя операцию поиска для пары данных, присутствующей в первом сегменте.
15. Изделие по п.12, в котором способ дополнительно содержит вычисление индекса сегмента, используя обновленную емкость, получение доступа к сегменту, используя индекс сегмента, определение, что сегмент не был повторно хеширован, и рекурсивное вычисление родительского индекса сегмента для родительского сегмента, пока повторно хешированный корневой сегмент не будет найден, на который сегмент логически отображает, используя обновленную емкость.
16. Система для выделения второго количества сегментов для хэш-таблицы, совместно одновременно используемой множеством потоков, содержащая:
микропроцессор, включающий в себя первое ядро и второе ядро, каждое предназначенное для выполнения одного или больше потоков, при этом первый поток должен выделять второе количество сегментов для хеш-таблицы, совместно используемой одновременно множеством потоков, причем хеш-таблица ранее имела первое количество сегментов, второе количество сегментов, по меньшей мере, равно первому количеству сегментов, где каждое второе количество сегментов логически отображают либо на соответствующего родителя одного из первого количества сегментов, или на один из второго количества сегментов, и публиковать обновленную емкость хеш-таблицы, включающей в себя первое и второе количество сегментов, при этом первый поток должен закончить выделение посредством публикации обновленной емкости и без выполнения повторного хеширования элементов содержания первого количества сегментов, и второй поток должен выполнить операцию поиска в первом сегменте первого количества сегментов, не проверяя переменную блокировки, чтобы определить, необходимо ли повторное хеширование; и
совместно используемое запоминающее устройство, соединенное с микропроцессором, для содержания хеш-таблицы, при этом доступ к хеш-таблице одновременно получают, по меньшей мере, некоторые из множества потоков.
17. Система по п.16, в которой третий поток должен выполнить повторное хеширование элементов содержания от первого сегмента, содержащего первое количество сегментов, до второго сегмента, содержащего второе количество сегментов, при выполнении операции поиска для пары данных, присутствующих в первом сегменте.
18. Система по п.16, в которой второй поток должен вычислять индекс сегмента для сегмента, содержащего второе количество сегментов, используя обновленную емкость, получить доступ к сегменту, используя индекс сегмента, определить, что сегмент не был повторно хеширован, и рекурсивно вычислять индекс родительского сегмента для родительского сегмента, на который сегмент был логически отображен, пока не будет найден повторно хешированный корневой сегмент.
19. Система по п.18, в которой второй поток должен повторно хешировать, по меньшей мере, часть элементов содержания повторно хешированного корневого сегмента до сегмента во время выполнения или до выполнения поиска пары данных запроса на поиск.
20. Система по п.19, в которой второй поток должен установить частичный индикатор повторного хеширования корневого сегмента, когда только часть элементов содержания корневого сегмента повторно хеширована.
RU2011144807/08A 2009-04-08 2009-04-08 Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений RU2517238C2 (ru)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/RU2009/000169 WO2010117294A1 (en) 2009-04-08 2009-04-08 Performing concurrent rehashing of a hash table for multithreaded applications

Publications (2)

Publication Number Publication Date
RU2011144807A RU2011144807A (ru) 2013-05-20
RU2517238C2 true RU2517238C2 (ru) 2014-05-27

Family

ID=42936410

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2011144807/08A RU2517238C2 (ru) 2009-04-08 2009-04-08 Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений

Country Status (7)

Country Link
US (1) US9563477B2 (ru)
JP (1) JP5401676B2 (ru)
KR (1) KR101367450B1 (ru)
CN (1) CN102460392B (ru)
RU (1) RU2517238C2 (ru)
SG (1) SG175109A1 (ru)
WO (1) WO2010117294A1 (ru)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515965B2 (en) 2010-05-18 2013-08-20 Lsi Corporation Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors
US9444757B2 (en) 2009-04-27 2016-09-13 Intel Corporation Dynamic configuration of processing modules in a network communications processor architecture
US8539199B2 (en) * 2010-03-12 2013-09-17 Lsi Corporation Hash processing in a network communications processor architecture
US9461930B2 (en) 2009-04-27 2016-10-04 Intel Corporation Modifying data streams without reordering in a multi-thread, multi-flow network processor
US8606791B2 (en) * 2011-06-17 2013-12-10 Microsoft Corporation Concurrently accessed hash table
US8812555B2 (en) * 2011-06-18 2014-08-19 Microsoft Corporation Dynamic lock-free hash tables
US9009106B1 (en) 2011-08-10 2015-04-14 Nutanix, Inc. Method and system for implementing writable snapshots in a virtualized storage environment
US8850130B1 (en) 2011-08-10 2014-09-30 Nutanix, Inc. Metadata for managing I/O and storage for a virtualization
US9747287B1 (en) 2011-08-10 2017-08-29 Nutanix, Inc. Method and system for managing metadata for a virtualization environment
US8863124B1 (en) 2011-08-10 2014-10-14 Nutanix, Inc. Architecture for managing I/O and storage for a virtualization environment
US8601473B1 (en) 2011-08-10 2013-12-03 Nutanix, Inc. Architecture for managing I/O and storage for a virtualization environment
US9652265B1 (en) 2011-08-10 2017-05-16 Nutanix, Inc. Architecture for managing I/O and storage for a virtualization environment with multiple hypervisor types
US8549518B1 (en) 2011-08-10 2013-10-01 Nutanix, Inc. Method and system for implementing a maintenanece service for managing I/O and storage for virtualization environment
US20130080481A1 (en) * 2011-09-27 2013-03-28 Sybase, Inc. Extreme large space allocation
US9772866B1 (en) 2012-07-17 2017-09-26 Nutanix, Inc. Architecture for implementing a virtualization environment and appliance
FI124397B (en) * 2013-01-04 2014-08-15 Tellabs Oy A method and apparatus for defining a paging system for a network element of a software configurable network
US9311359B2 (en) 2013-01-30 2016-04-12 International Business Machines Corporation Join operation partitioning
US9317548B2 (en) 2013-01-30 2016-04-19 International Business Machines Corporation Reducing collisions within a hash table
US9519668B2 (en) * 2013-05-06 2016-12-13 International Business Machines Corporation Lock-free creation of hash tables in parallel
US9367556B2 (en) 2013-06-14 2016-06-14 International Business Machines Corporation Hashing scheme using compact array tables
US9471710B2 (en) 2013-06-14 2016-10-18 International Business Machines Corporation On-the-fly encoding method for efficient grouping and aggregation
US10503716B2 (en) * 2013-10-31 2019-12-10 Oracle International Corporation Systems and methods for generating bit matrices for hash functions using fast filtering
US10250519B2 (en) 2014-05-21 2019-04-02 Oracle International Corporation System and method for supporting a distributed data structure in a distributed data grid
WO2015179092A1 (en) * 2014-05-21 2015-11-26 Oracle International Corporation System and method for supporting a distributed data structure in a distributed data grid
US9405699B1 (en) 2014-08-28 2016-08-02 Dell Software Inc. Systems and methods for optimizing computer performance
US9672248B2 (en) 2014-10-08 2017-06-06 International Business Machines Corporation Embracing and exploiting data skew during a join or groupby
US9922064B2 (en) 2015-03-20 2018-03-20 International Business Machines Corporation Parallel build of non-partitioned join hash tables and non-enforced N:1 join hash tables
US10650011B2 (en) 2015-03-20 2020-05-12 International Business Machines Corporation Efficient performance of insert and point query operations in a column store
US10303791B2 (en) 2015-03-20 2019-05-28 International Business Machines Corporation Efficient join on dynamically compressed inner for improved fit into cache hierarchy
US10108653B2 (en) 2015-03-27 2018-10-23 International Business Machines Corporation Concurrent reads and inserts into a data structure without latching or waiting by readers
US10831736B2 (en) 2015-03-27 2020-11-10 International Business Machines Corporation Fast multi-tier indexing supporting dynamic update
US9401959B1 (en) 2015-12-18 2016-07-26 Dropbox, Inc. Network folder resynchronization
US10255208B2 (en) * 2016-03-04 2019-04-09 Toshiba Memory Corporation Data transfer apparatus and data transfer system
US10467103B1 (en) 2016-03-25 2019-11-05 Nutanix, Inc. Efficient change block training
US10467390B1 (en) 2016-08-18 2019-11-05 Snap Inc. Cyclically dependent checks for software tamper-proofing
US11797539B2 (en) * 2019-09-12 2023-10-24 Oracle International Corporation Accelerated building and probing of hash tables using symmetric vector processing

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU71016U1 (ru) * 2006-05-10 2008-02-20 Алексей Юрьевич Попов Электронная вычислительная машина с многими потоками команд и одним потоком данных
US7809916B1 (en) * 2007-09-28 2010-10-05 Oracle America, Inc. Method for dynamically refining locks in resizable concurrent hashing

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3164257B2 (ja) 1993-02-02 2001-05-08 日本電信電話株式会社 索引方法
US6115802A (en) 1995-10-13 2000-09-05 Sun Mircrosystems, Inc. Efficient hash table for use in multi-threaded environments
GB9811574D0 (en) * 1998-05-30 1998-07-29 Ibm Indexed file system and a method and a mechanism for accessing data records from such a system
US6427039B1 (en) * 1999-01-25 2002-07-30 Massachusetts Institute Of Technology Wavelength shifting and optical switching
US6578083B2 (en) * 1999-02-05 2003-06-10 Pluris, Inc. Method for monitoring data flow at a node on a network facilitating data transfer on at least one link having at least one class of service
US6578131B1 (en) * 1999-04-27 2003-06-10 Microsoft Corporation Scaleable hash table for shared-memory multiprocessor system
US6915296B2 (en) * 2002-10-29 2005-07-05 Agere Systems Inc. Incremental reorganization for hash tables
US7287131B1 (en) 2003-03-21 2007-10-23 Sun Microsystems, Inc. Method and apparatus for implementing a fully dynamic lock-free hash table
US7277897B2 (en) * 2003-08-01 2007-10-02 Oracle International Corporation Dynamic reassignment of data ownership
US7702628B1 (en) * 2003-09-29 2010-04-20 Sun Microsystems, Inc. Implementing a fully dynamic lock-free hash table without dummy nodes
US7669241B2 (en) * 2004-09-30 2010-02-23 Alcatel-Lucent Usa Inc. Streaming algorithms for robust, real-time detection of DDoS attacks
US20060075486A1 (en) 2004-10-01 2006-04-06 Paul Lin Self-contained token device for installing and running a variety of applications
US7464103B2 (en) * 2004-10-29 2008-12-09 Microsoft Corporation Multi-level nested open hashed data stores
JP4768009B2 (ja) * 2005-03-11 2011-09-07 ロックソフト リミテッド データ・クラスタを使用する冗長性の少ないデータを格納する方法
US20080021908A1 (en) * 2006-07-20 2008-01-24 Barrett Alan Trask Synchronization and dynamic resizing of a segmented linear hash table
US8392368B1 (en) * 2010-08-27 2013-03-05 Disney Enterprises, Inc. System and method for distributing and accessing files in a distributed storage system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU71016U1 (ru) * 2006-05-10 2008-02-20 Алексей Юрьевич Попов Электронная вычислительная машина с многими потоками команд и одним потоком данных
US7809916B1 (en) * 2007-09-28 2010-10-05 Oracle America, Inc. Method for dynamically refining locks in resizable concurrent hashing

Also Published As

Publication number Publication date
CN102460392B (zh) 2016-04-27
CN102460392A (zh) 2012-05-16
JP5401676B2 (ja) 2014-01-29
RU2011144807A (ru) 2013-05-20
JP2012523610A (ja) 2012-10-04
KR101367450B1 (ko) 2014-02-25
SG175109A1 (en) 2011-11-28
KR20120014141A (ko) 2012-02-16
WO2010117294A1 (en) 2010-10-14
US20120036134A1 (en) 2012-02-09
US9563477B2 (en) 2017-02-07

Similar Documents

Publication Publication Date Title
RU2517238C2 (ru) Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений
US8788543B2 (en) Scalable, concurrent resizing of hash tables
US8386463B2 (en) Method and apparatus for dynamically associating different query execution strategies with selective portions of a database table
US8364909B2 (en) Determining a conflict in accessing shared resources using a reduced number of cycles
US20070027860A1 (en) Method and apparatus for eliminating partitions of a database table from a join query using implicit limitations on a partition key value
US20170083573A1 (en) Multi-query optimization
US8601474B2 (en) Resuming execution of an execution plan in a virtual machine
US11048669B2 (en) Replicated state management using journal-based registers
US11698893B2 (en) System and method for use of lock-less techniques with a multidimensional database
WO2019055282A1 (en) DATABASE ENGINE
US20070255771A1 (en) Method and system for renewing an index
US20220269675A1 (en) Hash-based data structure
US20060085464A1 (en) Method and system for providing referential integrity constraints
Zhang et al. Eunomia: Scaling concurrent index structures under contention using HTM
US20170031909A1 (en) Locality-sensitive hashing for algebraic expressions
Baumstark et al. Lock-free Data Structures for Data Stream Processing: A Closer Look
Aravind Symmetric tokens based group mutual exclusion
US11681705B2 (en) Trie data structure with subtrie data structures
US20230306012A1 (en) Column based database locks
KR20160143600A (ko) 중첩 오버래핑 기반의 서브 그래프 리스팅 방법
Shahrokhi et al. An Efficient Vectorized Hash Table for Batch Computations
Mccoy et al. Gallatin: A General-Purpose GPU Memory Manager
CN117891858A (zh) 一种时空高效的并行近似成员查询方法及系统
Wust et al. Sparse dictionaries for in-memory column stores
CN117271513A (zh) 数据处理方法、数据查询方法及装置

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20180409