You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by "Hiller, Dean" <De...@nrel.gov> on 2012/10/11 16:18:12 UTC

CQL Sets and Maps

I was reading Brian's post

http://mail-archives.apache.org/mod_mbox/cassandra-dev/201210.mbox/%3CCAJHHpg20RRcAJqJDNF8SF7wnhbLo6j+AOFKsgbxyXwcOocG6oA@mail.gmail.com%3E

In which he asks

> Any insight into why CQL puts that in column name?
> Where does it store the metadata related to compound key
> interpretation? Wouldn't that be a better place for that since it
> shouldn't change within a table?

I have those same questions and would like to understand how it stores stuff better.  For example, if PlayOrm has the following

User {
   @Embedded
    Private List<Email> emails;
    @Embedded
    Private List<SomethingElse> otherStuff
    @OneToMany
    Private List<Owner> owners;
}

It ends up storing

rowkey: userid
=> column=emails:email1Id:title, value="some email title"
=> column=emails:email1Id:contents, value="some contents in email really really long"
=> column=emails:email2Id:title, value="some other email"
=> column=owners:ownerId29,  value=null
=> column=owners:ownerId57,  value=null

Basically using "emails" as the prefix since User can have other embedded objects, and using emailId as the next prefix so you can have many unique emails and then having each email property.  How is it actually stored when doing Sets and Maps in CQL??  Ideally, I would like PlayOrm to overlay on top of that.

Thanks,
Dean