incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Lebresne <sylv...@datastax.com>
Subject Re: Data Modeling - JSON vs Composite columns
Date Thu, 20 Sep 2012 09:22:03 GMT
On Wed, Sep 19, 2012 at 2:00 PM, Roshni Rajagopal
<roshni_rajagopal@hotmail.com> wrote:
> Hi,
>
> There was a conversation on this some time earlier, and to continue it
>
> Suppose I want to associate a user to  an item, and I want to also store 3
> commonly used attributes without needing to go to an entity item column
> family , I have 2 options :-
>
> A) use composite columns
> UserId1 : {
>  <itemid1>:<Name> = Betty Crocker,
>  <itemid1>:<Descr> = Cake
> <itemid1>:<Qty> = 5
>  <itemid2>:<Name> = Nutella,
>  <itemid2>:<Descr> = Choc spread
> <itemid2>:<Qty> = 15
> }
>
> B) use a json with the data
> UserId1 : {
>  <itemid1> = {name: Betty Crocker,descr: Cake, Qty: 5},
>  <itemid2> ={name: Nutella,descr: Choc spread, Qty: 15}
> }

> How does approach B work in CQL

The "way" CQL3 (the precision is because basically CQL2 doesn't have any good
solution for this problem) handle this is basically by using composite columns,
i.e. it uses solution A). However, the whole point is that the syntax is, we
think, much more friendly that if you were to use composites yourself in say
thrift.

More concretely, you'd handle your 'shopping cart' example with the following
table:
  CREATE TABLE shopping_cart (
      userId uuid,
      itemId uuid,
      name text,
      descr text,
      qty int,
      PRIMARY KEY (userId, itemId)
  )

The way this will be layout internally is pretty much exactly the layout you've
described for A).

> Can we read/write a JSON easily in CQL?

There is no specific support of JSON by CQL (or any of the Cassandra data model
for that matter). You can insert JSON string obviously, but Cassandra won't use
it in any way (and so you'd have to read the string and extract whatever
field you're interested client side). Obviously, using the "CQL" way described
above is the preferred way.

--
Sylvain

Mime
View raw message