представляя отношения многие ко многим в couchDB

Позволять'скажи яЯ пишу приложение для анализа журналов. Основным объектом домена будет LogEntry. К тому же. пользователи приложения определяют LogTopic, который описывает, какие записи журнала им интересны. Когда приложение получает записи журнала, оно добавляет их в couchDB, а также проверяет их по всем LogTopics в системе, чтобы увидеть, соответствуют ли они критериям в теме , Если это так, то система должна записать, что запись соответствует теме. Таким образом, между LogEntries и LogTopics существует отношение «многие ко многим».

Если бы я хранил это в РСУБД, я бы сделал что-то вроде:

CREATE TABLE Entry (
 id int,
 ...
)

CREATE TABLE Topic (
 id int,
 ...
)

CREATE TABLE TopicEntryMap (
 entry_id int,
 topic_id int
)

Используя CouchDB, я сначала попробовал использовать только два типа документов. Я'иметь тип LogEntry, выглядит примерно так:

{
  'type': 'LogEntry',
  'severity': 'DEBUG',
  ...
}

и я'иметь тип LogTopic, выглядит примерно так:

{
  'type': 'LogTopic',
  'matching_entries': ['log_entry_1','log_entry_12','log_entry_34',....],
  ...
}

Вы можете видеть, что я представляю отношения, используяmatching_entries поле в каждом документе LogTopic для хранения списка идентификаторов документов LogEntry. Это работает хорошо до некоторой степени, но у меня есть проблемы, когда несколько клиентов пытаются добавить соответствующую запись в тему. Обе пытаются выполнить оптимистичные обновления, а одна не удается. Решение, которое яТеперь я хочу воспроизвести подход RDBMS и добавить третий тип документа, например:

{
  'type':'LogTopicToLogEntryMap',
  'topic_id':'topic_12',
  'entry_id':'entry_15'
}

Это работает, и устраняет параллельные проблемы обновления, но у меня есть две оговорки:

Я волнуюсь, что яЯ просто использую этот подход, потому что эточто ябуду делать в реляционной БД. Интересно, есть лиЭто более приятное (расслабляющее?) решение.Мои представления больше не могут получить все записи по определенной теме за один вызов. Мое предыдущее решение позволило это (если я использовал параметр include_docs).

У кого-нибудь есть лучшее решение для меня? Поможет ли мне, если я также разместил мнения, которые яя использую?

Ответы на вопрос(3)

Ваш ответ на вопрос