Pregunta

Antecedentes: Bueno, así que estoy buscando lo que supongo que es un objeto de base de datos.Sin embargo, el (es cierto que pocos) de objetos de bases de datos que he mirado han sido la persistencia simple capas, y no completo de los Dbms.No sé si lo que estoy buscando es considerada un objeto de base de datos, por lo que cualquier ayuda en me apunta en la dirección correcta sería muy apreciada.


No quiero dar dos páginas describiendo lo que estoy buscando, así que voy a usar un ejemplo para ilustrar mi punto.Digamos que tengo un "BlogPost" objeto que necesito almacenar.Algo como esto, en pseudocódigo:

class BlogPost
    title:String
    body:String
    author:User
    tags:List<String>
    comments:List<Comment>

(Suponga Comment es su propia clase.)

Ahora, en una base de datos relacional, author se almacenan como una clave externa que apunta a un User.id, y el tags y comments se almacenan como uno-a-muchos o muchos-a-muchos de relaciones uso de una tabla separada para almacenar las relaciones.Lo que me gustaría es un motor de base de datos que hace lo siguiente:

  • Tiendas de objetos relacionados (author, tags, etc.) con una referencia directa en lugar de utilizar claves foráneas, las cuales requieren de un adicional de búsqueda;en otras palabras, los objetos en la parte superior de uno al otro debe ser soportada por la base de datos
  • Me permite añadir un comentario o una etiqueta en el blog sin recuperar la totalidad de su objeto, la actualización de la misma, y, a continuación, poner de nuevo en la base de datos (como un documento orientado a la base de datos -- CouchDB ser un ejemplo)

Supongo que lo que estoy buscando es un panel de navegación de la base de datos, pero no sé.No hay nada ni remotamente parecido a lo que estoy pensando?Si es así, cómo se llama?(O mejor aún, me dan un trabajo real de la base de datos.) O estoy siendo demasiado exigente?


Editar:

Solo para aclarar, Yo NO estoy en busca de un ORM o una capa de abstracción ni nada de eso.Estoy buscando una base de datos real que hace esto internamente.Lo siento si estoy siendo difícil, pero he buscado y no pude encontrar nada.


Editar:

También, algo de la JVM sería excelente, pero en este punto no me importa lo que la plataforma que se ejecuta.

¿Fue útil?

Solución

Creo que lo que está describiendo podría modelarse fácilmente en una base de datos gráfica . Luego obtiene el beneficio de navegar a los nodos / bordes en los que desea realizar cambios sin necesidad de recuperar nada más. Para la JVM está la Neo4j base de datos de gráficos de código abierto (donde formo parte del equipo). Puede leer sobre esto en Alta escalabilidad , como parte de una descripción general en thinkvitamin o en este hilo de stackoverflow . En cuanto a las etiquetas, creo que almacenarlas en una base de datos de gráficos puede brindarle algunas ventajas adicionales si desea encontrar etiquetas relacionadas y cosas similares. Simplemente coloque una línea en la lista de correo , y Estoy seguro de que la comunidad te ayudará.

Otros consejos

Puede probar db4o que está disponible en C # y Java.

Creo que estamos buscando esto: http://www.odbms.org/ . Este sitio tiene buena información sobre bases de datos de objetos, incluida Objectivity , que es una muy buena base de datos de objetos.

Exactamente lo que ha descrito se puede hacer con (N) Hibernate ejecutándose en un RDBMS ordinario.

La ventaja de usar una capa de persistencia de este tipo con una base de datos ordinaria es que tiene un sistema de base de datos estándar combinado con una programación conveniente. Declaras tus clases de una manera muy natural, y (N) Hibernate proporciona una forma de traducir referencias / listas y relaciones de claves externas.

Tutorial de Java: http: // docs.jboss.org/hibernate/stable/core/reference/en/html/tutorial-firstapp.html

Tutorial .NET: https://web.archive.org/web/20081212181310/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your -first-nhibernate-based-application.aspx

Si insiste en que no desea utilizar un RDBMS estándar bien soportado y prefiere confiar sus datos en algo más exótico y menos probado, está buscando un Base de datos relacional de objetos .

Sin embargo, tal producto probablemente se implementaría mejor haciendo que sea una capa sobre un RDBMS estándar de todos modos. Esta es probablemente la razón por la cual los ORM como (N) Hibernate son la solución más popular: permiten que se aplique el software RDBMS estándar (y las habilidades de administración / usuario ampliamente disponibles) y, sin embargo, la experiencia de programación está basada en objetos en un 99%.

Esto es exactamente para lo que LINQ fue diseñado.

  

Microsoft LINQ define un conjunto de operadores de consulta propietarios que se pueden usar para consultar, proyectar y filtrar datos en matrices, clases enumerables, XML (XLINQ), bases de datos relacionales y fuentes de datos de terceros. Si bien permite consultar cualquier fuente de datos, requiere que los datos se encapsulen como objetos. Por lo tanto, si la fuente de datos no almacena datos de forma nativa como objetos, los datos deben asignarse al dominio de objetos. Las consultas escritas usando los operadores de consulta son ejecutadas por el motor de procesamiento de consultas LINQ o, a través de un mecanismo de extensión, entregadas a proveedores de LINQ que implementan un motor de procesamiento de consultas separado o se traducen a un formato diferente para ejecutarse en un almacén de datos separado ( como en un servidor de base de datos como consultas SQL (DLINQ)). Los resultados de una consulta se devuelven como una colección de objetos en memoria que se pueden enumerar utilizando una función de iterador estándar como el foreach de C #.

Existe una variedad de términos, todos vinculados a Mapeo relacional de objetos , también conocido como ORM, que probablemente será el más útil para que lo busques. Existen bibliotecas ORM para muchos lenguajes de programación.

Las

Oracle tablas anidadas proporcionan alguna parte de esa funcionalidad, aunque en las actualizaciones, usted no puede simplemente agregar una fila a la tabla anidada; debe reemplazar toda la tabla anidada.

Supongo que está buscando un ORM con " EntityFirst " enfoque.

En el enfoque EntityFirst, el desarrollador está menos preocupado por la base de datos. Solo tienes que construir tus entidades u objetos. El ORM se encarga de almacenar las entidades en la base de datos y recuperarlas a su voluntad.

El único ORM de EntityFirst con mi conocimiento " Signum " ;. Es un marco maravilloso construido sobre .net. Le recomiendo que visite algunos videos en el sitio web SignumFramework y Estoy seguro de que lo encontrará útil.

Texto del enlace: http://www.signumframework.com

Gracias.

¿ZODB tal vez? buena introducción encuentra aquí: http://www.ibm.com/developerworks/aix/library/au -zodb /

Podrías probar STSdb, DB4O, Perst ...que está disponible en C# y Java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top