LINUX.ORG.RU

Реализация быстрой проверки строки из файла в несколько гб

 ,


1

2

Обычный текстовый файл со строками, каким образом лучше будет его спарсить (в бд например), что бы без большой нагрузки проверять постоянно наличие в этом файле строки?

что бы без большой нагрузки проверять

Без большой нагрузки на что?

Хранение файла в памяти разгрузит ввод-вывод, например.

anonymous
()

считать сразу файл в память и потом проверять там наличие подстроки - это большая нагрузка ?

x905 ★★★★★
()
Ответ на: комментарий от deep-purple

уверен что сразу?

заранее считать имел ввиду, ТС не сказал сколько памяти свободно, а 2ГБ это уже мало, пусть считает, нам его память не жалко

x905 ★★★★★
()

На свете нет ничего быстрее, чем загрузить эти 2Гб в память (не так уж сложно по нынешным временам) и искать там вначале первую букву строки потом всю строку сравнивать.

vodz ★★★★★
()
Ответ на: комментарий от deep-purple

2 гб ради одного файла это очень много

ТС не сказал - много это ему или мало, быстрее не будет чем из памяти считать

x905 ★★★★★
()
Ответ на: комментарий от deep-purple

а вот еще один оптимизатор подьехал

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

vodz ★★★★★
()
Ответ на: комментарий от deep-purple

начни думать о том, что в 2гб текста (под)стрОки врядли уникальны

не совсем понял мысль

ТС нужно найти в большой строке «2ГБ» малую строку «100 байт» каким то методом типа find() ?
и так 100 раз в секунду ?

x905 ★★★★★
()

Зачем классические бд? Elk и Splunk же прекрасно с этим справятся. Ещё алерты и репорты выдадут.

skyman ★★★
()
  1. https://docs.python.org/3/library/stdtypes.html#dict Но сожрет много памяти.

  2. https://stackoverflow.com/questions/1731971/is-there-a-multimap-implementation-in-python с хешами строк в качестве ключей.

  3. sqlite. Но сожрет много памяти.

  4. libfpta со вторичным unorderd индексом без ограничений уникальности. Это раз в 5-10 раз быстрее sqlite, но opensource байдингов для питона нет.

  5. поставить рядом tarantool.

  6. поставить рядом elasticsearch, но прицеп jvm-говна будет больше чем БД.

  7. на скриптах, пользовать test --hash-stdin-strings из t1ha и grep.

+еще 33 способа

Deleted
()

лучше будет его спарсить

python3

взаимоисключающие параграфы

lovesan ★★
()
Ответ на: комментарий от WitcherGeralt

А потом ТС наконец понял, что он не понял о чём спрашивал.

HIS
()
Ответ на: комментарий от anonymous

Да причём тут это. ТС сказал: файл не будет меняться. Зачем что либо нужно для сканирования более одного раза?

HIS
()
Ответ на: комментарий от HIS

я устал от твоего поноса, перечитай что я писал,а не высирай рандомные предложения.

Я сказал что файл не меняется, но строки генерируются по 20 штук в секунду каждую из которых нужно проверить на существование в файле.

Просто не пытайся что либо ответить, от твоих ответов абсолютно 0 толку

noname_user ★★★
() автор топика
Ответ на: комментарий от noname_user

Научись спрашивать в начале и не груби пожалуйста.

Если бы ты умел хорошо предоставлять свою мысль - тебе уже ответили ещё вчера.

Поработай над собой.

И да я тебе уж ответил что БД тебе в помощь.

Успехов тебе в познании как нужно хорошо спрашивать.

Хорошо заданный вопрос - 50% ответа.

HIS
()
Ответ на: комментарий от noname_user

Я сказал что файл не меняется, но строки генерируются по 20 штук в секунду каждую из которых нужно проверить на существование в файле.

Это шедевр.

HIS
()
Ответ на: комментарий от Deleted

А какая в хер разница? Вы все ему в память предлагаете грузить. Сегодня у него этих данных 2 гб, завтра 2тб.

