Плохая производительность для дедупликации 2 миллионов записей с использованием mapreduce в Appengine

У меня около 2 миллионов записей, в каждом из которых есть около 4 строковых полей, которые необходимо проверить на дублирование. Чтобы быть более конкретным, у меня есть имя, телефон, адрес и имя отца в качестве полей, и я должен проверить дедупликацию, используя все эти поля с остальными данными. Полученные уникальные записи необходимо записать в базу данных.

Я смог реализовать mapreduce, итерацию всех записей. Скорость задачи установлена ​​на 100 / с, а размер корзины - на 100. Биллинг включен.

В настоящее время все работает, но производительность очень низкая. Мне удалось выполнить обработку дедупликации только 1000 записей среди тестового набора данных из 10 000 записей за 6 часов.

Текущий дизайн в java:

  1. На каждой итерации карты я сравниваю текущую запись с предыдущая запись
  2. Предыдущая запись - это отдельная запись в БД, которая действует как глобальная переменная, которую я перезаписываю другой предыдущей записью на каждой карте итерация
  3. Сравнение выполняется с использованием алгоритма, и результат записывается как новый объект в db
  4. В конце одного задания Mapreduce я программно создаю другое job
  5. Предыдущая переменная записи помогает сравнивать задание со следующим запись-кандидат с остальными данными

Я готов увеличить любое количество ресурсов GAE, чтобы достичь этого в кратчайшие сроки.

Мои вопросы:

  1. Повлияет ли точность дедупликации (проверка дубликатов) из-за параллельные задания / задачи?
  2. Как можно улучшить этот дизайн?
  3. Будет ли это масштабироваться до 20 миллионов записей
  4. Какой самый быстрый способ чтения / записи переменных (не только счетчиков) во время итерации карты, которую можно использовать в одном задании по уменьшению карты.

Приглашаем вас помочь в этом фрилансерам.

Спасибо за вашу помощь.

5
задан charming30 21 July 2011 в 02:55
поделиться