Схема тегов для CouchDB. Это сработает?

Мне интересно, подойдет ли CouchDB следующий сценарий? Я создаю веб-приложение для карточек. Пользователи могут создавать карточки (с одной стороны вопрос, с другой - ответ). Авторы карточек и другие пользователи могут помечать карточки ключевыми словами / фразами. Пользователи могут извлекать / создавать виртуальные стопки карточек на основе тегов, включая поддержку логического поиска (tagA И tagB НЕ tagC OR tagD). БД будет хранить карты (очевидно), но также и «документы» для пользователей, теги и потенциально виртуальные стопки карт. Я прочитал другие SO-вопросы, касающиеся тегов в CouchDB, но мне интересно, будет ли следующее работать или будет использоваться для интенсивной записи… (1) документы карт содержат массив строк тегов JSON, назначенных этой карте, (2) документы тегов содержат массив карт JSON с использованием тега (3) документы тегов также имеют элемент для хранения количества карт, использующих этот тег, (4) всякий раз, когда создается новая карта или тег добавляется к карте, связанный идентификатор карты также добавляется в документ тега и элемент CardCount документа тега увеличивается. (5) Генерируются постоянные просмотры карт, проиндексированных по идентификатору карты, и тегов, проиндексированных по строке тегов. Если я знаю идентификатор карты, я могу быстро найти документ и быстро получить список связанных тегов. Если мне дается строка тега, я могу быстро найти документ тега, а затем получить список идентификаторов карт с помощью тега. Для более сложного логического поиска я могу получить список идентификаторов карт для каждого тега в логическом поиске, а затем вычислить объединение / пересечение и т. Д. Этих наборов на клиенте. Это кажется разумным? Мне известно о возможности полнотекстового индексирования с помощью Lucene, но я бы хотел избежать этого, если это возможно. Спасибо.


person Blech    schedule 18.10.2010    source источник


Ответы (1)


Я не вижу веских причин усложнять вещи - просто создайте документ для каждой карточки и добавляйте теги к этим документам по мере продвижения. Создайте несколько сохраненных представлений для подсчета / отображения тегов и количества их использования, когда вам это нужно.

таким образом вам понадобятся только:

карточный документ:

теги вопросов и ответов []

Просмотры:

показывать информацию о карточках показывать (возможно, самые популярные) теги показывать карточки по тегу

Если ваши документы правильно структурированы, вам не понадобится полнотекстовый поиск, чтобы справиться со всем.

person abolotnov    schedule 23.11.2010