> > CQL3 does now support dynamic columns. For tags or metadata values you > could use a Collection: >
This should probably be clarified. A collection is a super useful tool, but it is *not* the same thing as a dynamic column. It has many advantages, but there is one huge disadvantage in that you have to be careful how much data you store in a collection. When you read a single value out of a collection, the *entire* collection is always read, which of course is true for appending data to the collection as well. With a traditional dynamic column, you could have added things like event logs to a record in the form of keys named "event:someEvent:TS" (or juxtapose the order as your needs dictate). You could basically do this practically indefinitely with little degradation in performance. This was also a common way of representing cross-family relationships (one-to-many style). If you try to do the same thing with a collection, performance will degrade as your data grows. For small or relatively static data sets (eg tags) that's fine. For open-ended data sets (logs, events, one-to-many relationships that grow regularly), you should instead normalize such data into a separate column family. -Eric Stevens ProtectWise, Inc. On Thu, Jun 6, 2013 at 9:49 AM, Francisco Andrades Grassi < bigjoc...@gmail.com> wrote: > Hi, > > CQL3 does now support dynamic columns. For tags or metadata values you > could use a Collection: > > http://www.datastax.com/dev/blog/cql3_collections > > For wide rows there's the enhanced primary keys, which I personally prefer > over the composite columns of yore: > > http://www.datastax.com/dev/blog/cql3-for-cassandra-experts > http://thelastpickle.com/2013/01/11/primary-keys-in-cql/ > > -- > Francisco Andrades Grassi > www.bigjocker.com > @bigjocker > > On Jun 6, 2013, at 8:32 AM, Joe Greenawalt <joe.greenaw...@gmail.com> > wrote: > > Hi, > I'm having some problems figuring out how to append a dynamic column on a > column family using the datastax java driver 1.0 and CQL3 on Cassandra > 1.2.5. Below is what i'm trying: > > *cqlsh:simplex> create table user (firstname text primary key, lastname > text); > cqlsh:simplex> insert into user (firstname, lastname) values > ('joe','shmoe'); > cqlsh:simplex> select * from user; > > firstname | lastname > -----------+---------- > joe | shmoe > > cqlsh:simplex> insert into user (firstname, lastname, middlename) values > ('joe','shmoe','lester'); > Bad Request: Unknown identifier middlename > cqlsh:simplex> insert into user (firstname, lastname, middlename) values > ('john','shmoe','lester'); > Bad Request: Unknown identifier middlename* > > I'm assuming you can do this based on previous based thrift based clients > like pycassa, and also by reading this: > > The Cassandra data model is a dynamic schema, column-oriented data model. > This means that, unlike a relational database, you do not need to model all > of the columns required by your application up front, as each row is not > required to have the same set of columns. Columns and their metadata can be > added by your application as they are needed without incurring downtime to > your application. > here: http://www.datastax.com/docs/1.2/ddl/index > > Is it a limitation of CQL3 and its connection vs. thrift? > Or more likely i'm just doing something wrong? > > Thanks, > Joe > > >