Господа, посоветуйте как лучше создавать БД.
Есть 5 баз данных которые нужно залить на сайт. Все очень похожи, но из разных источников. Формат csv, в каждой порядка 20-30 тысяч строк. Заливаться будут посредством Feeds. Одну из них, вернее 6-ю залил (она отличается от остальных полностью), в принципе полет нормальный на локальном компе, но поиск притормаживает. Хотя на локальном друпал тормозит в принципе.
В общем поля во всех практически одинаковые:
ID - отличаются во всех базах и нельзя связать id одной базы с названием организации другой
Название организации - в одной базе может быть например ООО "Веселые ребята", в другой Общество с ограниченной ответственностью "Веселые ребята"
Адрес - тоже что и выше
Контакты - тоже
№ - все номера разные в разных таблицах, и должны быть разные - из-за этих номеров и весь сыр-бор
и т.д.
Т.е если делать грамотную таблицу, то должно быть примерно так
ID | Название организации | Адрес | Контакты | №(1) | №(2) | №(3) | №(4) | №(5) |
и заполняться должно так:
123 | ООО "Веселые ребята" | г. Тула... | 1234534 | 87663 | 35463 | 8752 | 75665 | 54323 |
Но будет так, потому что все базы ведутся в разных местах и на разном софте - к нам будут присылаться файлы csv или экзель:
123 | ООО "Веселые ребята" | г. Тула... | 1234534 | 87663 | | | | |
124 | Общество с ограни... | Тула, пр.. | 1234534 | | 35463 | | | |
Обновляться все это будет раз в месяц, но возможно и еженедельно
Я вижу варианты такие:
1. Делать один тип материала и импортировать в него все файлы. Добавить поле "тип" через которое их можно будет сортировать (1,2,3,4,5). Добавить эту колонку в файл csv не проблема перед импортом. Но тут может быть проблема: для нормального обновления данных в модуле feeds необходимо уникальное поле - я ставил ID - GUID (что такое GUID я не знаю и нигде не могу найти по нему информацию) Уникальным кроме того можно сделать еще ID материала, но тут могут вылезти проблемы вообще крутые. Проблемы могут быть в том, что например в базе 1 ID 1234567 будет одно предприятие, а в базе 2 ID 1234567 будет другое. т.е. и при обновлении из одного файла обновится совершенно другое поле.
2. Делать для каждой базы разный тип и различные поля ID, №, но поля Название организации, Адрес выбирать из существующего поля в cck тогда я думаю проблем с ID - GUID не возникнет. Тем более импортироваться будет все в разные типы материалов.
3. Все разное - и тип материала и поля.
Меня вообще-то смущает сам принцип работы CCK - т.е. каждое новое поле хранится в отдельной таблице в базе. Я не специалист в этом вопросе, но мне кажется быстрее будет работать если при просмотре материала на сайте информация будет браться из одной таблицы а не 5-6.
В первом случае таблиц создается меньше всего, но по размеру они будут больше, строк 100 - 150 тыщ. в каждой.
Во втором немного больше, но в некоторых таблицах 20-30 тыщ, в некоторых 100 - 150 тыщ.
В третьем офигенная куча таблиц, но в каждой 20-30 тыщ записей.
Ну вот, все расписал и как то самому понятнее стало. Хочу дополнить только, что импортируется файл с 22000 строк очень медленно и иногда вылетает с ошибками. Но обновляется намного быстрее благодаря модулю feeds_fetcher_directory - он сравнивает файлы и грузит только то, что изменилось и новое.
Посоветуйте как лучше поступить? И что такое этот GUID?
Комментарии
И так никто и не поделится опытом?
GUID - это уникальный номер. Его разрядность настолько велика, что вероятностью совпадения при генерации случайного GUID можно пренебречь. Если по вашему первому варианту идти, то GUID должны будут генерироваться тем софтом, который создает в итоге csv.
Когда Feeds импортирует данные, он для каждой строки из файла берет выбранный Вами ключ и ищет его по базе. Если находит - обновляет найденную запись данными из строки. Если не находит - добавляет новую запись.
Я бы порекомендовал сливать все данные в один материал, но добавить еще один ключ - номер исходной базы. В ваши CSV файлы этот номер надо будет добавлять перед импортом (в начало первой строки - заголовок столбца, в начало всех остальных строк - номер базы и запятую). Модулю Feeds надо указать, что проверка должна происходить по двум полям - номеру базы и ID организации в ней. Как бонус - будете знать, из какой базы найденная инфа.