Ответы пользователя по тегу Базы данных
  • Создание теговой системы

    @DenKrep
    1) Извиняюсь, ошибся. Я не на хабре эту статью видел. Вот здесь была она: dou.ua/lenta/articles/suggester/
    2) Да, MapReduce имеет как следствие полный перебор источника данных. Это один из недостатков. Но действительно ли вам нужна технология основанная map-reduce? Есть большие сомнения.
    3) 100 ГБ это не очень большая база на сегодняшний день, скажем откровенно. Бывают базы-справочники (MDM) в десятки раз больше. Тем более если вы в базе храните сами документы, то это может быть даже мало.
    3.1) Сколько строк планируется в таблице (списке) статей.
    3.2) Сколько уникальных тегов ожидаете
    3.3) Сколько, в среднем, к одной статье привязано тегов?
    Если ответ — миллионы / десятки миллионов, то рядовая реляционка спокойно потянет ваши запросы за доли секунд.
    4) Статей — множество. Описаний алгоритмов индексации — тоже. Один из примеров — ссылка в п.1 этого сообщения. Но уверенны что хотите изобретать велосипед и хотите самостоятельно создавать такой индекс?
    5) PS: кстати, если вам нужно будет индексировать сами документы, то тут уже стоит посмотреть на какие-нибудь продукты основанные на Lucene (Solr, elastic search, ...). Но это уже совсем другая песня :)
    Ответ написан
  • Создание теговой системы

    @DenKrep
    Насколько большой объём данных? Какие-то специфические требования к систему есть? Т.к. если нету каких-то особенных требований, но, судя по задаче, уже есть некоторая БД, где это уже хранится, то просто введение таблицы связки (многие ко многим между таблицами постов и тегов) позволит реализовывать то, что вы хотите.Если, конечно, сейчас оно хранится в реляционной БД. Если сейчас ваши посты хранятся в парах ключ-значение, то можете почитать про прямые и обратные индексы:
    По сути хранить с постами список тегов (или указателей для оптимизации), к которым принадлежит статья, а также хранить теги у которых храним статьи которые к ним принадлежат типа так:
    posts (
    {post1: tags [1,2]};
    {post2: tags[2,3]}
    )
    tags(
    {tag1: posts[1]}
    {tag2: posts[1,2]}
    {tag3: posts[2]}
    )
    При выполнении поискового запроса вам останется только найти пересечения множеств из выбранных тегов.
    Ответ написан