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

ВасяНЕЖИТЬ

Новичок
Регистрация
02.05.2018
Сообщения
8
Реакции
0
Баллы
1
Здавствуйте. Есть 2 таблицы по миллион строк каждая, в таблицах находятся номера. Каждый день парщу по 100тыс номеров, как мне сделать очистку дублей с уже существующими таблицами. Сначала сделал взятие номера из новой таблицы и сравнения его со всеми номерами с предыдущих таблиц. Как вы уже поняли это сильно грузит ЦП и по времени занимает чуть меньше года. Что можно сделать?
 
Здавствуйте. Есть 2 таблицы по миллион строк каждая, в таблицах находятся номера. Каждый день парщу по 100тыс номеров, как мне сделать очистку дублей с уже существующими таблицами. Сначала сделал взятие номера из новой таблицы и сравнения его со всеми номерами с предыдущих таблиц. Как вы уже поняли это сильно грузит ЦП и по времени занимает чуть меньше года. Что можно сделать?
https://zennolab.com/discussion/thr...t-perevarit-ne-podavivshis.36982/#post-275031
 
  • Спасибо
Реакции: ВасяНЕЖИТЬ
Как применить этот спиппет, если мне нужно сравнить только первые колонки таблиц и как результат сохранить строки без дублей
 
С этим кодом мы вытяним нужный нам столбе с обеих таблиц.
Код:
Развернуть Свернуть Копировать
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 таблицы соответствующие номеру, как мне это сделать кто знает?
 
Попробовал цикл:
Взятие номера из списка - поиск по номеру строки в таблице - добавление двух других колонок в переменные - добавление переменных в таблицу построчно
Такой цикл занимает много времени, можно ли как-то сразу добавить соответствующие колонки ко всем номерам. Можно ли AsParallel как-то применить
 
Последнее редактирование:
Попробовал цикл:
Взятие номера из списка - поиск по номеру строки в таблице - добавление двух других колонок в переменные - добавление переменных в таблицу построчно
Такой цикл занимает много времени, можно ли как-то сразу добавить соответствующие колонки ко всем номерам. Можно ли AsParallel как-то применить
На больших объемах зенновские таблицы и списки очень медленные, поэтому лучше обходиться без больших манипуляций с ними.
Насчет вашей задачи, дальше подсказать тяжело, т.к. не ясны ньюансы, например, могут ли быть (хотябы теоретически) дубли номеров в 1 и/или во 2й таблице, какой формат таблиц, какой разделитель, какие допустимые символы, в каком формате пишутся номера, как часто надо делать поиск, какая таблица более статична и на сколько, сколько потоков пытаются проделать эту операцию одновременно и т.п.
 
Последнее редактирование:
На больших объемах зенновские таблицы и списки очень медленные, поэтому лучше обходиться без больших манипуляций с ними.
Насчет вашей задачи, дальше подсказать тяжело, т.к. не ясны ньюансы, например, могут ли быть (хотябы теоретически) дубли номеров в 1 и/или во 2й таблице, какой формат таблиц, какой разделитель, какие допустимые символы, в каком формате пишутся номера, как часто надо делать поиск, какая таблица более статична и на сколько, сколько потоков пытаются проделать эту операцию одновременно и т.п.
Нюансы
1 В рамках одной таблицы дублей нет, есть дубли в рамках двх таблиц
2 Формат таблиц xlsx
3 Разделитель стандартный
4 "какие допустимые символы" - не понял
5 номера в формате "число" как на скрине
6 поиск нужно делать раз в ден
7 статичны обе таблицы, что сравниваем
8 при работе в цикле у меня получилось выставить 15 потоков и ЦП сильно начал грузить, но я полюбому неправильно сделал. Должен быть метод специально предназначенный для быстрой проверки больших баз данных. Как я писал ранее я зацикливал поиск уже отфильтрованных номеров в исходной таблице(т.е поиск происходил построчно) может как-то AsParallel применить. Вообщем я хз, сложная задачка
 

Вложения

  • upload_2018-5-3_10-5-4.png
    upload_2018-5-3_10-5-4.png
    20,3 KB · Просмотры: 741

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