Информация об изменениях

Сообщение Re: Оптимизация строк от 12.04.2019 7:27

Изменено 12.04.2019 7:41 Sharowarsheg

Re: Оптимизация строк
Здравствуйте, #John, Вы писали:


J>Отдельно от него есть несколько десятков списков(~300mb) разной величины (до 300к строк) по которым происходит поиск данных:


на каком языке (точнее, какой charset) строки и меняются ли они? и повторяются ли?

сделать список, загнать в него строки и использовать индексы в списке.

если строки заранее известны, то список можно попробовать пожать по вкусу. какой длины они опять же.

если достаточно часто попадаются восьмибитные строки, сделать два списка, один для восьмибитных строк, другой для UTF16.

опять же, насколько часто нужны сами строки, по сравнению с тем, насколько часто нужно сравнивать.
Re: Оптимизация строк
Здравствуйте, #John, Вы писали:


J>Отдельно от него есть несколько десятков списков(~300mb) разной величины (до 300к строк) по которым происходит поиск данных:


на каком языке (точнее, какой charset) строки и меняются ли они? и повторяются ли?

сделать список, загнать в него строки и использовать индексы в списке.

если строки заранее известны, то список можно попробовать пожать по вкусу. какой длины они опять же.

если достаточно часто попадаются восьмибитные строки, сделать два списка, один для восьмибитных строк, другой для UTF16.

опять же, насколько часто нужны сами строки, по сравнению с тем, насколько часто нужно сравнивать.

И сколько всего строк? скажем, миллион штук максимум если, то номер строки укладывается в 24 бита и еще 7 можно использовать под 128 разных типов сжатия, и при этом индекс будет укладываться в int32. А дальше над сжатием можно надругаться как угодно, включая, например, варианты "если строка один, два, или три восьмибитных символа, то это на самом деле uint24" и тогда старший байт индекса равен нулю, а три младших — это сама строка. А если строка — четыре восьмибитных символа, то старший байт индекса равен 1, а три младших дают индекс в массив uint32. А от четырех до восьми — в массив uint64. И так можно глумиться неограниченно долго.