Question

  1. may i know in 'nosql' there is limitation just like bigtable where we should 'denormalized' our table/entity ?

  2. any api wrapper that allow we to write code once and can be used for google app engine bigtable and nosql ? (something like hiberanate)

Was it helpful?

Solution

Yes, for example in MongoDB you don't have joins since it is non-relational, so it does change how we store and browse the data.

As MongoDB is non-relational (no joins), references ("foreign keys") between documents are generally resolved client-side by additional queries to the server. Two conventions are common for references in MongoDB: first simple manual references, and second, the DBRef standard, which many drivers support explicitly.

It seems that the consensus is to denormalize and duplicate to accelerate the reads to avoid the cost of joining distributed data all toghether, with the join and merge logic done on the application level.

As to whether it is an absolute requirement to denormalize the database, I am not sure (other SO members can probably enlighten us). But I think the database should be modeled with these "limitations" in the mind along with a good study of how the data is going to be queried. This should give the least impedance to the process.

See Also:

Bigtable database design theory

GAE - How to live with no joins?


Any API wrapper that allow we to write code once and can be used for google app engine BigTable and nosql ? (something like Hibernate)

JDO is datastore-agnostic, so it might just provide what you want to some extent.

Seems there are lots of recent projects to use JDO and JPA with "NoSQL" products.

See:

Datanucleus-Cassandra

Datanucleus-Cassandra-Plugin

OTHER TIPS

Any API wrapper that allow we to write code once and can be used for google app engine BigTable and nosql ? (something like Hibernate)

While abstraction libraries definitely help portability, you have to take into consideration the particular platform you're running on. If you're going to go with Google App Engine, you have to be aware of the incurred startup costs inherent with additional abstraction libraries.

You should weigh the pros and cons of using something like JDO or JPA. Also take a look at the Objectify library that offers a more native interface that has the downside of being coupled to the App Engine Datastore.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top