Как называются хэш-таблицы с автоматической генерацией ключа при вставке?

24 ответов

37 просмотров

Никак, кажется в вопросе какая-то ошибка

Aleksandr-Antonov Автор вопроса
doc
Никак, кажется в вопросе какая-то ошибка

Я искал подходящий крейт, но не нашёл. Мне нужна потокобезопасная HashMap<u32, &str>, но ключ изначально неизвестен, его нужно генерировать, но тогда нужно делать проверку отсутствия ключа в таблице.

Aleksandr Antonov
Я искал подходящий крейт, но не нашёл. Мне нужна п...

Опять же повторю, вставка идет по ключу, раскрой мысль. Потокобезопасность тут не причем

Aleksandr-Antonov Автор вопроса
doc
Опять же повторю, вставка идет по ключу, раскрой м...

Для вставки есть значение, но нет ключа. Сценарий работы программы в том, что она должна сама сгенерировать ключ и отдать его в качестве ответа. Затем по сгенерированному ключу пользователи достают значение.

А какую задачу решаешь?

Aleksandr Antonov
Для вставки есть значение, но нет ключа. Сценарий ...

А чем это не hashmap uuid -> value? Ну или не uuid, а атомарный счётчик? И для потокобезопасности взять dashmap или rwlock Ну либо условный redis раз кеш делаете

Aleksandr-Antonov Автор вопроса
doc
А какую задачу решаешь?

Я делаю кэш, который в памяти хранит ключ-значение, но с генерацией ключа.

Aleksandr-Antonov Автор вопроса
Alexey Sokolovskiy
А чем это не hashmap uuid -> value? Ну или не uuid...

В случае атомарного счётчика вычислять хэш разве не дорого? Вектор с получением элемента по индексу не будет быстрее? Redis не подходит, так как код на горячем участке, сетевой оверхед.

Aleksandr Antonov
В случае атомарного счётчика вычислять хэш разве н...

В случае атомарного счётчика будет вычисляться хеш для просто u32, а это почти мгновенно

Aleksandr Antonov
Я делаю кэш, который в памяти хранит ключ-значение...

Сделай HashMap<u64, &str>, при вставки генери рандомное u64 число, вставляй по нему как по ключу и возвращай его. Проверяй, что такого числа еще нет в таблице. Размера u64 хватит, чтобы не иметь никаких проблем с нехваткой ключей

Aleksandr-Antonov Автор вопроса
doc
Сделай HashMap<u64, &str>, при вставки генери ранд...

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

Aleksandr Antonov
В проверке отсутствия и заключается вопрос. Ключ г...

Ну кстати можно и вектор сделать, делать пуш и возвращать индекс. Тут реально хешмапа не нужна тогда

Aleksandr-Antonov Автор вопроса
doc
Ну кстати можно и вектор сделать, делать пуш и воз...

Если хранить не ссылки, а сами строки, вектор не будет тормозить? Проблема в том, что вектор для конкурентного доступа придётся делать мультиверсионным, помечать ключи как удалённые, и все сопутствующие сложности как следствие.

Такое не подойдет? Может неправильно понял, что вы хотите https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=2f5c4c354f7dbdc953b003bac9fb3dc1

Aleksandr Antonov
Если хранить не ссылки, а сами строки, вектор не б...

Строки отдельно будут храниться, вектор это 3 слова

Aleksandr-Antonov Автор вопроса
Aleksandr Antonov
i32/i64 тоже могут быть.

Все сложности с версионностью уже внутри https://docs.rs/generational-arena/latest/generational_arena/ решены, но там ключи (usize, u64). В принципе, если есть гарантии что количества элементов/удалений&вставок точно меньше u32, то можно обернуть и паниковать при превышениях, ограничив ключи до (u32, u32). (хотя лучше или смириться с (usize, u64), или свою такую штуку реализовать для (u32, u32) или (u48, u16) с выжжеными ячейками, зависит от профиля использования)

Aleksandr-Antonov Автор вопроса
Alexander Ruliov
Все сложности с версионностью уже внутри https://d...

Если бы не паника, то это отличный вариант.

slotmap?

Хлебушек
slotmap?

А подходит под многопоточные? Или только через rwlock? А в остальном выглядит прям огненно

Похожие вопросы

Обсуждают сегодня

Ребята, я за проф советом😅 По микросервисам. В монолите есть общие файлы для сервисов: фетчи, конфиги, либы, утилсы.. как при распиле правильно их поддерживать? Пока вариант д...
Александр Тарасюк
1
а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Подскажите где можно прочитать про реализацию возможности писать человеку при подписке на телеграм канал от имени бота? Было бы не плохо если для Telegraf@3.38.0
Pan Lipton
10
Мне вот что интересно, кто на рфе стартовал/играл, что вы фармили, в каком виде контента он прямо хорош? Экспедиция? Вроде прямо на замазанных мапах рф сдувается
Владислав
20
‌/r/pathofexile moderation changes top scoring links : pathofexile (RSS) Hi, everyone. On behalf of the subreddit mod team, I’m here to give you a few updates on the subreddi...
Esionru
3
Кто нибудь поясните это всё таки вброс или да? Про санктум слышал на поедб вбросили, а по дурке откуда инфа и на сколько это вообще правда? Пахнет шизофренией какой-то ✅Divi...
Dmitry Ritter
9
У вас бывает ощущение, что хочется потратить весь отпуск на то, чтоб только спать?
Николай
15
Как можно настроить фильтр в пое под себя?
Yarik yarik kyda ti lezesh
15
У меня вопрос к знающими, стоит ли вступать в гильдии в игре или лучше полная свобода?
Енот Полоскун
17
Ребят, есть какие нибудь мили билды, способные в шмотках с пола закрывать атлас?
Ninja Obormot
12
Карта сайта