Текущее состояние
- Приложение .NET 4.0 (WPF)
- База данных: SQLCE
- Таблицы (упрощенно): Документы, Теги, ДокументыТеги [n:n]
- примерно 2000 документов и 600 тегов (теги могут быть назначены нескольким документам)
- теги = ключевые слова = ярлыки
Дело
У пользователя есть большая база данных документов, которую он может фильтровать с помощью облака тегов. Теги отображают имя (само имя тега) и число, которое представляет собой общее количество документов с соответствующим тегом. Если пользователь выбирает тег, отображаются только документы с выбранным тегом. Облако динамических тегов теперь должно отображать только доступные теги в отфильтрованных документах с обновленным номером счетчика.
Проблема
Это медленно. После каждого выбранного тега нам нужно снова оценить все документы, чтобы подсчитать теги. Сейчас мы делаем это рекурсивно, поэтому проверяем каждый документ, какие у него теги. Ищем другое решение (кеширование, лучший алгоритм, ваша идея?).
Сходства
stackoverflow, del.icio.us также имеют облака тегов. Проверьте себя. Как они это делают? Я знаю, что хранимые процедуры были бы решением, но, по словам нашего разработчика базы данных, они недоступны в SQLCE.