views:

225

answers:

2

Consider a M:M relation that needs to be represented in a Cassandra data store.

What M:M modeling options are available? For each alternative, when is it to prefer? What M:M modeling choices have you made in your Cassandra powered projects?

A: 

Cassandra by design is Key value database, so to achieve M:M there are two ways to do it.

  • 1> De-normalize your data so every relation ship should duplicate data.

    ie. x->y(value) and x->z(value) and a->y(value)

    y should be saved for x and a

    This is how it should be done as it's give you strength of database

    • 2> Save reference for relational key as value.

      x->y(key) and x->z(Key) and a->y(Key)

      So if you need x with value of y it should be two operation, get x which will give you value of y. then get y itself in separate operation

Cassandra is not RDBMS so don't wrap you mind around traditional way of doing it by dropping values and define relationship.

mamu
+3  A: 

Instead of using a join table the way you would with an rdbms, you would have one ColumnFamily containing a row for each X and a list of Ys associated with it, then a CF containing a row for each Y and a list of each X associated with it.

If it turns out you don't really care about querying one of those directions then only keep the CF that you do care about.

jbellis