Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Мозгоштурм: как обработать быстрее? / 25 сообщений из 53, страница 1 из 3
30.11.2017, 09:11
    #39561740
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Такая задача:
Приложение получает из таблицы в базе список файлов, затем должно пройти по списку и определить - существует ли физически файл по указанному пути.
Если не существует файл добавляется в список несуществующих файлов, который и является целью обработки.

При большом количестве файлов в списке обработка длинная.
Как можно распараллелить? ускорить?
...
Рейтинг: 0 / 0
30.11.2017, 09:18
    #39561743
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Делай в N потоков.

Как вариант: если папок с файлами немного, то сначала прочитать содержимое папок в массив, затем проверять на наличие в массиве.
...
Рейтинг: 0 / 0
30.11.2017, 09:20
    #39561744
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Dima TДелай в N потоков.

Как вариант: если папок с файлами немного, то сначала прочитать содержимое папок в массив, затем проверять на наличие в массиве.

да, вариант, хоть в общем случае неизвестно много ли файлов.

Но вот "наличие в массиве" как проверять? Перебором?
Там ключ по идее полный путь к файлу.
...
Рейтинг: 0 / 0
30.11.2017, 09:26
    #39561747
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинНо вот "наличие в массиве" как проверять? Перебором?
Зачем перебором? Отсортируй и бинарным поиском. Или HashSet возьми вместо массива.
Ролг ХупинТам ключ по идее полный путь к файлу.
В массив тоже пиши имя с полным путем.
...
Рейтинг: 0 / 0
30.11.2017, 09:49
    #39561758
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг Хупин,
В табле триггер на insert и проверять на данное событие. Будет мгновенно.
...
Рейтинг: 0 / 0
30.11.2017, 09:57
    #39561766
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг Хупин,
Неужели обработка быстрее поиска?
Мне кажется всю задачу надо смотреть.
Представим есть терабайт hdd. И зачем каждый раз по нему искать?
...
Рейтинг: 0 / 0
30.11.2017, 10:15
    #39561778
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Petro123Ролг Хупин,
В табле триггер на insert и проверять на данное событие. Будет мгновенно.

Из базы только читается список файлов, далее всё делается в приложении.
Если имеется в виду - в момент добавления файла в базу, то - да, можно и так, но после этого файл могли грохнуть и т.д.
Там есть и обратная задача, но есть условие: из базы никаких выходов во внешний мир, т.к. Azure, RDS, SQL Server Linux
...
Рейтинг: 0 / 0
30.11.2017, 10:19
    #39561783
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг Хупин,
Если файл могли грохнуть, то никакие списки ЗАРАНЕЕ на клиенте делать нельзя.
...
Рейтинг: 0 / 0
30.11.2017, 10:27
    #39561786
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинТам есть и обратная задача,
Если это какое то зеркало, то ваша задача шире какого то поиска файлов в операционке.
...
Рейтинг: 0 / 0
30.11.2017, 10:52
    #39561800
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Petro123Ролг Хупин,
Если файл могли грохнуть, то никакие списки ЗАРАНЕЕ на клиенте делать нельзя.

Ну, это и не зеркало.

Задача 1. В базу пишутся записи о прикладных объектах, каждый объект имеет список связанных с объектом файлов (путей).

Объект О1->
->Файл1
->Файл2
...
->ФайлN

Юзер может проверить целостность набора файлов в клиентском приложении.
Выбирается список из базы (Файл1,...,->Файл10000) и создается список несуществующих.
Почему они уже не существуют - вопрос третий, да это и не важно.

Задача 2. (Обратная)
В функцию в приложении передается фолдер и нужно создать список файлов, которые есть в фолдере, но нет в таблице в базе.

Эти задачи делаются, но при большом количестве файлов на диске и/или в базе - они тяжелые и долго выполняются, потому что линейно, по одной записи.
...
Рейтинг: 0 / 0
30.11.2017, 11:01
    #39561807
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг Хупин,
Вы мне рассказали решение. А я говорил о постановке. Т.е. почему файлы?
...
Если пропустить постановку, то давайте цифры про "тормозит"
...
Рейтинг: 0 / 0
30.11.2017, 11:03
    #39561810
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинНу, это и не зеркало
Да. Это Git хранилище со снимками
...
Рейтинг: 0 / 0
30.11.2017, 11:07
    #39561812
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг Хупин,

а сколько файлов? как долго выполняется?

У нас админ тупо на PowerShell скрипт наваял и он шустро работает.

