#mongodb #import
#mongodb #импорт
Вопрос:
У меня есть большой файл csv, который содержит более 30 миллионов строк. Мне нужно ежедневно загружать этот файл и определять, какие из строк изменились. К сожалению, нет уникального ключевого поля, но можно использовать четыре поля, чтобы сделать его уникальным. Как только я определю измененные строки, я захочу экспортировать данные. Я пытался использовать традиционное решение SQL Server, но производительность настолько низкая, что это не сработает. Поэтому я просматривал Mongodb — ему удалось импортировать файл примерно за 20 минут (и это нормально). Теперь у меня нет никакого опыта использования Monogdb и, что более важно, знания лучших практик. Итак, моя идея заключается в следующем:
-
Как одноразовый импорт данных в коллекцию с использованием mongoimport.
-
Скопируйте все уникальные идентификаторы, сгенерированные mongo, и поместите их в отдельную коллекцию.
-
Импортируйте новые данные в существующую коллекцию, используя поля upsert, которые должны создавать новый идентификатор для каждой новой и измененной строки.
-
Сравните «копию» с новой коллекцией, чтобы вывести список всех измененных строк.
-
Экспорт измененных данных.
Для меня это сработает, но я надеюсь, что есть гораздо лучший способ решить эту проблему.
Ответ №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, чтобы посмотреть, как она работает, это может быть именно то, что я ищу. Большое спасибо.