7 миллионов файлов для загрузки - какие-нибудь подводные камни?

0

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

cd /datafiles
for f in $(find /datafiles -type f); do
    echo $f
    mysql -h <myhost> -u <myuser> --password=<myuserpassword <mydb> -e "LOAD DATA LOCAL INFILE '${f}' INTO TABLE <mytable> ignore 1 lines"
done

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

CSV с разделителями по трубе (6 полей) - это в основном данные кликов. В среднем количество записей в файле составляет около 50 записей, но оно может достигать 7000 и меньше 1.

Размер файлов составляет от 50 до 800 Кбайт. На моем сервере выделено 64 ГБ памяти.

Поскольку DBA отказывается предоставить мне объединить все файлы в один файл слияния (что-то делать с использованием кэша db), у меня нет выбора.

Будут ли я сталкиваться с проблемами памяти? Мой сервер находится в Google Cloud. Каковы возможные проблемы, связанные с этим?

  • 1
    поскольку мы не знаем, насколько велики ваши файлы на самом деле или сколько памяти выделено для этого вашим сервером, сказать немного сложно
  • 0
    7 миллионов файлов. Ты уверен?
Показать ещё 10 комментариев
Теги:

1 ответ

1

Когда я закончил, я переместил файл в папку "done". И остановитесь при любой ошибке. Что-то вроде:

#!/bin/bash -e

cd datafiles
mkdir ../done

for f in $(find . -type f); do
    echo $f
    mysql -h <myhost> -u <myuser> --password=<myuserpassword <mydb> -e "LOAD DATA LOCAL INFILE '${f}' INTO TABLE <mytable> ignore 1 lines"
    mv $f ../done/
done

cd ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню