Моя цель - создать быстрый, надежный и автоматизированный метод доступа к данным только для чтения, содержащимся в нескольких очень больших источниках данных в виде плоских файлов ( CSV, документы с фиксированной шириной и XML), с использованием Drupal 7, к которым можно обращаться с помощью Views 3. модуль. Я бы предпочел использовать уже имеющиеся модули, но также возможно создание собственного модуля.
Чтобы помочь исключить модули и методы, не подходящие для этой задачи, вот статистика по файлам, с которыми я работаю:
- Годовой импорт: 8 500 000 строк файла CSV . (Чистится и перезагружается ежегодно. Имеет первичный ключ.)
- Еженедельный импорт: файл с фиксированной шириной 350 000 строк. (Чистится и перезагружается еженедельно. Нет первичного ключа .)
- Почасовой импорт: 3400 строк CSV- файла. (Хотел бы обновлять и синхронизировать как можно чаще, но не чаще, чем каждые 20 мин. Имеет первичный ключ)
- Ежедневный импорт: 200 элементов XML-файла. (Очищается и перезагружается ежедневно. Имеет первичный ключ)
Преобразование между этими тремя форматами не является проблемой и может быть выполнено, если это улучшит производительность импорта или позволит сделать лучшие инструменты доступными. ( AWK для фиксированной ширины в CSV и т. Д.) Автоматизация поиска и преобразования проста с помощью сценариев cron и sh , но все же необходимо автоматизировать интеграцию с Drupal 7. Использование пользовательских таблиц также возможно, если vews может ссылаться на данные, используя отношения.
Какова была бы наилучшая практика для интеграции этого типа данных с Drupal 7? Кроме того, я пропускаю какие-либо важные детали относительно данных или что я пытаюсь достичь?
Вот несколько проектов, которые я сейчас ищу, чтобы найти решение. Я хотел бы подробнее остановиться на этом, чтобы помочь другим решить, какой маршрут выбрать при работе с большими объемами импорта данных.
Импорт данных в узлы:
- Feeds (в настоящее время Alpha для D7)
Ленты будут импортировать данные надежно. Скорость приемлема для небольших источников данных, но слишком медленная для таблиц 300k +.
Автоматизация доступна с использованием cron и Job Scheduler (в настоящее время Alpha для D7).
Отсутствие индекса или уникального ключа в исходных данных затрудняет использование. Это быстрее, чем фиды, но все же медленно импортирует очень большие таблицы.
Автоматизация доступна через drush и cron.
Пользовательские таблицы вместо узлов
- Модуль данных (в настоящее время Alpha для D7)
Модуль Data выглядит очень многообещающе, но на данный момент он очень глючит для D7. Требования к автоматизации и скорости импорта могут быть легко выполнены с использованием данных, но их надежность недостаточна. Интеграция просмотров (ссылка на D6) выглядит очень перспективным.
- Мастер таблиц (Недоступно для D7)
Добавил это для справки. На данный момент нет кандидата в D7, но он может служить отправной точкой для пользовательского модуля.
- Схема видов (Заброшенный, только D6)
Добавил это для справки. Кажется, это было поглощено Table Wizard в Drupal 6. Опять же, добавлено только для справки.
- Импортер (RC2 для D7)
Кажется, требуется Мастер таблиц (только D6) для Views интеграции. Добавлено для справки, но не соответствует требованию Views.
@MPD - Добавлены «Пользовательские таблицы» в качестве возможного решения и расширены модули. Спасибо за это дополнение.
источник
Я думаю, что подход, основанный на узлах (или даже объектах), сожжет ваш сервер миллионами узлов. Кроме того, если посмотреть на ваш почасовой импорт, это означает, что вы будете делать node_save () хотя бы раз в секунду. Это слишком много для Drupal и вызывает проблемы с производительностью.
Причина этого в том, что для этого контента вам не понадобится какой-либо механизм подключения, вам не понадобится pathauto (но вы можете создать псевдоним вручную, он намного дешевле, чем pathauto), вам не понадобятся поля ... простой запрос "INSERT" в 100 раз быстрее, чем node_save () или entity_save ().
1 / IMHO, лучшим вариантом является пользовательская таблица и пользовательский модуль для импорта данных, а затем написать обработчики Views для интеграции с Drupal.
2 / Кэш базы данных недействителен во время почасового импорта. Если это занимает слишком много времени, вы можете подумать о репликации. В простейшей форме создайте две идентичные таблицы, используйте первую, импортируйте во вторую, переключите свою конфигурацию Drupal для использования второй таблицы, синхронизируйте 2-ю таблицу с 1-й (а затем при необходимости переключитесь обратно на первую). Другое решение заключается в вашем пользовательском сценарии импорта, подготовьте и сгруппируйте запросы INSERT / UPDATE, а затем отправьте его только в конце за одну транзакцию, чтобы сократить время записи в базу данных.
источник