|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Такая задача: Приложение получает из таблицы в базе список файлов, затем должно пройти по списку и определить - существует ли физически файл по указанному пути. Если не существует файл добавляется в список несуществующих файлов, который и является целью обработки. При большом количестве файлов в списке обработка длинная. Как можно распараллелить? ускорить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 09:11 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Делай в N потоков. Как вариант: если папок с файлами немного, то сначала прочитать содержимое папок в массив, затем проверять на наличие в массиве. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 09:18 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Dima TДелай в N потоков. Как вариант: если папок с файлами немного, то сначала прочитать содержимое папок в массив, затем проверять на наличие в массиве. да, вариант, хоть в общем случае неизвестно много ли файлов. Но вот "наличие в массиве" как проверять? Перебором? Там ключ по идее полный путь к файлу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 09:20 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинНо вот "наличие в массиве" как проверять? Перебором? Зачем перебором? Отсортируй и бинарным поиском. Или HashSet возьми вместо массива. Ролг ХупинТам ключ по идее полный путь к файлу. В массив тоже пиши имя с полным путем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 09:26 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг Хупин, В табле триггер на insert и проверять на данное событие. Будет мгновенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 09:49 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг Хупин, Неужели обработка быстрее поиска? Мне кажется всю задачу надо смотреть. Представим есть терабайт hdd. И зачем каждый раз по нему искать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 09:57 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Petro123Ролг Хупин, В табле триггер на insert и проверять на данное событие. Будет мгновенно. Из базы только читается список файлов, далее всё делается в приложении. Если имеется в виду - в момент добавления файла в базу, то - да, можно и так, но после этого файл могли грохнуть и т.д. Там есть и обратная задача, но есть условие: из базы никаких выходов во внешний мир, т.к. Azure, RDS, SQL Server Linux ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 10:15 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг Хупин, Если файл могли грохнуть, то никакие списки ЗАРАНЕЕ на клиенте делать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 10:19 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинТам есть и обратная задача, Если это какое то зеркало, то ваша задача шире какого то поиска файлов в операционке. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 10:27 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Petro123Ролг Хупин, Если файл могли грохнуть, то никакие списки ЗАРАНЕЕ на клиенте делать нельзя. Ну, это и не зеркало. Задача 1. В базу пишутся записи о прикладных объектах, каждый объект имеет список связанных с объектом файлов (путей). Объект О1-> ->Файл1 ->Файл2 ... ->ФайлN Юзер может проверить целостность набора файлов в клиентском приложении. Выбирается список из базы (Файл1,...,->Файл10000) и создается список несуществующих. Почему они уже не существуют - вопрос третий, да это и не важно. Задача 2. (Обратная) В функцию в приложении передается фолдер и нужно создать список файлов, которые есть в фолдере, но нет в таблице в базе. Эти задачи делаются, но при большом количестве файлов на диске и/или в базе - они тяжелые и долго выполняются, потому что линейно, по одной записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 10:52 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг Хупин, Вы мне рассказали решение. А я говорил о постановке. Т.е. почему файлы? ... Если пропустить постановку, то давайте цифры про "тормозит" ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:01 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинНу, это и не зеркало Да. Это Git хранилище со снимками ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:03 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг Хупин, а сколько файлов? как долго выполняется? У нас админ тупо на PowerShell скрипт наваял и он шустро работает. 9 с половиной миллионов файлов в 14 миллионах папок. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:07 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинЭти задачи делаются, но при большом количестве файлов на диске и/или в базе - они тяжелые и долго выполняются, потому что линейно, по одной записи. Сиквел умеет хранить в базе файлы, но в виде ссылок? Как в оракле? Подходит вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:09 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Petro123Ролг ХупинЭти задачи делаются, но при большом количестве файлов на диске и/или в базе - они тяжелые и долго выполняются, потому что линейно, по одной записи. Сиквел умеет хранить в базе файлы, но в виде ссылок? Как в оракле? Подходит вариант? не ;-) там строчки nvarchar - пути к файлам. Как я написал "Приложение получает из таблицы в базе список файлов, затем должно пройти по списку и определить - существует ли физически файл по указанному пути. Если не существует файл добавляется в список несуществующих файлов, который и является целью обработки." Для большого списка проверка существования каждого файла - одно из узких мест. Ну, да, разве что запустить в несколько потоков проверку и если нет файла - добавление в тот же список. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:16 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
skyANAРолг Хупин, а сколько файлов? как долго выполняется? У нас админ тупо на PowerShell скрипт наваял и он шустро работает. 9 с половиной миллионов файлов в 14 миллионах папок. Это у разных юзеров выполняется, по-разному может быть, где-то быстро, где-то несколько часов, если файлов много, если слабая машина, где запустили утилиту и т.д. Интерфейс должен быть юзер-френдли, потому PS не пройдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:18 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинskyANAРолг Хупин, а сколько файлов? как долго выполняется? У нас админ тупо на PowerShell скрипт наваял и он шустро работает. 9 с половиной миллионов файлов в 14 миллионах папок. Это у разных юзеров выполняется, по-разному может быть, где-то быстро, где-то несколько часов, если файлов много, если слабая машина, где запустили утилиту и т.д. Интерфейс должен быть юзер-френдли, потому PS не пройдет. Несколько часов у юзера? Сомневаюсь, что у отдельного юзера миллионы файлов. Смотрите на чём конкретно тормозит Ваша обработка. LINQ используете? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:24 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинДля большого списка проверка существования каждого файла - одно из узких мест. Это не конкретный текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:29 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг Хупиннесколько потоков проверку Головка HDD одна ))). Поэтому выкладывай инфу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:30 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
1. Получить список файлов из БД. 2. Получить список файлов из папки на диске. 3. Получить различия, сделав хэш-таблицу из одного из списков. Может я чего-то дико не понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:35 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
skyANAРолг Хупинпропущено... Это у разных юзеров выполняется, по-разному может быть, где-то быстро, где-то несколько часов, если файлов много, если слабая машина, где запустили утилиту и т.д. Интерфейс должен быть юзер-френдли, потому PS не пройдет. Несколько часов у юзера? Сомневаюсь, что у отдельного юзера миллионы файлов. Смотрите на чём конкретно тормозит Ваша обработка. LINQ используете? Конечно, миллионов файлов нет, тыщи, LINQ тоже нет. Читается список в List<string>, затем суётся в DGV , затем проверяется и формируется целевой список несуществующих во втором DGV. Код написан 300 лет назад ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:37 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Алексей К, Говорит что список машины может устареть) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:38 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Petro123Ролг Хупиннесколько потоков проверку Головка HDD одна ))). Он же не файлы будет читать, а содержимое папок. Виндовс эту инфу кэширует. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:40 |
|
Мозгоштурм: как обработать быстрее?
|
|||
---|---|---|---|
#18+
Ролг ХупинКод написан 300 лет назад Ролг ХупинКод написан 300 лет назад Осталось написать Test For 1000 to If FileExist ("xxxxxxx End for И сказать время. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 11:44 |
|
|
start [/forum/topic.php?fid=20&fpage=36&tid=1399582]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 441ms |
0 / 0 |