Импорт и расшифровка измененных строк в Mongodb

#mongodb #import

#mongodb #импорт

Вопрос:

У меня есть большой файл csv, который содержит более 30 миллионов строк. Мне нужно ежедневно загружать этот файл и определять, какие из строк изменились. К сожалению, нет уникального ключевого поля, но можно использовать четыре поля, чтобы сделать его уникальным. Как только я определю измененные строки, я захочу экспортировать данные. Я пытался использовать традиционное решение SQL Server, но производительность настолько низкая, что это не сработает. Поэтому я просматривал Mongodb — ему удалось импортировать файл примерно за 20 минут (и это нормально). Теперь у меня нет никакого опыта использования Monogdb и, что более важно, знания лучших практик. Итак, моя идея заключается в следующем:

  1. Как одноразовый импорт данных в коллекцию с использованием mongoimport.

  2. Скопируйте все уникальные идентификаторы, сгенерированные mongo, и поместите их в отдельную коллекцию.

  3. Импортируйте новые данные в существующую коллекцию, используя поля upsert, которые должны создавать новый идентификатор для каждой новой и измененной строки.

  4. Сравните «копию» с новой коллекцией, чтобы вывести список всех измененных строк.

  5. Экспорт измененных данных.

Для меня это сработает, но я надеюсь, что есть гораздо лучший способ решить эту проблему.

Ответ №1:

Используйте unix sort и diff.

Сортировка файла на диске

 sort -o new_file.csv -t ',' big_file.csv
sort -o old_file.csv -t ',' yesterday.csv

diff new_file.csv old_file.csv
  

Командам может потребоваться некоторая настройка.

Вы также можете использовать mysql для импорта файла через

http://dev.mysql.com/doc/refman/5.1/en/load-data.html (ЗАГРУЗИТЬ ФАЙЛ)

а затем создайте КЛЮЧ (или первичный ключ) для 4 полей.

Затем загрузите вчерашний файл в другую таблицу, а затем используйте 2 инструкции sql для сравнения файлов…

Но diff будет работать лучше всего!

-даниэль

Комментарии:

1. Я обязательно дам команду diff, чтобы посмотреть, как она работает, это может быть именно то, что я ищу. Большое спасибо.