Derek,

Thanks for that!

Yes, I am aware of that technique.  I am currently using something
very similar on an sql database.  I think one of the great benefits with
Cassandra is that you can invent these on the fly.  I also think there
is great benefit to keep all of the columns in the same row.

Anyway, I didn't mean to hijack Oleg's thread.  I am interested
in the original question about the serialization/deserialization on write.
Does anybody know?

-g


On Wed, Jun 13, 2012 at 11:45 PM, Derek Williams <de...@fyrie.net> wrote:
> On Wed, Jun 13, 2012 at 9:08 PM, Greg Fausak <g...@named.com> wrote:
>>
>> Interesting.
>>
>> How do you do it?
>>
>> I have a version 2 CF, that works fine.
>> A version 3 table won't let me invent columns that
>> don't exist yet. (for composite tables).  What's the trick?
>
>
> You are able to get the same behaviour as non cql by doing something like
> this:
>
> CREATE TABLE mytable (
>   id bigint,
>   name text,
>   value text,
>   PRIMARY KEY (id, name)
> ) WITH COMPACT STORAGE;
>
> This table will work exactly like a standard column family with no defined
> columns. For example:
>
> cqlsh:testing> INSERT INTO mytable (id, name, value) VALUES (1, 'firstname',
> 'Alice');
> cqlsh:testing> INSERT INTO mytable (id, name, value) VALUES (1, 'email',
> 'al...@example.org');
> cqlsh:testing> INSERT INTO mytable (id, name, value) VALUES (2, 'firstname',
> 'Bob');
> cqlsh:testing> INSERT INTO mytable (id, name, value) VALUES (2, 'webpage',
> 'http://bob.example.org');
> cqlsh:testing> INSERT INTO mytable (id, name, value) VALUES (2, 'email',
> 'b...@example.org');
>
> cqlsh:testing> SELECT name, value FROM mytable WHERE id = 2;
>  name      | value
> -----------+------------------------
>      email |        b...@example.org
>  firstname |                    Bob
>    webpage | http://bob.example.org
>
> Not very exciting, but when you take a look with cassandra-cli:
>
> [default@testing] get mytable[2];
> => (column=email, value=b...@example.org, timestamp=1339648270284000)
> => (column=firstname, value=Bob, timestamp=1339648270275000)
> => (column=webpage, value=http://bob.example.org,
> timestamp=1339648270280000)
> Returned 3 results.
> Elapsed time: 11 msec(s).
>
> which is exactly what you would expect from a normal cassandra column
> family.
>
> So the trick is to separate your static columns and your dynamic columns
> into separate column families. Column names and types can of course be
> something different then my example, and inserts can be done within a
> 'BATCH' to avoid multiple round trips.
>
> Also, I'm not trying to advocate this as being a better solution then just
> using the old thrift interface, I'm just showing an example of how to do it.
> I personally do prefer this way as it is more predictable, but of course
> others will have a different opinion.
>
> --
> Derek Williams
>

Reply via email to