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

24 ответов

90 просмотров

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

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? А в остальном выглядит прям огненно

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

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

Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
7
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Есть тут кто занимается разработкой серваков майна? Или знакомые
meow *
3
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Есть ли лимиты на кол-во вебхук по домену? Стоит в данный момент 900+ ботов и бывает бот перестает отвечать (не приходят вебхуки) 🐒 Помогает только перезапуск
ᅠ [ Кому не ответил, дублируйте ]
11
а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Товарищи, здравствуйте Подскажите, пожалуйста, может кто-нибудь сталкивался с такой задачей Через вебапку можно сканировать qr-код, а есть ли возможность считывать nfc?
Artem Stormageddon
8
Карта сайта