|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
Высокопроизводительная хэш-таблица17.07.2015, 15:17. Показов 1542. Ответов 10
Метки нет (Все метки)
Кто-нибудь знает проверенную в бою готовую реализацию высокопроизводительной хэш-таблицы или хотя бы материалы какие?
Требования:
0
|
|
| 17.07.2015, 15:17 | |
|
Ответы с готовыми решениями:
10
Описать класс "хэш-таблица", используя unordered_set и заданную хэш-функцию Хэш таблица Хэш таблица |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 17.07.2015, 16:27 | |
|
ct0r, этот не подошел? http://www.boost.org/doc/libs/... tiset.html
0
|
|
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
| 17.07.2015, 16:34 | |
|
std::unordered_map + std::mutex или boost::shared_lock по ситуации точно не подходят?
0
|
|
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
| 17.07.2015, 19:08 | |
|
NoMasters, а также std::shared_lock: http://en.cppreference.com/w/c... hared_lock
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||
| 17.07.2015, 20:45 [ТС] | |||
|
Есть собственно эта самая таблица размером в несколько сотен Гб. При внешних запросах в несколько тысяч RPS мы лезем в эту таблицу (как раз там сейчас read-write мьютекс, но не стандартной, а внутренней реализации, с приоритетом читателям) и отдаем ответ. Одновременно в демон поступают новые данные через сислог, мы в онлайн режиме обновляем таблицу, но с некоторой допустимой ошибкой. Поэтому периодически нам нужно эту таблицу полностью пересчитывать. Поскольку демон должен всегда и максимально быстро отвечать на запросы, то пересчет делается в такую же отдельную таблицу, на которую мы затем мгновенно переключаемся. Но на время пересчета приостанавливается чтение сислога, так как они используют одни и те же данные. Нужно сократить время этого пересчета до минимума. Я распараллелил пересчет на 16 (по кол-ву ядер) потоков-производителей, которые пачками пихают данные в лок-фри очередь, откуда их одновременно забирает поток-потребитель и записывает в таблицу. Но это все равно не так быстро, как хотелось бы. Если бы эти 16 потоков сразу писали в таблицу, то было бы куда лучше. Заодно из-за смены структуры данных автоматом улучшилось бы чтение сислога и выдача ответов.
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 17.07.2015, 20:53 | |||
Или это: https://msdn.microsoft.com/en-... 50089.aspx
2
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||
| 17.07.2015, 22:00 [ТС] | ||||
|
Пока думаю на эту тему. https://github.com/efficient/libcuckoo http://www.cs.princeton.edu/~m... osys14.pdf http://excess-project.eu/publi... _ICDCS.pdf
1
|
||||
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
||
| 17.07.2015, 22:13 | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 17.07.2015, 22:20 | |
|
ct0r, кстати, существуют пропозалы подобного контейнера в новый стандарт С++.
Вот еще что нашлось: https://github.com/tamanyan/lmn-concurrent-hashmap (на С) https://github.com/noporpoise/jelly-hash (тоже на C) на базе этого https://code.google.com/p/ulib/ https://code.google.com/p/nbds/ https://github.com/facebook/fo... cHashMap.h (на C++) на всякий случай: https://www.usenix.org/legacy/... iplett.pdf
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||
| 18.07.2015, 16:09 [ТС] | |||||
|
1) Данные тогда все равно в ответ попадут не сразу. Только после всего пересчета. Цель у нас какая - разница во времени между приходом строки в сислоге и соответствующим изменением ответа на внешние запросы должна быть как можно меньше. 2) Не очень понятно, как тогда делать точный пересчет на основе тех данных, которые мы в тот момент и изменяем (читая сислог). Добавлено через 14 часов 17 минут
0
|
|||||
|
Модератор
|
|
| 18.07.2015, 16:57 | |
|
Ни фига себе, "С++ для начинающих"
0
|
|
| 18.07.2015, 16:57 | |
|
Помогаю со студенческими работами здесь
11
Хэш-таблица Хэш-таблица Хэш-таблица Хэш-таблица, ошибка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|