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

  • Автор темы Автор темы xatchikzzz
  • Дата начала Дата начала

xatchikzzz

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

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

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

Пробовал через работу со списками и удалением по содержанию ... это просто капец как долго .... файлы по 300 мегабайт очень долллго обрабатываются .. може т есть какой бо более быстрый вариант .. кто подскажет ??
 
можно, конечно заморочиться с тайм-бечмарками и подобрать самый оптимальный метод распараллеливания для твоей задачи,
но если честно - лень :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
можно, конечно заморочиться с тайм-бечмарками и подобрать самый оптимальный метод распараллеливания для твоей задачи,
но если честно - лень :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())));
Вообще крктяк )) а главное быстро ... хз конечно на точность но это пушка )
 
можно, конечно заморочиться с тайм-бечмарками и подобрать самый оптимальный метод распараллеливания для твоей задачи,
но если честно - лень :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.... можно такое сделать??
 
Подскажите есть 2 файла ... База1 и База2

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

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

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


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

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


списки очень большие и по частям не пойдет сравнивать... нужно одним списком.. размер списка 35-50 гигов ...
Попробуй целые файлы, не разбивая. У меня таких больших файлов нет, но файл на 10-15КК строк обрабатывает за пару секунд.
 
подскажи такой момент .. а как можно сделать что есть база 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 гигов ...
наверное, в этом случае - лучше уже БД использовать...
 
воспользоваться обратным методом (.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


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

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