Is there such a database?

Background: Ok, so I'm looking for what I think is an object database. However, the (admittedly several) object databases I looked at were simple persistence layers rather than full blown DBMSs. I don't know if what I am looking for would even be considered an object database, so indeed any help in pointing me in the right direction would be greatly appreciated.


I don't want to give you two pages describing what I am looking for, so I will use an example to illustrate my point. Let's say I have a BlogPost object that I need to store. Something like this, in pseudocode:

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

      

(Let's assume it Comment

's a native class.)

Now the relational database author

will be stored as a foreign key pointing to User.id

, tags

and comments

will be stored as "one-to-many" or "many-many relationships use a separate table to store relationships. I would like to create a database engine that does the following actions:

  • Saves related objects ( author

    , tags

    etc.) with a direct link instead of using foreign keys, which require additional lookup; in other words, objects on top of each other must be supported by the database
  • Allows me to add a comment or tag to a blog post without loading the entire object, updating it and putting it back into the database (e.g. document oriented database - CouchDB example)

I am assuming I am looking for a nav database, but I don’t know. Is there anything even remotely similar to what I'm thinking about? If so, what is it called? (Or better yet, give me an actual working database.) Or am I being too picky?


Edit:

Just to clarify, I am NOT looking for an ORM or abstraction layer or anything like that. I am looking for an actual database that does this internally. Sorry if it's hard for me, but I searched and I couldn't find anything.


Edit:

Also, something for the JVM would be excellent, but at the moment I really don't care what platform it runs on.

-2


source to share


11 replies


I think that what you are describing can be easily modeled in a graphical database . You then get the benefit of navigating the nodes / edges where you want to make changes, without having to fetch anything else. For the JVM, there is an open source Neo4j database (where I am part of the team). You can read about it in High the Scalability , as part of the review thinkvitamin or fooobar.com/questions/50321 / ... . As far as tags go, I think storing them in a graph database can give you additional benefits if you want to find related tags and things like that. Just drop a line on the mailing list and I'm sure the community will help you.



+7


source


You can try db4o which is available in C # and Java.



+5


source


I think our search is: http://www.odbms.org/ . This site has good information about object databases, including Objectivity , which is a pretty good object database.

+2


source


Exactly what you described can be done with (H) Hibernate running on a regular DBMS.

The advantage of using this level of persistence with a regular database is that you have a standard database system combined with easy programming. You are declaring your classes in a very natural way and (N) Hibernate provides a way to translate between references / lists and foreign key relationships.

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

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

If you insist that you do not want to use the well-established standard RDBMS and would rather trust your data to something more exotic and less heavily testable, you are looking for an Object Relational Database .

However, such a product is probably best implemented as a layer on top of a standard RDBMS anyway. This is probably why ORMs like (N) Hibernate are the most popular solution - they allow standard RDBMS software (and widely available management / user skills), but the programming experience is 99% object-based.

+1


source


+1


source


This is exactly what LINQ was .

Microsoft LINQ defines a set of proprietary query operators that can be used to query, design, and filter data in arrays, enumerated classes, XML (XLINQ), relational database, and third-party data sources. While it allows you to query any data source, it requires that the data be encapsulated as objects. Thus, if the data source does not store data as objects, the data must be mapped to the object's domain. Queries written using query operators are either executed by the LINQ query engine, or passed through an extension engine to LINQ providers, which either implement a separate query processing engine, or are translated into a different format that must be executed in a separate data store (for example,on the database server as SQL queries (DLINQ)). The results of a query are returned as a set of objects in memory that can be enumerated using a standard iterator function such as C # foreach.

0


source


There are many terms associated with Object-Relational Mapping , aka ORM, which is probably the most useful for you to look at. ORM libraries exist for many programming languages.

0


source


Oracle nested tables provide some of this functionality, although in updates you can't just add a row to the nested table - you have to replace the entire nested table.

0


source


I assume you are looking for an ORM with " EntityFirst ".

In EntityFirst, the developer is the least [not all] database related. You just need to create your own objects or objects. The ORM then takes care of storing the entities in the database and retrieving them as you wish.

The only EntityFirst ORM with my knowledge of " Signum ". It is a wonderful framework built on top of .net. I recommend that you go to this video on the SignumFramework website and I'm sure you will find it useful.

Link text: http://www.signumframework.com

Thanks.

0


source


Perhaps ZODB? good introduction find here: http://www.ibm.com/developerworks/aix/library/au-zodb/

0


source


You can try STSdb , DB4O, Perst ... which is available in C # and Java.

0


source







All Articles