Две таблицы, удаление дублей за 1 сек

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1
Здавствуйте. Есть 2 таблицы по миллион строк каждая, в таблицах находятся номера. Каждый день парщу по 100тыс номеров, как мне сделать очистку дублей с уже существующими таблицами. Сначала сделал взятие номера из новой таблицы и сравнения его со всеми номерами с предыдущих таблиц. Как вы уже поняли это сильно грузит ЦП и по времени занимает чуть меньше года. Что можно сделать?
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
Здавствуйте. Есть 2 таблицы по миллион строк каждая, в таблицах находятся номера. Каждый день парщу по 100тыс номеров, как мне сделать очистку дублей с уже существующими таблицами. Сначала сделал взятие номера из новой таблицы и сравнения его со всеми номерами с предыдущих таблиц. Как вы уже поняли это сильно грузит ЦП и по времени занимает чуть меньше года. Что можно сделать?
https://zennolab.com/discussion/threads/skolko-strok-iz-spiska-zenka-mozhet-perevarit-ne-podavivshis.36982/#post-275031
 
  • Спасибо
Реакции: ВасяНЕЖИТЬ

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1
Как применить этот спиппет, если мне нужно сравнить только первые колонки таблиц и как результат сохранить строки без дублей
 

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1
С этим кодом мы вытяним нужный нам столбе с обеих таблиц.
Код:
IZennoTable table = project.Tables["новые"]; //указываем таблицу
IZennoList list =  project.Lists["новые"]; //указываем список
string column = "B"; //указываем наименование столбца
string cell;
//Перегоняем столбец в список
for (int i=0;i<table.RowCount; i++){
     cell = table.GetCell(column, i);//
     list.Add(cell);
}
Этим мы почистим от дублей и сохраним результат в 3й список
Код:
lock(SyncObjects.ListSyncer){
    string[] first = File.ReadAllLines(@project.Variables["pathBASE"].Value);
    string[] second = File.ReadAllLines(@project.Variables["pathNEW"].Value);
    string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
    File.WriteAllLines(@project.Variables["PatREADY"].Value, third);
}
Теперь у нас есть список с готовыми номерами и нам нужно подставить еще два столбца из 2 таблицы соответствующие номеру, как мне это сделать кто знает?
 

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1
Попробовал цикл:
Взятие номера из списка - поиск по номеру строки в таблице - добавление двух других колонок в переменные - добавление переменных в таблицу построчно
Такой цикл занимает много времени, можно ли как-то сразу добавить соответствующие колонки ко всем номерам. Можно ли AsParallel как-то применить
 
Последнее редактирование:

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
Попробовал цикл:
Взятие номера из списка - поиск по номеру строки в таблице - добавление двух других колонок в переменные - добавление переменных в таблицу построчно
Такой цикл занимает много времени, можно ли как-то сразу добавить соответствующие колонки ко всем номерам. Можно ли AsParallel как-то применить
На больших объемах зенновские таблицы и списки очень медленные, поэтому лучше обходиться без больших манипуляций с ними.
Насчет вашей задачи, дальше подсказать тяжело, т.к. не ясны ньюансы, например, могут ли быть (хотябы теоретически) дубли номеров в 1 и/или во 2й таблице, какой формат таблиц, какой разделитель, какие допустимые символы, в каком формате пишутся номера, как часто надо делать поиск, какая таблица более статична и на сколько, сколько потоков пытаются проделать эту операцию одновременно и т.п.
 
Последнее редактирование:

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1
На больших объемах зенновские таблицы и списки очень медленные, поэтому лучше обходиться без больших манипуляций с ними.
Насчет вашей задачи, дальше подсказать тяжело, т.к. не ясны ньюансы, например, могут ли быть (хотябы теоретически) дубли номеров в 1 и/или во 2й таблице, какой формат таблиц, какой разделитель, какие допустимые символы, в каком формате пишутся номера, как часто надо делать поиск, какая таблица более статична и на сколько, сколько потоков пытаются проделать эту операцию одновременно и т.п.
Нюансы
1 В рамках одной таблицы дублей нет, есть дубли в рамках двх таблиц
2 Формат таблиц xlsx
3 Разделитель стандартный
4 "какие допустимые символы" - не понял
5 номера в формате "число" как на скрине
6 поиск нужно делать раз в ден
7 статичны обе таблицы, что сравниваем
8 при работе в цикле у меня получилось выставить 15 потоков и ЦП сильно начал грузить, но я полюбому неправильно сделал. Должен быть метод специально предназначенный для быстрой проверки больших баз данных. Как я писал ранее я зацикливал поиск уже отфильтрованных номеров в исходной таблице(т.е поиск происходил построчно) может как-то AsParallel применить. Вообщем я хз, сложная задачка
 

Вложения

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Благодарностей
0
Баллы
1
Актуально
 

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