9 с половиной миллионов файлов в 14 миллионах папок.
...
Рейтинг: 0 / 0
30.11.2017, 11:09
    #39561813
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинЭти задачи делаются, но при большом количестве файлов на диске и/или в базе - они тяжелые и долго выполняются, потому что линейно, по одной записи.
Сиквел умеет хранить в базе файлы, но в виде ссылок? Как в оракле?
Подходит вариант?
...
Рейтинг: 0 / 0
30.11.2017, 11:16
    #39561818
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Petro123Ролг ХупинЭти задачи делаются, но при большом количестве файлов на диске и/или в базе - они тяжелые и долго выполняются, потому что линейно, по одной записи.
Сиквел умеет хранить в базе файлы, но в виде ссылок? Как в оракле?
Подходит вариант?


не ;-) там строчки nvarchar - пути к файлам.

Как я написал
"Приложение получает из таблицы в базе список файлов, затем должно пройти по списку и определить - существует ли физически файл по указанному пути.
Если не существует файл добавляется в список несуществующих файлов, который и является целью обработки."

Для большого списка проверка существования каждого файла - одно из узких мест.
Ну, да, разве что запустить в несколько потоков проверку и если нет файла - добавление в тот же список.
...
Рейтинг: 0 / 0
30.11.2017, 11:18
    #39561819
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
skyANAРолг Хупин,

а сколько файлов? как долго выполняется?

У нас админ тупо на PowerShell скрипт наваял и он шустро работает.

9 с половиной миллионов файлов в 14 миллионах папок.

Это у разных юзеров выполняется, по-разному может быть, где-то быстро, где-то несколько часов, если файлов много, если слабая машина, где запустили утилиту и т.д.
Интерфейс должен быть юзер-френдли, потому PS не пройдет.
...
Рейтинг: 0 / 0
30.11.2017, 11:24
    #39561823
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинskyANAРолг Хупин,

а сколько файлов? как долго выполняется?

У нас админ тупо на PowerShell скрипт наваял и он шустро работает.

9 с половиной миллионов файлов в 14 миллионах папок.

Это у разных юзеров выполняется, по-разному может быть, где-то быстро, где-то несколько часов, если файлов много, если слабая машина, где запустили утилиту и т.д.
Интерфейс должен быть юзер-френдли, потому PS не пройдет.
Несколько часов у юзера? Сомневаюсь, что у отдельного юзера миллионы файлов. Смотрите на чём конкретно тормозит Ваша обработка.

LINQ используете?
...
Рейтинг: 0 / 0
30.11.2017, 11:29
    #39561826
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинДля большого списка проверка существования каждого файла - одно из узких мест.
Это не конкретный текст.
...
Рейтинг: 0 / 0
30.11.2017, 11:30
    #39561831
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг Хупиннесколько потоков проверку
Головка HDD одна ))).
Поэтому выкладывай инфу.
...
Рейтинг: 0 / 0
30.11.2017, 11:35
    #39561836
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
1. Получить список файлов из БД.
2. Получить список файлов из папки на диске.
3. Получить различия, сделав хэш-таблицу из одного из списков.

Может я чего-то дико не понимаю?
...
Рейтинг: 0 / 0
30.11.2017, 11:37
    #39561838
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
skyANAРолг Хупинпропущено...


Это у разных юзеров выполняется, по-разному может быть, где-то быстро, где-то несколько часов, если файлов много, если слабая машина, где запустили утилиту и т.д.
Интерфейс должен быть юзер-френдли, потому PS не пройдет.
Несколько часов у юзера? Сомневаюсь, что у отдельного юзера миллионы файлов. Смотрите на чём конкретно тормозит Ваша обработка.

LINQ используете?

Конечно, миллионов файлов нет, тыщи, LINQ тоже нет. Читается список в List<string>, затем суётся в DGV , затем проверяется и формируется целевой список несуществующих во втором DGV. Код написан 300 лет назад
...
Рейтинг: 0 / 0
30.11.2017, 11:38
    #39561840
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Алексей К,
Говорит что список машины может устареть)
...
Рейтинг: 0 / 0
30.11.2017, 11:40
    #39561843
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Petro123Ролг Хупиннесколько потоков проверку
Головка HDD одна ))).
Он же не файлы будет читать, а содержимое папок. Виндовс эту инфу кэширует.
...
Рейтинг: 0 / 0
30.11.2017, 11:44
    #39561849
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Ролг ХупинКод написан 300 лет назад
Ролг ХупинКод написан 300 лет назад
Осталось написать
Test
For 1000 to
If FileExist ("xxxxxxx
End for
И сказать время.
...
Рейтинг: 0 / 0
30.11.2017, 11:47
    #39561850
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мозгоштурм: как обработать быстрее?
Dima Tкэширует
Тут мы углубимся в кэш протух и твёрдотельные диски.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Мозгоштурм: как обработать быстрее? / 25 сообщений из 53, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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