|
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
Поиск по большой таблице в памяти10.09.2018, 19:33. Показов 1161. Ответов 9
Метки нет (Все метки)
Добрый день, проконсультируйте плиииз!
Код сейчас НЕ нужен! Нужно "понимание темы" и "чтобы почитать"... (помогут ЛЮБЫЕ советы) (кодить начну минимум через 2-3 месяца, когда будет сама таблица, а пока "подготовка инструмента") Задача: 1) ОЧЕНЬ большая таблица в памяти. Сотни тысяч или миллионы записей вида строка(до 20 символов)-число (длинное целое). Строки могут повторяться, числа тоже, но "пары" строка-число - уникальны. 2) Функция МАКСИМАЛЬНО быстрого поиска 10 первых чисел по полной строке. Подозреваю что нужно строить индекс (btree? немного знаком из Posgtgres) 3) Записать/восстановить таблицу (и индексы?) на диск. Таблица "статическая" (создается и не меняется, после создания скидывается на диск, а после этого только читается) Есть для подобного ГОТОВЫЕ механизмы в С++? Или что бы почитать? Собирать буду под Линукс (хостинг), поэтому "готовые библиотеки от Windows" не помогут. По сути нужен механизм аналогичный базам Redis, но заточенный под одну задачу.
0
|
|
| 10.09.2018, 19:33 | |
|
Ответы с готовыми решениями:
9
Быстрый поиск максимума и минимума в диапазоне данных в большой таблице Поиск в большой таблице SQL 2000 выдает Timeout. Что надо сделать ? Добавление колонки в большой таблице |
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
|
| 10.09.2018, 20:28 | |
|
Я знаю только префиксное дерево
1
|
|
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|||
| 10.09.2018, 21:29 | |||
|
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 10.09.2018, 21:40 | |||
|
1
|
|||
|
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|||
| 10.09.2018, 22:23 [ТС] | |||
|
Поясните только если можно: 1) std::map - это полноценная "индексированая" не ограниченная таблица в памяти для ускоренного поиска по названию? где быстрее всего идет ПОИСК записи (а не добавление/изменение)? 2) можно ЕЩЕ ускорить поиск в подобной таблице добавив многопоточность? Или создав по ::map в каждом потоке? Не по теме:
Хочу плагин для Ноды написать на С++. Недавно нашел кучу примеров, но еще с методами вызова из Ноде разбираться. Пока "набираю" таблицу в Postgres. Запрос на 600 записей без индекса = 100-150мс. = меньше 100 запросов в секунду для хостинга (не основная задача). Хочу уменьшить до 3-10мс.
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 10.09.2018, 23:09 | ||||
|
1) std::unordered_map. Скорость поиска в большинстве случаев вне конкуренции. Там хэш-функция, она с равным успехом переварит и миллион ключей, и миллиард. Но есть небольшой шанс что таки подавится. Правда, любители хэш-таблиц поговаривают что вероятность падения метеорита выше. 2) Свалить все записи в массив, один раз отсортировать его std::sort и потом кататься по нему std::lower_bound. Быстрый и простой поиск, очень удобно выгружать таблицу в файл и выгружать обратно. Но любая попытка исправления потребует нового вызова std::sort, а он дорогой.
1
|
||||
|
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|
| 10.09.2018, 23:29 | |
|
0
|
|
|
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
||
| 10.09.2018, 23:56 [ТС] | ||
|
У меня данные "статические" - один раз заполнил, сохранил и больше не меняю. Думал на Редис, но это для ноды 1) отдельная программа работающая через TCP/IP (а не встроенный плагин) = лишняя потеря времени. Если можно этого избежать небольшими усилиями... 2) умеющая искать по части слова(там "ключи"), а значит не так сильно оптимизирована. Как и механизмы "добавления" наверняка понижают скорость "чтения/поиска". 3) у меня он уже используется, и не уверен насколько тяжело там "разделить" данные по нескольким задачам в одном проекте. Добавлено через 15 минут Как я уже писал выше, база у меня УЖЕ есть. Она полупустая и 2-4 месяца будет ее заполнение (полу-автоматическое). И я на 80-90% уверен что она начнет сильно тормозить (уже на 800 записях получил лимит в 100 запросов в секунду, а планируется минимум 50тыс). Поэтому решил сделать "внешний индекс" - поиск по моей таблице (по ЛЮБОЙ части слова), а детальные данные уже по ключам(id) полученным из заранее сформированного кеш-мапа. После окончательного заполнения базы, новые записи будут ОЧЕНЬ редко добавляться (10-20 в месяц) и можно будет в "полуручном" режиме дополнять таблицу или в "автоматическом" (запустив "формирование нового мапа" хоть на всю ночь) ...вопрос ЗДЕСЬ задал чтобы иметь представление куда двигаться в разработке/оптимизации когда/ЕСЛИ база начнет тормозить (реально мешая работе). Пока не могу найти "полу-готового" решения для сброса ::map в БИНАРНЫЙ файл и чтения файла в память сразу как ::map. Только "построчная запись". Не подскажите, такое решение Вам встречалось? (например в связке с аллокаторами)
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 11.09.2018, 01:03 | ||
|
Впрочем, есть и лайт-вариант - добавлять записи по одной, но строго в порядке возрастания ключа, через метод insert и выставив hint в myMap.end(). Теоретически это должно ускорить загрузку.
1
|
||
|
Неэпический
|
|
| 11.09.2018, 01:11 | |
|
delete
0
|
|
| 11.09.2018, 01:11 | |
|
Помогаю со студенческими работами здесь
10
Вычисление повторов в большой таблице Большой расход памяти Быстрый и точный подсчёт количества строк в большой таблице
Выделение большой памяти и крах C++) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|