Собираюсь написать веб-интерфейс к Dansguardian, но на этапе разработки структуры базы данных и написания пробных скриптов столкнулся с некоторыми трудностями.
Принцип я задумал примерно такой.
Изначально есть базы сайтов, фраз, регулярных выражений и др.
для каждой группы можно подключать разные категории фраз-сайтов, определять расширения файлов и т.п. и многое другое.
также для групп доступны отдельные списки сайтов
Все это хранится в базе, и специальная программа формирует списки прямо из базы.
Так собственно о трудностях.
1. Добавление групп хоть и возможно прямо в интерфейсе, но это ведет к неизбежному усложнению структуры базы так как это связано с большой разветвленностью конфигов.
вдобавок невозможно удалить группу находящуюся в середине,так как нужно менять порядковые номера групп, а следовательно использовать ID групп для статистики станет невозможно.
Есть решение конечно задавать количество групп постоянным на уровне установки базы данных, но изменить его потом будет очень проблематично, да и какое количество считать оптимальным для большинства.
2. Так как многие списки достаточно внушительных размеров, то необходимо обеспечить в них поиск и удобный вывод, потому что в SAMS например уже при 300 сайтах в списках работать уже проблемно, во первых когда на страницу вываливается форма монстр из 100-500 элементов, сам поиск уже не простой вдобавок такую форму обработать и передать в некоторых случаях не всегда просто.
Понятно что нужно что-то типа каталога, я пересмотрел исходные коды более 100 каталогов ссылок, но не нашел ничего интересного, чтобы было просто для понимания и достаточно эффективно, многие каталоги написаны на PHP4 и используют глобальные переменные что неприемлемо для меня, те которые работают напичканы дополнительными функциями по самое не хочу.
В результате придется писать что-то свое. но хотелось чтобы высказали свое мнение относительно вида интерфейса такого каталога, так как то что я уже видел не пригодно для эффективной работы.
3. По поводу формирования списков из базы, надо каким-то образом отслеживать изменения в базе, можно конечно создать таблицу с полями изменений и перечитывать только те таблицы которые в ней указаны. Но опять с какой периодичностью это делать, и насколько это вообще разумно выглядит, поскольку большинство запросов к базе будет впустую.
4. Стоит ли хранить журналы в базе.
Насколько разумен такой подход или все же лучше работать прямо с текстовыми конфигами не используя базу, но тогда вопросы безопасности стоят еще более остро.