#SwissTable

2025-04-10

Go 1.24: принципы работы и преимущества обновленной map

В феврале 2025 года разработчики Go выпустили версию 1.24, в которой значительно улучшили производительность языка. Одно из ключевых изменений коснулось структуры map — встроенного типа данных, предназначенного для хранения и быстрого поиска значений по уникальному ключу. Новая реализация повысила эффективность работы map, оптимизировала использование памяти и ускорила операции поиска, вставки и удаления элементов. Привет, Хабр. Мы backend-разработчики SimbirSoft Павел и Алексей. В этой статье подробно разберём, как именно изменился механизм работы map и какие преимущества это даёт. Go🚀

habr.com/ru/companies/simbirso

#go #golang #архитектура #backend #go_124 #map #swisstable #hashmap #обзор_фичей

2025-03-31

Более быстрые хеш-таблицы: претенденты на место SwissTable

24 ноября 2021 года на сайте ArXiv.org была опубликована научная статья «Крошечные указатели» ( Tiny Pointers ) с описанием новой структуры данных — «крошечных» указателей, которые указывают путь к фрагменту хранимых данных и занимают меньше памяти, чем традиционные указатели. Осенью 2021 года эту статью заметил Андрей Крапивин (Andrew Krapivin), студент Ратгерского университета в Нью-Джерси, и не придал ей особого значения, пишет Quanta Magazine, журнал о последних достижениях в математике ( перевод статьи на Хабре). Только через два года он нашёл время, чтобы внимательно ознакомиться с материалом. И понял, насколько это прорывное изобретение, если применить его для оптимизации хеш-таблиц. Данная тема уже упоминалась на Хабре , но заслуживает более подробного обсуждения.

habr.com/ru/companies/ruvds/ar

#ruvds_статьи #хештаблицы #наука_о_данных #крошечные_указатели #ассоциативный_массив #структура_данных #поиск #вставка #предельная_скорость #равномерное_зондирование #uniform_probing #линейное_зондирование #дерево_с_поворотом #расширяющееся_дерево #красночёрное_дерево #Koloboke #SmoothieMap #ChronicleMap #SwissTable #F14 #SIMD

2025-03-31

Более быстрые хеш-таблицы: претенденты на место SwissTable

24 ноября 2021 года на сайте ArXiv.org была опубликована научная статья «Крошечные указатели» ( Tiny Pointers ) с описанием новой структуры данных — «крошечных» указателей, которые указывают путь к фрагменту хранимых данных и занимают меньше памяти, чем традиционные указатели. Осенью 2021 года эту статью заметил Андрей Крапивин (Andrew Krapivin), студент Ратгерского университета в Нью-Джерси, и не придал ей особого значения, пишет Quanta Magazine, журнал о последних достижениях в математике ( перевод статьи на Хабре). Только через два года он нашёл время, чтобы внимательно ознакомиться с материалом. И понял, насколько это прорывное изобретение, если применить его для оптимизации хеш-таблиц. Данная тема уже упоминалась на Хабре , но заслуживает более подробного обсуждения.

habr.com/ru/companies/ruvds/ar

#ruvds_статьи #хештаблицы #наука_о_данных #крошечные_указатели #ассоциативный_массив #структура_данных #поиск #вставка #предельная_скорость #равномерное_зондирование #uniform_probing #линейное_зондирование #дерево_с_поворотом #расширяющееся_дерево #красночёрное_дерево #Koloboke #SmoothieMap #ChronicleMap #SwissTable #F14 #SIMD

Открытие Эндрю Крапивина о хеш-таблицах и микро-указателях?
Чисто гипотетически, может и актуально, но лишь в чистой и голой computer science теории.
На практике же полно нюансов реализации, сводящихся к оптимизациям конкретных аппаратных платформ.

Например, есть #SwissTable известные с 2018 года, недавно #Golang перешёл на них (с версии 1.24). И до него на SwissTable перейти успел #Rust.

Хеш-таблицы Google SwissTable и Facebook F14 примерно одинаковые, одно лишь вариант другого.

Идея оптимизации работы вокруг использования #SIMD инструкций для поиска занятых ячеек и проверки ключа. И в тотально подавляющем большинстве случаев хватает одной проверки блока из восьми элементов.

Надо ещё много раз поиграться с вариантами реализации какой-либо идеи из чистого computer science. Посмотрев как оно ложится на аппаратную платформу сродни x86-64.

  1. Есть prefetching памяти и работа с ОЗУ идёт через загрузку целиком всей cache line в ЦПУ, даже при обращении на чтение лишь к одному значению в пару байт.

  2. Предыдущий пункт не только про cache misses, но и «локальность данных». Как повышающую производительность, так и приводящих к false sharing при многопоточном использовании структуры данных.  

  3. Необходимо учитывать и размер страницы виртуальной памяти, чтобы снизить «давление» на TLB и уйти от TLB miss.

Для пример, в нагруженных системах используется донастройка системы на huge pages, например, все кто используют модный #DPDK сам по себе или с каким-нибудь #Seastar:

  • Выбравшие не оригинальную #Kafka, а её более производительный аналог #RedPanda.
  • Использующие вместо Apache #Cassandra более производительную #ScyllaDB

Голая теория computer science это хорошо и замечательно, но практика омерзительна свой приземлённостью. Прямой проход перебором по небольшому массиву оказывается быстрее, чем использование binary search tree. И совершенно не важно какого именно красно-чёрного или же АВЛ.

Это не вопрос ретроградства и вызова 40-летней теории :)

#software #SoftwareDevelopment #программирование #разработка #programming @russian_mastodon @ru @Russia

2025-03-01

О новых алгоритмах хеш-таблиц

Хотелось бы прокомментировать публикацию Ильи Кабанова в Медузе по поводу новых разработок в алгоритмах хеширования: " Optimal Bounds for Open Addressing Without Reordering " (Farach-Colton, Krapivin, and Kuszmaul, 2025) и последующую " The Bathroom Model: A Realistic Approach to Hash Table Algorithm Optimization " (Wang, 2025). И особенно кликбейтное: "в перспективе метод Крапивина и его коллег может ускорить многие процессы в интернете." Я около 7 лет очень плотно занимался темой хеш-таблиц и написал много их вариантов: Koloboke , SmoothieMap , memory-mapped вариации . Я потерял к теме интерес с выходом гугловской SwissTable (2018), и ее фейсбучного варианта F14 , которые основаны на SIMD. Они проверяют загруженность ячеек и совпадения "тега" элемента сразу блоками по 8 соседних слотов. Поэтому на любых разумных загрузках таблиц (до 90%) - "цепочка проверки" очень редко превышает 1 (то есть, одну проверку 8-элементного блока). В этих SIMD-based алгоритмах, ухищрения и теоретические по поводу "алгоритма шагания" просто не играют никакой роли -- алгоритм шагания можно сказать отсутствует, потому что если можно вставить элемент внутри 8-элементного блока, то это и стоит сделать. Именно эти разработки, а не Крут и не статья Yao, которую "опровергли" новые работы, стали "практическим концом теории" хеш-таблиц, на мой взгляд. SwissTable стали стандартным алгоритмом хеш-таблиц в Расте, и, буквально в этом месяце, в Golang 1.24 . В заключение, отвечая Илье Кабанову: к "ускорению интернета" эти теоретические алгоритмы не приведут :)

habr.com/ru/articles/887024/

#хештаблицы #swisstable #simd

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst