Как брать разные данные из файла разными потоками ?
-
Всем привет.
У меня такая задача. Нужно брать из файла одну строку и делать с ней определенные действия.
Надо пройти все строки до конца и завершить скрипт.
В одном потоке я просто сую файл в список и попорядку беру строки.Но как делать в многопотоке ?
Все потоки берут одни и теже данные и не понятна как сделать чтобы во всех потоках бралось попорядку данные а не одинаковые, тоесть если 1 поток взял строку, другой уже чтобы следующую взял.
-
@easy Привет
Для этих целей есть ресурсы, там все уже учтено для работы в многопоточности
https://www.youtube.com/watch?v=kW9ag7-3nDk
-
Так выходит что надо брать строчку из файла и опять его сохранять ? Также нагрузка бешенная будет вроде как
-
@easy посмотри видео для начала
-
@easy ресурсы-список создают табличку со списком в оперативной памяти(находится в быстрой оперативной памяти а не на диске),
периодически синхронизируя свой список со списком в файле.
ресурсы неплохо работают для своих задач.(данные из ram памяти с cpu явно быстрей работают)
примерно так наверно.
-
еще стоит добавить что у ресурсов в отличии от простых списков в бас нет особых проблем с большими списками.
-
@tet-vivi ОТличный ответ.
А как посоветуешь все же с большими списками работать ?
У меня очень большие файлы.
Вот так как я понял сделать надо ? ТОгда в каждом потоке будут разные данные.
brute_base - файл с данными.
Или как мне вчера советовали , все эти данные вначале скрипта перенести в базу данных, а потом с базой данных работать ?
Пытаюсь брут написать, вот вопрос с работой файлов непонятен, как и что.
Или третий вариант сделать вообще разбивку на много файлов в начале скрипта, а после чего брать маленькие файлики и юзать по порядку, чтобы по 100500 раз не тратить данные на выгрузку файла в оперативку ?
Как правильнее ?
-
@easy база или ресурс на своё усмотрение.
у базы вроде меньше потребления оперативки и дополнительные фишки вроде сортировок и поиску по колонкам(т.е. есть 2 колонки логин и пароль. можно искать по колонке логин, получив в итоге всю строку/данные с этим логином. такого поиска в ресурсах нет)
т.е. для простого хватит ресурсов, для более сложных база.
-
ну а базе пофиг на размеры ?
Вот этого момента не понял.Тоесть в каком слушчае логики работы будет есть меньше ресурсов ?
Предположим 3 ляма записей.
Парсить строку из файла как я выше писал ? Парсить строку из ресурса и делать дела.
Или всетаки вначале скрипта выгрузить все 3 ляма записей в базу, а после чего получать оттуда данные.
У меня задача брать просто первую строку проверять логин пароль и брать следующую. Ну и так до конца
-
@easy said in Как брать разные данные из файла разными потоками ?:
ну а базе пофиг на размеры ?
Вот этого момента не понял.пока есть место на диске.
Предположим 3 ляма записей.
лучше использовать базу.
как лучше загонять данные в базу в вашем случае не знаю.
если есть возможность самостоятельно проделать, то я бы загонял данные без бас. вышло бы быстрей.
в бас возможно использовать ноду.js и там поискать чего что бы напрямую загнать данные желательно.
возможно база имеет cli интерфейс и через него можно залить данные файла.
самый медленный варианты это ресурсы и списки через стандартные средства бас. при ваших объемах списки могут просто выводить из работы бас, а ресурсы будут отжирать оперативную памятькроме монго есть другие базы данных. и не так давно вроде вышел модуль для работы с sql базами
-
можно большой файл разбить на небольшие файлы и в бас подключать уже эти маленькие файлы получая список.
для разбития файла можно использовать BAT команды.