Нечеткое совпадение многопоточных баз данных - PullRequest
0 голосов
/ 22 мая 2019

Проблема: У меня огромная база данных с пользователями и много дубликатов (25 миллионов записей). Мне нужно найти эти дубликаты и записать их в новую таблицу поиска (я использую SQL)

Так, например:

Ниже приведен список по: имя , фамилия , доб , идентификатор

User1: Джон _ Доу _ 1987/02/13 _ 12

Пользователь2: Джон _ Доу _ 1987/02/13 _32

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

Если dob совпадает, а имя и фамилия успешны с нечетким совпадением, предполагается, что это тот же пользователь.

Мое предлагаемое решение: Поскольку dob должен быть одинаковым, чтобы предположить, что это один и тот же человек, я создаю меньшие индексы из основного db, разбивая его следующим образом: я начинаю с самого низкого года и первого месяца и даю это первому потоку для соответствия , а затем просто напишите в файл .csv, который будет моей таблицей поиска. Поэтому каждый следующий месяц я даю следующую ветку, пока они все не будут заняты. Затем, когда все сделано, просто двигайтесь дальше.

Мои вопросы:

  1. Учитывая ситуацию и мое решение, есть ли где-нибудь в этом решении серьезное узкое место?

  2. Можно ли это как-то оптимизировать для лучшей работы? Например. Вместо того чтобы строить новый индекс, мне лучше искать массив, в котором хранятся данные?

  3. Какой язык программирования подойдет лучше всего? Я думал о Python, но почему-то помню / чувствую, что это не самое быстрое решение? Я тоже рассматриваю C #?

  4. Есть ли что-то еще, что может помочь в этом, кроме многопоточности?

  5. Есть ли дополнительный совет для этого? Что-то, что я упустил из виду или не подумал? Просто лучшее из возможных решений для этого?

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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...