Нужен совет по архитектуре сайта на D7

Главные вкладки

Аватар пользователя petrovnn petrovnn 7 июля 2011 в 22:07

Прошу помочь определиться со структурой и подходами в реализации на новой версии сайта.

Есть сайт, который сейчас работает на D6.

Во время реализации новой версии на семерке столкнулся с несколькими вопросами, касающимися архитектуры БД и вообще структуры сайта.

Прежде чем задать вопрос, объясню немного контекст.

Основная идея сайта состоит в том чтобы собирать и рейтинговать интересные места, найденные на карте гугла. Со временем определилась побочная, взаимодополняющая функция - каталог городов, регионов и стран.

Каждое место может находится в каком-то городе, в каком-то регионе (область, штат) и стране. Ничего более логичного, чем приспособить для этих целей таксономию - не придумал.

В текущей версии я размечаю географическую принадлежность места тремя словарями: города, регионы и страны. Но ссылки идут не на страницу термина таксономии, а на ноду, у которой название такое-же, как у термина. Для этого я делаю несколько простых запросов, которые ищут ноды, названия которых совпадают с названием терминов.

Для наглядности, страница останкинской башни, и форма ее редактирования:

Но т.к. семерка позволяет крепить к терминам любые поля, и превращать их в полноценные контентные страницы, пришла мысль сделать их не нодами а терминами.

Почему мне пришла такая мысль? Потому что размечать материалы тэгами, а вместо них подсовывать ноды у меня вызывает ощущение «обмана системы».

Вопрос у меня возникает лишь в производительности - не упадет-ли она, если в словаре города (или населенные пункты) будет много терминов. Много это ориентировочно от 5 000 - 10 000 штук. Все словари у меня плоские - без вложенностей. Читал тут не раз что возникают проблемы с прозиводительностью при больших древовидных словарях в шестерке. Но я делаю на семерке, кроме того у меня они не древовидные.

На сколько терминов рассчитана таксономия в друпале вообще? Как лучше поступить понимая что есть path_alias-ы, которые тоже делают запросы (не знаю как с ними в семерке); и что нужно учитывать при разработке сайта на семерке с большим количеством алиасов?

Подходит-ли страница термина для того чтобы оформлять и работать с ней как с контентной страницей: крепить поля, комментарии, файлы, создавать много таких страниц; или она в основном предназначена для того чтобы на ней выводить список нод, маркированных данным тэгом? Спрашивая «подходит-ли» я имею ввиду не формальный ворпос «можно сделать или нет», как спрашивают не особо запаренные пиплы «можно-ли сделать каталог недвижимости на друпале?» или что-то в этом духе; а вопрос практический - насколько это решение может быть жизнеспособным и производительным при больших количествах таких страниц, и особенно каково лучше или хуже в плане производительностью по сравнению с нодами.

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

В самом сложном случае, страница города должна иметь такие поля:

Население (строка)
Положение: Регион (словарь)
Положение: Страна (словарь)
Иконка (файл)
Описание (текстовое поле)
Комментарии

Или ткните плз в статью, где подобные вопросы обсуждались, если таковые есть.

Прототип на фреймбоксе: http://framebox.org/bMV

На прототипе: каждая колонка это отдельная страница

ВложениеРазмер
Иконка изображения bestmaps_prototype.png283.69 КБ
Иконка изображения ostankino_edit_3.png282.85 КБ

Комментарии

Аватар пользователя Orion76 Orion76 8 июля 2011 в 0:55

Как же проще объяснить то... Термины "многое-к-одному" Вам что-нибудь говорит?
Если коротко... то если словари таксономии не древовидные, то от выборки нод, принадлежащих словарю производительность сильно не пострадает. Если у термина будет много полей, то при выборке нод, принадлежащих этому термину, производительность сильно не пострадает. А если вам надо выбрать несколько десятком терминов и по ним выбрать принадлежащие им ноды, здесь нагрузка будет посильнее... но еще не факт, что сервер ее не осилит...

Короче все зависит от конкретной задачи, что нужно выбирать.
Если производительность критична... проще не таксономию использовать, а собственную Сущность...

Аватар пользователя petrovnn petrovnn 14 июля 2011 в 20:01

"orion76" wrote:
Термины "многое-к-одному" Вам что-нибудь говорит?

Мне кажется, что я понимаю суть этого термина. Суть можно передать примером, когда есть список книг, и список авторов. Каждый автор может написать одну или больше книг; в то-же время каждая книга может иметь одного или более авторов. Создается третья таблица, хранящая id пары "автор-книга". Верно?

"orion76" wrote:
А если вам надо выбрать несколько десятком терминов и по ним выбрать принадлежащие им ноды, здесь нагрузка будет посильнее...

Этого не требуется

Причина, по которой я начал задумываться о том, чтобы сделать страны регионы и города терминами, заключается в том, что при попытке отсортировать страны не по алфавиту, а по количеству добавленных в них мест, столкнулся с непреодолимыми проблемами при построении запросов. Мне нужно было перемножить таблицу нод саму на себя, при этом сделав GROUP BY и COUNT(), что впринципе я понял невозможно, или я просто не знаю как это сделать.

Если-бы страны и места были в разных таблицах, я-бы это сделал легко, на других проектах прибегал к таким запросам не раз.

Если скорость вывода зависит от количества запросов (я рендерю своими модулями/запросами); то насколько быстро будет ворочаться админка, при больших словарях - мне не понятно.