Сравните две большие данные — 20 миллионов продуктов

Я хочу сравнить две базы данных продуктов на основе названия,

По моим первым данным это около 3 миллионов, из которых я хочу сравнить, а по вторым данным — 10 миллионов, я делаю это потому, что удаляю дубликаты продуктов.

Я попробовал это с помощью программы написания запросов MySQL на PHP, которая проверяет title (name = ‘$ name’), если данные возвращают ноль, поэтому они будут уникальными, но это довольно медленно 2 секунды на результат.

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

Как лучше сравнивать большие данные, чтобы узнать уникальные продукты?

Таблица DDL:

CREATE TABLE main ( id int(11) NOT NULL AUTO_INCREMENT,
name text,
image text, price int(11) DEFAULT NULL,
store_link text,
status int(11) NOT NULL,
cat text NOT NULL,
store_single text,
brand text,
imagestatus int(11) DEFAULT NULL,
time text,
PRIMARY KEY (id) )
ENGINE=InnoDB AUTO_INCREMENT=9250887
DEFAULT CHARSET=latin1;

0

Решение

Так как вы должны пройти более 10 миллионов титров в 3 миллиона раз, это займет некоторое время. Мой подход заключается в том, чтобы посмотреть, сможете ли вы получить все заголовки из обоих списков в скрипте php. Тогда сравните их там в памяти. Пусть скрипт создаст операторы удаления в текстовый файл, который вы затем выполните в БД.

Не в вашем вопросе, но, вероятно, у вас следующая проблема: различные варианты написания видят

   similar_text()
soundex()
levenshtein()

за некоторую помощь с этим.

1

Другие решения

На мой взгляд, для этого и создана база данных. Я бы не стал изобретать велосипед в твоих туфлях.

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

0

Я использую SQLyog сравнить базы данных около 1-2 миллионов данных. Это дает возможность дляОдносторонняя синхронизация«»Двусторонняя синхронизация» а также «Визуально объединить данные«синхронизировать базы данных.

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

0

  1. Если ваша БД поддерживает это, используйте левое соединение и фильтруйте строки, где правая сторона не равна нулю. Но сначала создайте индексы с вашими ключами в обеих таблицах (имя столбца).
  2. Если память вашего компьютера / сервера поддерживает загрузку в память 3 миллионов объектов HashSet, создайте HashSet, используя NAME в качестве ключа, а затем прочитайте один за другим другой набор (10 миллионов объектов) и проверьте, существует ли объект. в HashSet. Если он существует, то он дублируется. (Я хочу предложить сбросить данные в текстовые файлы, а затем прочитать файлы, чтобы создать структуру)
  3. Если предыдущие стратегии потерпели неудачу, то пришло время реализовать какой-то MapReduce. Вы можете реализовать это по сравнению с одним из предыдущих подходов к подмножеству ваших данных. Например,
    сравнивая все продукты, которые начинаются с какой-то буквы.
0