Ask YC: Object databases
Which did you like and why?
Which did you like and why?
Just use an RDBMS and in your application use a layer which abstracts away the "relational" part of the RDBMS and exposes it as objects to the rest of the application. This /can/ get a bit tricky with transactions and etc, but your internal data layer can be designed with some notion of transactions.
What I have met is several IT projects that have failed thanks to inordinate amounts of resources sunk into O/R mapping issues...
Abstracting away a model doesn't sound like a great idea to me.
But I think they're inherently slower for things like reporting.
The first item can be overcome with effective scripting (rather than trying to avoid the change necessary to restructure apps and schemas using relational databases instead embrace it and make schema changes easy) environment. And there are some OOs around that do a pretty good job of the second item (cayenne but I'm looking for one . I have had great experiences with using business logic layers around cayenne and have been able to rapidly refactor to achieve major schema changes like this.
Having said that - the allegro graph stuff looks like it might be a good alternative.
I'm currently interested in the idea of using couchdb while getting an app set up and then switching to postgresql later. Can anyone see any benefits or problems with this approach?
I wouldn't say the deficiency is _inherent_, but the powerful indexing ability of a relational DB that we take for granted seems to be necessarily _ad hoc_ in an object-oriented DB. From my understanding, the index in an OODB is just another object in the database, which may be a B-tree, a hash table, or a simple sequential list. So far, that's fairly similar to the RDB. However, the indices in the RDB are closely coupled to the table that stores the records. The RDB "knows" that it should update the index when the table is modified. On the other hand, there isn't a table of records in the OODB, so there isn't a close coupling of the index to the data store. It may be entirely up to the application to manage the integrity of the index.
Pros: - very fast for queries/updates along the designed network paths.
Downsides:
- not necessarily fast if network path is complex,
- proprietary API,
- corruption can be difficult to impossible to fix,
- corruption _does_ occur,
- depending on data structures used, DB may need re-organization (resizing),
- design requires skill: not easy to redesign or modify once deployed.
While fun to work with, I would hesitate to recommend using such a database unless absolutely necessary. Relational databases are much easier to set up, reconfigure, query and update. These characteristics alone usually preclude the use of an object database.
I can say that when it came time to move things to another non-Zope system (a pile made up of trac, Moin Moin, Virtualmin, and other bits and pieces), it was painful to the point of ridiculousness. I'm sure ZODB masters can write middleware for that sort of thing without pain (and if you're building your system that uses the ODB from scratch, you'll probably understand it well enough to do so). But I'll stick with standard cubbies in which to shove my things from now on (standard, to me, means flat files or an SQL database, as requirements dictate).
I think these systems really only make sense in the telecommunications, CAD, etc. niches where performance is critical.
That said, the new trend in DB systems are main memory relational systems based on column store architectures (vs. traditional row store). The performance of such architectures is really quite promising. Go to Stonebreaker's talk at the latest VLDB in Viena.
Or take a look at his new company: