Какие схемы тегов являются наиболее эффективными? - PullRequest
34 голосов
/ 28 февраля 2009

http://tagging.pui.ch/post/37027745720/tags-database-schemas

Обработка тегов в Stackoverflow - одна из лучших, которые я когда-либо видел.

Кто-нибудь знает, если это схема схемы, из которой я мог бы получить некоторые идеи?

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

Ответы [ 2 ]

18 голосов
/ 28 февраля 2009

Все зависит от объемов данных и содержания, а также от отношения распределения тегов и плотности

Если у вас низкий коэффициент распределения и плотности тегов (типичные данные, созданные человеком), вы можете просто сгенерировать уникальный идентификатор или хэш для каждого возможного набора тегов, используемых данными. Свяжите идентификатор «коллекции тегов» с каждым экземпляром данных с этими тегами

Это может работать на удивление хорошо для многих форм сгенерированных человеком данных

например. Stackoverflow содержит ~ 500 000 вопросов и ~ 20 000 тегов (слишком много тегов дублирования!). Большинство вопросов имеют менее пяти тегов. В худшем случае у вас будет 500 000 идентификаторов «коллекции тегов», но более реалистично - несколько тысяч

Вам также потребуется либо отслеживание экземпляра, либо сборка мусора в коллекции «тэгов», так как определенные комбинации тэгов выходят из употребления

, например

  • Tag: id, tagName
  • TagCollection: id, instanceCount
  • TagCollectionTag: tagCollectionIId, tagId
  • Данные: id, title, content, tagCollectionId

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

Поиск быстрый; поиск TagCollectionTag для экземпляров, содержащих определенный набор тегов, а затем найти строки данных с любым из этих tagCollectionId

Надеюсь, это не слишком смущает: -)

4 голосов
/ 28 февраля 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...