anonymous
()
Ответ на: комментарий от Deleted

ТС не понимает отличие изменения имени файла от изменения файла.

А дальше вопрос пока не думаю, что нужно ставить сложнее. ТС и так уже запутался.

HIS
()
Ответ на: комментарий от anonymous

Так все-таки нужна strstr() на питоне или поиск целой строки в файле с разделителями?

А какая в хер разница? Вы все ему в память предлагаете грузить. Сегодня у него этих данных 2 гб, завтра 2тб.

Разница примерно такая-же как между N и N*N.

Если переформулировать в LOR-терминах, то разница как между жопой и пальцем.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от noname_user

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

Сделай для этого файла индекс(хеши строк в какое-нибудь подходящее дерево) и держи его в памяти. поиск быстрый, io не будет, а поскольку файл не меняется, перестраивать индекс можно только на старте, а то и вообще сериализовать рядом, по ситуации.

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от noname_user

строки генерируются по 20 штук в секунду каждую из которых нужно проверить на существование в файле

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

Скорее всего ты вытворяешь наитупейшую херню. Очевидно, что проверенные строки ты как-то собираешься использовать. А файл у тебя, меж тем, статичный, следовательно, однажды проверенная и использованная строка у тебя может повторяться сколько угодно раз, т.к. в файл она не попала. Если это норм, тогда не понятно зачем нужна генерация. Впрочем, разгадывать этот бред смысла нет.

WitcherGeralt ★★
()
Ответ на: комментарий от Dark_SavanT

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

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Идём лучше запилим БД на Ардуино для русских шашек, где никто выиграть не сможет.

ТС уже задолбал своей невразумительностью.

HIS
()
Последнее исправление: HIS (всего исправлений: 1)
Ответ на: комментарий от HIS

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

Реально, только осознал, что скоро полгода уже, благо хоть вес держится, пора возобновлять.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Да он просто пока не понимает что и чего хочет.

Наверняка молодой ишшо. Спе….коз стрельнул в голову, а как с этим справляться пока не понял.

HIS
()
Ответ на: комментарий от HIS

Идём лучше запилим БД на Ардуино для русских шашек

Ардуино - ок.

Шашки - ок.

Но зачем там БД?

Заинтриговал )

Deleted
()
Ответ на: комментарий от Deleted

Зачем там ардуино, когда на ESP можно сразу север поднять

anonymous
()
Ответ на: комментарий от Deleted

Ну обычный перебор и так в моих древних шашках под DOS рубит людей как мясо…

Я вот недавно проанализировал, что можно сделать даже на Arduino Mega полностью не проигрывающие шашки. Признаюсь, что полный анализ не провёл, но по прикидкам 200 килобайт вроде хватит на не полную но без проигрышную базу партий.

HIS
()
Ответ на: комментарий от WitcherGeralt

Если полный тупой перебор - петабайты.

Но это если по тупому. А так в принципе несколько сот партий по несколько десятков ходов в каждой.

В принципе шахматы не далеко ушли от этого.

HIS
()
Ответ на: комментарий от WitcherGeralt

Я так с заказчиками общаюсь, не привыкать

peregrine ★★★★★
()
Ответ на: комментарий от HIS

Ему прилетают строки и он проверяет их наличие в файле, вместо того, чтобы взять бд и делать по-человечески. Как вариант если ему БД ни на фиг не сдалась, я предложил брать от строк хеши и хранить только их, соответственно и сверяться только с ними, благо они меньше строк произвольной длинны.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Да не парся. ТС так и не написал сути задачи.

HIS
()

grep уже предлагали?

anonymous
()
Ответ на: комментарий от WitcherGeralt

Вообще эти игры сложны только для людей.

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

В принципе, все игры придуманные людьми в древности типа шахмат, шашек и Го, а тем более карточные - люди даже рядом не валяются с тем как могут их уделать компы.

Иногда просто плохо написаны алгоритмы (по себе знаю).

HIS
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.