representando um relacionamento muitos-para-muitos em couchDB

Digamos que eu esteja escrevendo um aplicativo de análise de log. O objeto de domínio principal seria um LogEntry. Além do que, além do mais. Os usuários do aplicativo definem um LogTopic que descreve em quais entradas de log eles estão interessados. À medida que o aplicativo recebe entradas de log, ele as adiciona ao couchDB e também as verifica em todos os LogTopics no sistema para ver se eles correspondem aos critérios do tópico. . Se isso acontecer, o sistema deve registrar que a entrada corresponde ao tópico. Portanto, há um relacionamento muitos-para-muitos entre LogEntries e LogTopics.

Se eu estivesse armazenando isso em um RDBMS, faria algo como:

CREATE TABLE Entry (
 id int,
 ...
)

CREATE TABLE Topic (
 id int,
 ...
)

CREATE TABLE TopicEntryMap (
 entry_id int,
 topic_id int
)

Usando o CouchDB Primeiro tentei ter apenas dois tipos de documentos. Eu teria um tipo LogEntry, parecendo algo assim:

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

e eu teria um tipo LogTopic, algo parecido com isto:

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

Você pode ver que eu represento o relacionamento usando ummatching_entries campo em cada documentos LogTopic para armazenar uma lista de IDs de documentos LogEntry. Isso funciona bem até certo ponto, mas tenho problemas quando vários clientes estão tentando adicionar uma entrada correspondente a um tópico. Ambos tentam atualizações otimistas e uma falha. A solução que estou usando agora é essencialmente reproduzir a abordagem do RDBMS e adicionar um terceiro tipo de documento, algo como:

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

Isso funciona e supera os problemas de atualização simultânea, mas tenho duas reservas:

Eu me preocupo que estou usando essa abordagem porque é o que eu faria em um banco de dados relacional. Eu me pergunto se há uma solução mais parecida com o couchDB (relaxante?).Minhas visualizações não podem mais recuperar todas as entradas de um tópico específico em uma chamada. Minha solução anterior permitia isso (se eu usasse o parâmetro include_docs).

Alguém tem uma solução melhor para mim? Ajudaria se eu também postasse as visualizações que estou usando?

questionAnswers(3)

yourAnswerToTheQuestion