Search code examples
javahibernategoogle-app-enginenosqlbigtable

BigTable vs noSQL


  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)


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