|
|
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
есть у меня TObjectDictionary(TKey, TValue). И в нем очень-очень много элементов. Настолько много, что ОП не хватает. Приходит на ум использовать файлы. Но это гигантская потеря производительности. Как найти баланс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 16:57 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Решение - СУБД. Без вариантов. Если попробуете самостоятельно реализовать, то получится самописное СУБД. Есть локальные варианты: к примеру SQLite или Embedded Firebird. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:01 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb, Добавить оперативки или изменить алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:04 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb очень-очень много элементов Это сколько, в цифрах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:07 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, от 2 до 10 млрд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:12 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, 30 Гб оперативки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:17 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb от 2 до 10 млрд Только на хранение указателей (даже не данных) на 10млрд. объектов требуется около 75GB памяти. У тебя её сколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:19 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb 30 Гб оперативки Ну привет, чо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:20 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb rgreat, 30 Гб оперативки Прибавьте ОЗУ, раз не хватает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:35 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb rgreat, 30 Гб оперативки И на тему алгоритма: ты уверен что тебе нужны все элементы словаря одновременно и с одинаковой частотой? Если есть менее нужные, то их можно и скидывать на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:46 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat И на тему алгоритма: ты уверен что тебе нужны все элементы словаря одновременно и с одинаковой частотой? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:52 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb Да Размер ключа и объектов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:55 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbДа Значит что-то сильно не так с твоим алгоритмом или даже постановкой задачи. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 17:56 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 18:01 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb, Слишком большой ключ и как я понимаю он дублирует 80% полей value. Либо урезай его, либо выкини из value дублирующиеся поля. Они и так есть в ключе. Ну еще можно сделать словарь не по ключу а по его int64 хэшу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 18:22 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, данные разные, а int64 хэш можно попробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 18:26 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
У словаря размер хеша всего 4 млрд. значений. Учитывая алгорит его работы, сильно сомневаюсь, что даже в теории он сможет хранить более 2 млрд. элементов. Ну а если учесть, что идеальных хешей нет, думаю, его эффективность начнёт падать значительно раньше этой цифры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 18:35 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb, Как ты собрался оперировать такими объёмами данных, когда только для хранения 1 млрд. твоих значений требуется больше 30Gb? (без учёта накладных расходов на структуру словаря). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 18:38 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, потому что мне никто не сказал, что будет больше 1 млрд, и даже более 100 млн ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 18:39 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Да, пожалуй стоит ограничиться 32 битным ключом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 19:08 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb> потому что мне никто не сказал, что будет больше 1 млрд, и даже более 100 млн А какая собсно прикладная задача решается? Перебор паролей какой-то или что? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 19:28 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Продублирую еще раз. В твоей ситуации единственный вариант - это локальная СУБД. В БД ты можешь хранить сколько угодно данных. Лишь бы на диске поместились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 20:47 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Может быть ещё https://www.sql.ru/forum/1178076-a/oficialnyy-reliz-cachedbuffers это? Ну т.е. чтобы в памяти не хранить, а в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 21:24 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
SinemuriusВ твоей ситуации единственный вариант - это локальная СУБД. Вариантов-то дофига. Но таки да, этим может воспользвоаться даже самый неопытный программист. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:07 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Вариантов-то дофига. Вынос в БД - единственное вменяемое решение. Варианты только в способе хранения/записи/чтении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:24 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам А какая собсно прикладная задача решается? Перебор паролей какой-то или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:28 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
L_argoПочему дофига ? Наращивание памяти это не решение. А ещё есть потоковые алгоритмы, map-reduce, сжатие/свёртка и т.д. и т.п. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:30 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
L_argo Dimitry Sibiryakov Вариантов-то дофига. Вынос в БД - единственное вменяемое решение. Варианты только в способе хранения/записи/чтении. СУБД логично, но система реал-тайм и требования к производительности высокие. Раньше нагрузка была не большая и архитектура решала свои задачи, но хотелки растут, качество видео тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:31 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SinemuriusВ твоей ситуации единственный вариант - это локальная СУБД. Вариантов-то дофига. Смотрите: по Вашим потребностям можно сформулировать следующие аксиомы: 1. В ОЗУ это не поместится. Особенно, если думать про перспективу. Соответственно, данные должны храниться в файлах. 2. Данные должны быть структурированы. То есть найти данные по ключу нужно найти с минимальным количеством чтений. Перечитывать 30 Гб - это не вариант. Эти два аксиомы собственно и описывают то, что называется БД. Все остальные варианты - это некие эрзацы СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:34 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Про потоки речь вроде не шла. Тут думать нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:37 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Sinemurius Все остальные варианты - это некие эрзацы СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:40 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Sinemurius В ОЗУ это не поместится. Особенно, если думать про перспективу. Соответственно, данные должны храниться в файлах. Шардирование никто не отменял.. Можно развернуть хоть 20 серверов по 100 Гб ОЗУ и все распихать там... Вопрос только в ресурсе и деньгах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:45 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
X-Cite, всегда все упирается в деньги ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 22:55 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbвсегда все упирается в деньги Да. Включая те, которые платят более опытному и способному разработчику. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 23:14 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb Sinemurius Все остальные варианты - это некие эрзацы СУБД. Где-то читал, что скоро наступит эпоха pcie5 и чтение ssd будет сопоставимым со скоростью ОЗУ. А пока не наступило, нужно выкручиваться имеющимися средствами. Судя по постановке задачи, тут либо озу наращивать, либо менять алгоритмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2020, 23:41 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Посмотрите nosql key-value (например https://aws.amazon.com/ru/nosql/key-value/). Они есть, уже распараллелены и оптимизированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 00:02 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
L_argo Вынос в БД - единственное вменяемое решение. Варианты только в способе хранения/записи/чтении. плюс хранение самой базы на зеракальном RAID на базе SSD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 09:18 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, опытных и способных на всех не хватает. bk0010, интересное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 10:25 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
ClickHouse ещё очень быстрая nosql БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 11:07 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb, база данных, думаю, будет лучшим решением. врятли у тебя сверх-уникальный случай. нужно искать максимально подходящую под задачу бд, тысячи их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 13:09 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
DmSer Судя по постановке задачи, тут либо озу наращивать, либо менять алгоритмы. Можно сделать свой словарь с увеличенным размером хеша и возможностью работать с проекцией файла. На современных ssd с pcie можно получить очень хорошую скорость даже на рандомном доступе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 13:27 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbопытных и способных на всех не хватает. Значит придётся тебе поднимать свою квалификацию. Чисто из любопытства: неужели у тебя в самом деле есть 10 миллиардов образцов и ты принятый пакет среди них ищешь?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 13:29 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
База будет в разы (если не на порядки) медленней чем словарь в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 13:45 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Если гонять все данные на сервер(ы) и обратно, то какая скорость канала должна быть? Будет ли она сопоставима со скорость SSD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 13:56 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreat, база может быть в памяти целиком, если что: https://en.wikipedia.org/wiki/List_of_in-memory_databases ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 14:02 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
makhaonбаза может быть в памяти целиком, если что Я знаю, это трудно, но попробуй прочитать хотя бы первое сообщение топика. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 14:09 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
X11 то какая скорость канала должна быть? 10Gbit например X11 Будет ли она сопоставима со скорость SSD? Теоретическая пропускная способность такого канала будет около 1Gb/s, что даже выше скоростей потребительских ssd при рандомном доступе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 14:12 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, я предлагаю варианты. у тебя есть что-то заведомо готовое для его случая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 14:39 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
makhaonу тебя есть что-то заведомо готовое для его случая? Я понятия не имею каков "его случай". Он же так и не рассказал ничего кроме "поиск гадости в видеопотоке". На это можно только предложить нейросеть: модно, стильно, молодёжно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 14:42 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, и каналы должны быть перманентно стабильными. Сколько будет стоить такой канал или несколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 15:10 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Чисто из любопытства: неужели у тебя в самом деле есть 10 миллиардов образцов и ты принятый пакет среди них ищешь?.. 10 точно нет, но до 1 млрд в пике может дойти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 15:47 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
в среднем 100 млн, но пиковая нагрузка сжирает вся ОП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 15:55 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
X11 каналы должны быть перманентно стабильными. Сколько будет стоить такой канал или несколько? Цену оборудования 10GBit ты и сам можешь посмотреть (есть и бюджетные решения и дорогие), а вопрос стабильности в интранете, обычно, не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 16:09 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbдо 1 млрд в пике может дойти И ты собрал статистику попадания чтобы утверждать, что распределение по этому миллиарду равномерно? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 17:29 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov И ты собрал статистику попадания чтобы утверждать, что распределение по этому миллиарду равномерно? Вопрос равномерного распределения - это не более чем вопрос выбранной хэш-функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 17:31 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, +/- равномерно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 17:47 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
rgreatЭто важно в контексте его вопроса? Да. Ему уже предлагали неиспользуемую часть словаря сбрасывать на диск. cptngrb+/- равномерно Какого размера ключ и какой процент пришедших фреймов удовлетворяет поиску? Если процент мал, а ключ велик, то можно в памяти держать только первые два-три уровня дерева, а остатки уже на диске. Это удержит высокую скорость переработки пакетов без пакости за счёт торможения подозрительных. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 18:36 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb до 1 млрд в пике может дойти cptngrb в среднем 100 млн, но пиковая нагрузка сжирает вся ОП Что-то не сходится. У тебя ОЗУ должно закончится уже на ~310 млн (а то и раньше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 18:40 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
из 56 135 545 элементов найдено соответствий 51 745 976. Значит 92% используются сразу. Что сбрасывать на диск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 18:40 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrbЧто сбрасывать на диск? Всё. Оставить только то, что позволяет сразу сказать "пакет ок". Это в случае если "ок" пакетов процентов 98. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 18:53 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, 394 млн элементов в 50 ГБ укладывается, если без фантиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2020, 19:40 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
В любом случае вне зависимости от инструмента можно также попробовать TValue подсократить. Например, две TDateTime занимают 16 байт, но какой диапазон из них нужен? Если его можно уложить в 4 байта, можно сэкономить 8 байт. А если объявить запись packed, то также сэкономить на выравнивании. В сумме вместо 40 байт TValue съеживается до 26, что при миллиарде значений дает экономию в 14 Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2020, 10:38 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
Василий 2, TDateTime можно и сократить до 4 байт, а вот о packet говорят производительность страдает, но можно потестить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2020, 11:27 |
|
||
|
Очень большой TDictionary
|
|||
|---|---|---|---|
|
#18+
cptngrb Василий 2, TDateTime можно и сократить до 4 байт, а вот о packet говорят производительность страдает, но можно потестить Отсюда не видно, как там у вас сравнение происходит, тч тестить не просто можно, а даже нужно. Тем более что это наипростейшая оптимизация (добавить всего одно слово + ребилд) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2020, 14:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038553]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
129ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 409ms |

| 0 / 0 |
