Referencia cruzada múltiples relaciones de muchos a muchos. ¿Qué base de datos debo elegir?

¿Qué lenguaje de programación estás usando para la plataforma? Estoy construyendo una base de datos Java de código abierto llamada concurso que puede resolver su problema.

Concourse no tiene esquemas y utiliza un modelo de datos orientado a documentos / registros simple. Para sus propósitos, cada objeto de contenido sería un registro único con un campo “created_timestamp” y un campo “tags” que contiene (posiblemente) múltiples valores. Luego puede consultar fácilmente para encontrar todos los registros que tengan una sola etiqueta o una combinación de etiquetas, así como algunos que coincidan con algunos criterios de marca de tiempo.

  resultados = concourse.find ("etiquetas", Operator.EQUALS, "math");
 resultados = Sets.intersection (concourse.find ("tags", Operator.EQUALS, "hard"), 
                             concourse.find ("etiquetas", Operator.EQUALS, "match"));

Concourse también viene con búsqueda de texto completo incorporada, por lo que puede crear fácilmente una función de autocompletar que sugerirá resultados que están en la base de datos a medida que el usuario escribe.

  resultados = concourse.search ("etiquetas", "mat")

Por último, Concourse también es una base de datos de control de versiones, por lo que (suponiendo que las etiquetas en el contenido pueden cambiar con el tiempo) puede hacer cosas interesantes como consultar el contenido que tenía una etiqueta en el pasado.

  results = concourse.find ("tags", Operator.EQUALS, "math", time ("last week"));

El beneficio de usar Concourse es que el modelo de datos es muy simple y toda la indexación se realiza automáticamente. Esto significa que no tiene que pensar en cómo estructurar tablas o consultas. Todo lo que necesita hacer es crear el modelo de objetos para su plataforma (lo que ya ha hecho) y Concourse puede adaptarse a eso y facilitarle la realización de consultas ad hoc de manera eficiente.

El concurso es nuevo y aún está en desarrollo activo. Si está interesado, podemos chatear más sin conexión sobre cómo puede resolver su problema. Ciertamente estoy abierto a sugerencias de características adicionales que podemos agregar para que sea más aplicable a su caso de uso.