Очистка базы по фильтру

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
576
Благодарностей
41
Баллы
28
Подскажите есть 2 файла ... База1 и База2

Нужно из базы2 удалить все строки которые есть в БАЗА1 ... как это можно сделать

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

Пробовал через работу со списками и удалением по содержанию ... это просто капец как долго .... файлы по 300 мегабайт очень долллго обрабатываются .. може т есть какой бо более быстрый вариант .. кто подскажет ??
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
можно, конечно заморочиться с тайм-бечмарками и подобрать самый оптимальный метод распараллеливания для твоей задачи,
но если честно - лень :D
может кто из ребят подкинет классную реализацию, пока так:

C#:
File.WriteAllLines(@"C:\Users\Sleep\Desktop\База2.txt", (File.ReadAllLines(@"C:\Users\Sleep\Desktop\База2.txt").AsParallel().Except(File.ReadAllLines(@"C:\Users\Sleep\Desktop\База1.txt").AsParallel())));
 
  • Спасибо
Реакции: Sho и xatchikzzz

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
576
Благодарностей
41
Баллы
28
можно, конечно заморочиться с тайм-бечмарками и подобрать самый оптимальный метод распараллеливания для твоей задачи,
но если честно - лень :D
может кто из ребят подкинет классную реализацию, пока так:

C#:
File.WriteAllLines(@"C:\Users\Sleep\Desktop\База2.txt", (File.ReadAllLines(@"C:\Users\Sleep\Desktop\База2.txt").AsParallel().Except(File.ReadAllLines(@"C:\Users\Sleep\Desktop\База1.txt").AsParallel())));
Вообще крктяк )) а главное быстро ... хз конечно на точность но это пушка )
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
576
Благодарностей
41
Баллы
28
можно, конечно заморочиться с тайм-бечмарками и подобрать самый оптимальный метод распараллеливания для твоей задачи,
но если честно - лень :D
может кто из ребят подкинет классную реализацию, пока так:

C#:
File.WriteAllLines(@"C:\Users\Sleep\Desktop\База2.txt", (File.ReadAllLines(@"C:\Users\Sleep\Desktop\База2.txt").AsParallel().Except(File.ReadAllLines(@"C:\Users\Sleep\Desktop\База1.txt").AsParallel())));
подскажи такой момент .. а как можно сделать что есть база 1 - и есть база 2 ...... нужно оставить в база 1 только те строки которые есть в База 2.... можно такое сделать??
 

Sardol

Client
Регистрация
23.09.2020
Сообщения
194
Благодарностей
45
Баллы
28
Подскажите есть 2 файла ... База1 и База2

Нужно из базы2 удалить все строки которые есть в БАЗА1 ... как это можно сделать

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

Пробовал через работу со списками и удалением по содержанию ... это просто капец как долго .... файлы по 300 мегабайт очень долллго обрабатываются .. може т есть какой бо более быстрый вариант .. кто подскажет ??

Работает очень быстро.
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
576
Благодарностей
41
Баллы
28

Sardol

Client
Регистрация
23.09.2020
Сообщения
194
Благодарностей
45
Баллы
28
В первом посте написано
в каждой базе примерно по 5 лямов строк ...

Пробовал через работу со списками и удалением по содержанию ... это просто капец как долго .... файлы по 300 мегабайт

списки очень большие и по частям не пойдет сравнивать... нужно одним списком.. размер списка 35-50 гигов ...
Попробуй целые файлы, не разбивая. У меня таких больших файлов нет, но файл на 10-15КК строк обрабатывает за пару секунд.
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
подскажи такой момент .. а как можно сделать что есть база 1 - и есть база 2 ...... нужно оставить в база 1 только те строки которые есть в База 2.... можно такое сделать??
воспользоваться обратным методом (.Intersect) от метода .Except, поменяв очередность файлов
только нужно правильный параметр подобрать для StringComparer, ибо не знаю, какой вид имеют твои строки
C#:
File.WriteAllLines(@"C:\Users\Sleep\Desktop\1.txt", (File.ReadAllLines(@"C:\Users\Sleep\Desktop\1.txt").AsParallel().ToList().Intersect(File.ReadAllLines(@"C:\Users\Sleep\Desktop\2.txt"), StringComparer.InvariantCultureIgnoreCase).AsParallel()));
размер списка 35-50 гигов ...
наверное, в этом случае - лучше уже БД использовать...
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
576
Благодарностей
41
Баллы
28
воспользоваться обратным методом (.Intersect) от метода .Except, поменяв очередность файлов
только нужно правильный параметр подобрать для StringComparer, ибо не знаю, какой вид имеют твои строки
C#:
File.WriteAllLines(@"C:\Users\Sleep\Desktop\1.txt", (File.ReadAllLines(@"C:\Users\Sleep\Desktop\1.txt").AsParallel().ToList().Intersect(File.ReadAllLines(@"C:\Users\Sleep\Desktop\2.txt"), StringComparer.InvariantCultureIgnoreCase).AsParallel()));

наверное, в этом случае - лучше уже БД использовать...
96480


чет ему не хватило...
 

traffman

Client
Регистрация
30.11.2018
Сообщения
90
Благодарностей
99
Баллы
18

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)