Вы здесь

Синхронизация пользователей сайта из сторонней базы данных Oracle

Статус: 
Активный
Прикрепленные файлы
Контактные данные: 

strelkovandrey@hotmail.com

Небольшое ТЗ:

Имеется набор сайтов Drupal внутри интранета, количество которых будут расти.
И имеется база данных Oracle в той же сети, в данной базе в различных схемах расположена различная информация о сотрудниках, но для удобства создано представление которого формирует одну таблицу со
всеми данными о сотрудниках (также имеется служебная схема/юзер в базе для подключения к ней и получения данных из вьюхи), примерно следующего вида

login email personnel_number fullname phone ...
ivan ivan@mail.ru 00001 Петров Иван 1-23-45 ...
petr petr@mail.ru 00002 Иванов Петр 6-78-90 ...
mihail mihail@mail.ru 00003 Сидоров Михаил 2-34-56 ...
... ... ... ... ... ...

колонок информации примерно 10 штук, практически все они просто текстовые, за исключением 2ух штук (не отображены в примере) которые имеют значение либо 1 либо 0 (логические для Drupal сайта)
строк в представлении, т.е. количество сотрудников примерно 10 000 - 12 000 человек.

Всех сотрудников нужно иметь как пользователей на сайтах Drupal, т.е. другими словами их нужно импортировать в сущности user на сайте, но не разово а на постоянной основе и без участия человека, другими словами получается сначала будет импорт, а далее уже синхронизация, т.е. по большему счету уже обновление имеющихся (на случай сменных данных у родителя). Если же у родителя появляется новая запись, она при очередной синхронизации должна создаться как новая сущность.

login и email это стандартные поля Drupal-а, однако в ходе работы сотрудников, они могут сменить Фамилию, в результате чего сменится логин так и email (логин и email представляет собой фамилию грубо говоря)
Потому для синхронизации нужно использовать personnel_number (он же табельный номер) который НИКОГДА не меняется и не занимается никем больше, при оформлении сотрудника ему присваивается этот номер, и он с ним навсегда)

Запуск синхронизации будет производить веб-сервер по своему расписанию, получается модуль синхронизации должен запускаться по определенному адресу, например users/start-synch

Т.к. количество сотрудников большое, то синхронизацию нужно выполнять пачками, например выдавать им по 10,20 или 30 секунда за операцию (сколько нужно на самом деле - покажет опыт, но по факту нужно уложиться так, чтобы за 1 час круг синхронизации всех сотрудников успел пройти, а именно например если за 30 секунд модуль успевает примерно обработать 1000 сотрудников, то за час он веб-сервером должен быть запущен 12 раз, т.е. каждые 5 минут). Весь процесс получается нужно сделать с помощью очередей Drupal-а (Queue API).

Также модуль в момент установки должен сам создать нужный набор полей в сущности пользователя, чтобы не создавать их ручками при создании очередного сайта.