I have a pretty simple data modeling question.  I don't know whether or not to 
use a CF or SCF in one instance.

Here's my example.  I have an Store entry and locations for each store.  So I 
have something like:

Using CF:
Store { //CF
   storeId { //row key
      storeName:str,
      storeLogo:image
   }
   storeId:locationId1 {
      locationName:str,
      latLong:coordinate
   }
   storeId:locationId2 {
      locationName:str,
      latLong:coordinate
   }
}

Using SCF:
Store { //SCF
   storeId { //row key
      store {
          storeName:str,
          storeLogo:image
      }
      locationId1 {
          locationName:str,
          latLong:coordinate
      }
      locationId2 {
          locationName:str,
          latLong:coordinate
      }
   }
}

Queries:

Reads:
 1. Read store and all locations (could be done by range query efficiently when 
using CF, since I'm using OPP)
 2. Read only a particular location of a store (don't need the store meta data 
here)
 3. Read only store name info (don't need any location info here)

Writes:
 1. Update store meta data (without touching location info)
 2. Update location data for a store (without touching rest of store data)
 3. Add a new location to an existing store (would have a unique identifier for 
location, no worries about having to do a read..)

I read that SuperColumns are not as fast as Columns, and obviously you can't 
have indexed subcolumns of supercolumns, but in this case I don't need the 
subsubcolumn indices.  It seems cleaner to model it as a SuperColumn, but why 
would I want to pay a performance penalty instead of just concating my keys.

This seems like a fairly common pattern?  What's the rule to decide between CF 
and SCF?

Thanks,
Peter

Reply via email to