powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDictionary или TList<>.BinarySearch с позиции поиска
25 сообщений из 479, страница 1 из 20
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366116
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Миллион сортированных строк (MSSQL ORDER BY ASC):
str: varchar(12), value: int

Str - фиксированной длины, то есть все строки всегда одной длинны и содержат только цифры.

В режиме многопоточности сканится список и иногда обновляется (путем добавления снизу).

Что хотелось бы - скорости в поиске и отсутствия большого объема данных в памяти.

В настоящий момент я использую TList<>.BinarySearch.
Comparer конкретно в данном случае выглядит примерно так:
Код: pascal
1.
  Result := CompareStr(L.Str, R.Str);



Но есть другие места, где в схожей задаче comparer выглядит так
Код: pascal
1.
2.
3.
4.
5.
  Result := CompareStr(L.Str, R.Str);
  if Result = 0
    Result := CompareStr(L.Secondary, R.Secondary);
  if Result = 0
    REsult := ValueSign(L.Code, R.Code);



Вторичный вопрос:
Имеет ли особый смысл приведения строковых данных, например, к а) хешу и б) инту (интам), кодируя каждый байт строки?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366129
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - разбей гигантский лист на несколько поменьше.
И данные в них раздели например по MOD от хэша.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366164
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

Хеш быстрее сортированного списка или тем более дерева
В чём вопрос - я так и не понял
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366170
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

может базе отдать базово и не заниматься творческим онанизмом?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366187
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU ,

хеш - это же строка в любом случае, нет?
12 символов против 20, а в чем тогда выгода?

Это выше вопросы - раз. и два - стоит ли вместо строк хранить хеш в листе и все это делать самому, или, например, воспользвоаться TDictionary - он же сам это все (в тч бинарный поиск) делает или нет?


makhaonможет базе отдать базово
Ну давайте рассуждать
а) много потоков
б) в пике до 50 серчей в секунду.
в) миллион записей (это порядок цифр, а не точное значение).

Что лучше - затрахать базу по ТСР или использовать память и проц сервера?
Допустим выбираем "затрахать базу по ТСР". Что сделать? Все строки привести к чему? Или построить индекс по тексту?

rgreat , это уже перебор. Не понятно, что это даст.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366188
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
серчер SOFT FOR YOU ,

хеш - это же строка в любом случае, нет?
нет
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366194
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

ой, да ладно, напугал базу миллионом записей )

>в пике до 50 серчей в секунду.

гугл посмотри, и ничего - справляется. весь вопрос в базе, железе и запросах. вообще, я для себя давно вывел простое правило. базы не зря придумали. и алгоритмы для них десятилетиями пилили. и довольно мало шансов, что у себя получится сделать лучше.
поэтому всем поиском должна заниматься база. только нужно её нормально настроить и запросы написать.
впрочем - дело твоё, конечно.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366196
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер rgreat , это уже перебор. Не понятно, что это даст.
Если сделаешь 10 листов вместо одного то искать придется не в миллионе записей а в ста тысячах.
Что явно быстрей.
И это все почти бесплатно.

Опять-таки добавление объекта в маленький сортированый лист будет работать на порядок быстрей чем в большой.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366197
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

авторЧто лучше - затрахать базу по ТСР или использовать память и проц сервера?

к слову - а чё её трахать? если у тебя изменяемых записей почти нет? кидай данные на сторону базы и пусть она там в себе ковыряется сама.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366203
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator, приведите пример класса с хеш-переменной, какой у нее будет тип?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366206
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaonсерчер,

ой, да ладно, напугал базу миллионом записей )

>в пике до 50 серчей в секунду.

гугл посмотри, и ничего - справляется. весь вопрос в базе, железе и запросах. вообще, я для себя давно вывел простое правило. базы не зря придумали. и алгоритмы для них десятилетиями пилили. и довольно мало шансов, что у себя получится сделать лучше.
поэтому всем поиском должна заниматься база. только нужно её нормально настроить и запросы написать.
впрочем - дело твоё, конечно.

Там были еще вопросы или мимо прошли вопросы? :) А я бы почитал ответы :)
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366207
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчерdefecator, приведите пример класса с хеш-переменной, какой у нее будет тип?Тип может быть любой.
От байта до строки.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366209
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, а что вы скажете про TDictionary vs TList<> в плане использования для поиска?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366212
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreatсерчерdefecator, приведите пример класса с хеш-переменной, какой у нее будет тип?Тип может быть любой.
От байта до строки.

Разумеется. Какой в данном случае подойдет?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366214
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

TDictionary по любому быстрей, но могут быть рандомные просадки быстродействия во время его роста.
И на TDictionary надо больше памяти.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366215
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

Вот - такие у меня для тебя ответы :)
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366216
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчерГоспода, а что вы скажете про TDictionary vs TList<> в плане использования для поиска?

Ищет быстро. Хэши долго делает.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366218
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчер,

Обычно используют 4 байта. А что подойдет вам - это ваше решение.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366237
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon ,
да я так и понял, что никаких, кроме блаблабла :)


asviridenkov , спасибо


rgreat , мой случай это строка из 12 символов. 12 байт.
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39366243
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчерГоспода, а что вы скажете про TDictionary vs TList<> в плане использования для поиска?

Скажу - замути тест и сам замерь производительность
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39367281
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчерхеш - это же строка в любом случае, нет?
Нет, конечно. Результат простой хеш-функции CRC32 это integer
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39367904
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaonсерчер,

Приходишь на публичный форум - будь готов к любым ответам.

Всё взаимообратно. Отвечаешь что хочешь, ведешь себя непотребно или говоришь не по теме - ты никому нравиться не обязан.

Квейд
В рамках Дельфи?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39367995
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серчерВсё взаимообратно. Отвечаешь что хочешь, ведешь себя непотребно или говоришь не по теме - ты никому нравиться не обязан.Вообще-то он всё правильно говорил. Кури матчасть. Хэш может быть какой угодно, чаще всего целочисленное число
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39368514
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну че там по тестам то?
...
Рейтинг: 0 / 0
TDictionary или TList<>.BinarySearch с позиции поиска
    #39368879
серчер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU
Пока не делал.
Лучшим решением все таки было бы хеш сделать. Только не очень понятно чем воспользоваться, чтобы к инту привести вот такие строки

D6999900001
D6999900002
A6999900003
F6999900004
....

И затем сравниваемое (которое может входить или не входить в данный набор) так же приводить к уникальному инту и по нему сравнивать.
...
Рейтинг: 0 / 0
25 сообщений из 479, страница 1 из 20
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDictionary или TList<>.BinarySearch с позиции поиска
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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