Wednesday, November 26, 2008
OJM
Seems to me when I first saw that new TLA that it was a pure oxymore.
Reading the CPO web site just confirmed this. There are so many strange amd sometimes inaccurate statements on this page. The author seems to ignore what modern persistence is.
I really hate to be harsh like that, but is there really a need in 2008, for yet another JDBC abstraction?
OJM
Seems to me when I first saw that new TLA that it was a pure oxymore.
Reading the CPO web site just confirmed this. There are so many strange amd sometimes inaccurate statements on this page. The author seems to ignore what modern persistence is.
I really hate to be harsh like that, but is there really a need in 2008, for yet another JDBC abstraction?
Different problems, different databases
Having data models too much coupled with applications model has indeed been recognized in the 70s as one of the main problems preventing IT flexibility (for instance, because producing new reports for business users required to go back to a full development cycle).
But at the same time, the design of software made significant progress by recommending encapsulating data (state) within methods (behavior), clearly going in an opposite direction. This all created a lot of stress and noises in the software industry, and eventually the emergence of persistence technologies.
But what really means decoupling data from applications? It mostly consists in removing explicit directional relationships from database schemas, so that data views can later be recombined in any way. When you think about it, it just means that relationships where poorly represented in programming languages, and it is still true with most modern languages including Java and C#. But to be honest, relationships are also poorly represented in relational models and this is not the nasty foreign keys that will change anything to it.
The fact is that the next real big revolution in the IT world would be a first comprehensive support for the notion of relationships.
Object database vendors failed to impose ODBMS while it was the most relevant choice for Java, at least from the technical point of view. There are many reasons to that:
- Some first ODBMS implentations were very bad in terms of database administration, ad-hoc queries and overall performance. They were not really database but rather a storage mechanism for in-memory object pages.
- The "ecology" never really started arounbd ODBMS (reporting tool...).
- ODBMS started in the late 80s, exactly when RDBMS were just about to gain mometum on the market, it was not the right time to impose a new database technology.
- Then major ODBMS vendors raised money from IPOs in the 95, in a very quiet time with no opportunity for expansion and no real need for money, therefore most of that money has been waste for nothing.
- In 1998, the ODBMS vendors missed the Internet wave, mostly because of the XML mania at that time.
- Then they surrendered and tried to reposition themselves as cache (Versant, Gemstone) or XML storage (Objectstore).
Hopefully, the XML database market never really emerged, despite the huge XML hype, probably because everybody understands XML is a good exchange format but a very bad (too verbose) storage format. The big problem with XML is still that it tends to impose hierarchical models, which to some extents are a kind of regression in our industry.
You can easily have an object or XML layer on top of any kind of storage, including relational (see IBM pureXML, for instance). Probably the best approach would be to have neutral and efficient storages, with multiple interfaces around them. It could be a kind of relational storage with the notion of relationship efficiently supported.
Internet, SOA, WOA, Web 2.0, mashups, etc. all favor a style where business functionalities become independent, and thus will have their own storage (as they cannot share a common database any longer, as they are really physically distributed).
It now seems some vendors are now trying to push the idea that even this low-level underlying storage layer, should have different foundations, depending on the kind of problems addressed. That's why the vertical model (storage primarily organized by columns instead of rows, like in Vertica) or the key-value model are quickly growing these days.
They will certainly not replace RDBMS systems any soon, as some are already claiming, but they will maybe impose themselves in some situations. Seems to me the time of the omniscient relational model is about to decline, even if it will remain present for decades.
Data services direclty impacts the database world because:
- We have more and more data sources to access from a even a simple business application.
- The notion of transaction is change.
- We more and more frequently have to support asynchronous data access.
- It becomes not only possible but also mandatory to access any kind of data sources, not only relational ones.
- Databases are progressively commoditized, and their advanced features will move to intermediate mediation layers.
- Then it is possible to choose the best database technology for a given need, at any time.
Different problems, different databases
Having data models too much coupled with applications model has indeed been recognized in the 70s as one of the main problems preventing IT flexibility (for instance, because producing new reports for business users required to go back to a full development cycle).
But at the same time, the design of software made significant progress by recommending encapsulating data (state) within methods (behavior), clearly going in an opposite direction. This all created a lot of stress and noises in the software industry, and eventually the emergence of persistence technologies.
But what really means decoupling data from applications? It mostly consists in removing explicit directional relationships from database schemas, so that data views can later be recombined in any way. When you think about it, it just means that relationships where poorly represented in programming languages, and it is still true with most modern languages including Java and C#. But to be honest, relationships are also poorly represented in relational models and this is not the nasty foreign keys that will change anything to it.
The fact is that the next real big revolution in the IT world would be a first comprehensive support for the notion of relationships.
Object database vendors failed to impose ODBMS while it was the most relevant choice for Java, at least from the technical point of view. There are many reasons to that:
- Some first ODBMS implentations were very bad in terms of database administration, ad-hoc queries and overall performance. They were not really database but rather a storage mechanism for in-memory object pages.
- The "ecology" never really started arounbd ODBMS (reporting tool...).
- ODBMS started in the late 80s, exactly when RDBMS were just about to gain mometum on the market, it was not the right time to impose a new database technology.
- Then major ODBMS vendors raised money from IPOs in the 95, in a very quiet time with no opportunity for expansion and no real need for money, therefore most of that money has been waste for nothing.
- In 1998, the ODBMS vendors missed the Internet wave, mostly because of the XML mania at that time.
- Then they surrendered and tried to reposition themselves as cache (Versant, Gemstone) or XML storage (Objectstore).
Hopefully, the XML database market never really emerged, despite the huge XML hype, probably because everybody understands XML is a good exchange format but a very bad (too verbose) storage format. The big problem with XML is still that it tends to impose hierarchical models, which to some extents are a kind of regression in our industry.
You can easily have an object or XML layer on top of any kind of storage, including relational (see IBM pureXML, for instance). Probably the best approach would be to have neutral and efficient storages, with multiple interfaces around them. It could be a kind of relational storage with the notion of relationship efficiently supported.
Internet, SOA, WOA, Web 2.0, mashups, etc. all favor a style where business functionalities become independent, and thus will have their own storage (as they cannot share a common database any longer, as they are really physically distributed).
It now seems some vendors are now trying to push the idea that even this low-level underlying storage layer, should have different foundations, depending on the kind of problems addressed. That's why the vertical model (storage primarily organized by columns instead of rows, like in Vertica) or the key-value model are quickly growing these days.
They will certainly not replace RDBMS systems any soon, as some are already claiming, but they will maybe impose themselves in some situations. Seems to me the time of the omniscient relational model is about to decline, even if it will remain present for decades.
Data services direclty impacts the database world because:
- We have more and more data sources to access from a even a simple business application.
- The notion of transaction is change.
- We more and more frequently have to support asynchronous data access.
- It becomes not only possible but also mandatory to access any kind of data sources, not only relational ones.
- Databases are progressively commoditized, and their advanced features will move to intermediate mediation layers.
- Then it is possible to choose the best database technology for a given need, at any time.
New databases
- Interview on CouchDB, the Apache project for a document database, written in Erlang, with an HTTP/REST/JSON API, already mentioned in this blog. Interesting point of view at the end about BigTable. For sure a big scalable, persistent Map is certainly interesting in some very specific cases, but it is not really a database at the end.
- Scalaris, a scalable, transactional data store for Web 2.0 services. Yet another distributed, persistent key-value system. That one shares many design ideas with BigTable, while, like CouchDB, it is written in Erlang. The big addition seems to be a better support for transactions. See OnScale for more information (videos, slides...)
New databases
- Interview on CouchDB, the Apache project for a document database, written in Erlang, with an HTTP/REST/JSON API, already mentioned in this blog. Interesting point of view at the end about BigTable. For sure a big scalable, persistent Map is certainly interesting in some very specific cases, but it is not really a database at the end.
- Scalaris, a scalable, transactional data store for Web 2.0 services. Yet another distributed, persistent key-value system. That one shares many design ideas with BigTable, while, like CouchDB, it is written in Erlang. The big addition seems to be a better support for transactions. See OnScale for more information (videos, slides...)
Tuesday, November 25, 2008
The Future of Databases
I have seen that the same topic has also been discussed at various locations at the same time, including interesting point of view from Martin Fowler.
New technologies for databases can be roughly divided into two groups:
- New kind of database technologies, tuned by design for the Cloud like Vertica, CouchDB, SimpleDB and other products alike that I've already mentioned in that blog.
- New deployment and access for RDBMS, known as Database-as-a-Service. Basically, the database is remotely hosted and administrate, but you still access it through SQL over HTTP or SOAP/REST.
Having worked in the past for an ODBMS vendor I know how difficult it is to convince CIOs, project managers, architects, developers and DBAs to move from RDBMS. There is a kind of religion about relational theory. My take is that RDBMS are here to stay, as mainframes did (they never disappeared as it has been predicted by many "experts" in the past). New technologies never replace good old ones, they just complement them.
Anyway, there are tangible impacts of SOA and the Cloud on the database market:
- We will access more kind of data sources in the future, not only RDBMS and services, but also new kind of databases. Heterogeneity will continue to grow.
- We will access more data sources in the future, most applications were using single databases, they will now access multiple data sources. We are switching from data access to data integration (I tend to prefer the term adaptive mediation of information). Integration has to be done at a business level, not at the SQL one or XML one.
- Many advanced features of databases engines (security, fault tolerance, stored procedures...) will progressively move to an intermediate integration layer. Databases, including relational databases, will go back to simple and efficient storage technology.
- Data integration will become more important than the database itself, databases will be commoditized. Each application development team will be able to select the best database technology for its needs.
- Accessing non-database data sources will impose to have extended metadata. The relational world is simple because SQL provides a convenient, technical APIs to access data at the atomic level (a cell at the cross between a row and a column). Everything is implicit, in terms of metadata, access patterns, etc. Conversely, accessing a service-oriented data source imposes to explicitly describe its data model and its data manipulation semantic. Services can be either fined-grained or coarse-grained, you need to capture that. Data access has its contribution to the Semantic Web.
- When thousands of data sources will be available as data services (like mainframe screens, APIs of packaged applications), we will need tools to automatically combine them at runtime. Manual, hard-coded or even visual composition of data services is a choice only when dealing with a few data services. Dynamic composition of data services (e.g. aggregation of fine-grained data services into other larger coarse-grained data services as required by ever changing business functionalities) is imposed by the really agile IT. Otherwise "agile" will turn into "fragile"!
- Ad-hoc data mashups will require availability of the right data services at the right time. This can only be achieved by platforms being able to dynamically create and publish new data services as they become required.
- Access to non-structured data will grow. At the same time, non-structured data is on the way to structure itself or at least to describe itself better, see the "Linked Data", "OpenCalais" and the "Web of Data" efforts for instance.
- Accessing multiple data sources with different latencies will impose to deal with reactive data integration patterns. We will have to support asynchronous data access, and we will need tools for that, because asynchronous and parallel programming are not natural to most developers and architects.
As Martin Fowler concludes, Data services platforms are enabling the promises of SOA, by really favoring small business functionalities having their own storage, instead of sharing data in huge centralized databases.