powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Очень большой TDictionary
25 сообщений из 64, страница 1 из 3
Очень большой TDictionary
    #39929982
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть у меня TObjectDictionary(TKey, TValue). И в нем очень-очень много элементов. Настолько много, что ОП не хватает. Приходит на ум использовать файлы. Но это гигантская потеря производительности. Как найти баланс?
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929983
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение - СУБД. Без вариантов.
Если попробуете самостоятельно реализовать, то получится самописное СУБД.
Есть локальные варианты: к примеру SQLite или Embedded Firebird.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929984
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Добавить оперативки или изменить алгоритм.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929986
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
очень-очень много элементов

Это сколько, в цифрах?
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929989
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey, от 2 до 10 млрд
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929991
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat, 30 Гб оперативки
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929992
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
от 2 до 10 млрд

Только на хранение указателей (даже не данных) на 10млрд. объектов требуется около 75GB памяти. У тебя её сколько?
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929993
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
30 Гб оперативки

Ну привет, чо.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929997
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
rgreat, 30 Гб оперативки


Прибавьте ОЗУ, раз не хватает!
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39929999
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
rgreat, 30 Гб оперативки
У меня на паре серверов по 256 гб.
И на тему алгоритма: ты уверен что тебе нужны все элементы словаря одновременно и с одинаковой частотой?

Если есть менее нужные, то их можно и скидывать на диск.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930000
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
И на тему алгоритма: ты уверен что тебе нужны все элементы словаря одновременно и с одинаковой частотой?

Да
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930002
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb

Да

Размер ключа и объектов?
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930003
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbДа

Значит что-то сильно не так с твоим алгоритмом или даже постановкой задачи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930006
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
TKey = record
int1: uint32
int2: uint32
int3: uint32
int4: uint16
int5: uint16
int6: uint16

TValue = record
int1: uint32
int2: uint32
int3: uint32
int4: uint16
int5: uint16
int6: uint16
dt1: Tdatetime
dt2: Tdatetime
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930010
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Слишком большой ключ и как я понимаю он дублирует 80% полей value.

Либо урезай его, либо выкини из value дублирующиеся поля. Они и так есть в ключе.

Ну еще можно сделать словарь не по ключу а по его int64 хэшу.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930012
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat, данные разные, а int64 хэш можно попробовать
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930013
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У словаря размер хеша всего 4 млрд. значений. Учитывая алгорит его работы, сильно сомневаюсь, что даже в теории он сможет хранить более 2 млрд. элементов. Ну а если учесть, что идеальных хешей нет, думаю, его эффективность начнёт падать значительно раньше этой цифры.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930015
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Как ты собрался оперировать такими объёмами данных, когда только для хранения 1 млрд. твоих значений требуется больше 30Gb? (без учёта накладных расходов на структуру словаря).
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930016
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey, потому что мне никто не сказал, что будет больше 1 млрд, и даже более 100 млн
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930019
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Да, пожалуй стоит ограничиться 32 битным ключом.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930026
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb> потому что мне никто не сказал, что будет больше 1 млрд, и даже более 100 млн

А какая собсно прикладная задача решается? Перебор паролей какой-то или что?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930042
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продублирую еще раз.
В твоей ситуации единственный вариант - это локальная СУБД.
В БД ты можешь хранить сколько угодно данных. Лишь бы на диске поместились.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930052
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть ещё
https://www.sql.ru/forum/1178076-a/oficialnyy-reliz-cachedbuffers
это?
Ну т.е. чтобы в памяти не хранить, а в файле.
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930058
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinemuriusВ твоей ситуации единственный вариант - это локальная СУБД.

Вариантов-то дофига. Но таки да, этим может воспользвоаться даже самый неопытный программист.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень большой TDictionary
    #39930062
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Вариантов-то дофига.
Почему дофига ? Наращивание памяти это не решение.
Вынос в БД - единственное вменяемое решение. Варианты только в способе хранения/записи/чтении.
...
Рейтинг: 0 / 0
25 сообщений из 64, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Очень большой TDictionary
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]