Did you try to explore CQL3 collection support for the same? You can
definitely save on number of rows with that.

Point which i am trying to make out is, you can achieve it via CQL3 (
Jonathan's blog :
http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows)

I agree with you that still thrift may have some valid points to prove, but
considering latest development around new Cassandra features, i think CQL3
is the path to follow.


-Vivek


On Sat, Aug 31, 2013 at 12:15 AM, Peter Lin <wool...@gmail.com> wrote:

>
> you could dynamically create new tables at runtime and insert rows into
> the new table, but is that better than using thrift and putting it into a
> regular dynamic column with the exact name type and value type?
>
> that would mean if there's 20 dynamic columns of different types, you'd
> have to execute 21 queries to rebuild the data. That's basically the same
> as using EVA tables in relational databases.
>
> Having used that approach in the past to build temporal databases, it
> doesn't scale well.
>
>
>
> On Fri, Aug 30, 2013 at 2:40 PM, Vivek Mishra <mishra.v...@gmail.com>wrote:
>
>> create a column family as:
>>
>> create table dynamicTable(key text, nameAsDouble double, valueAsBlob
>> blob);
>>
>> insert into dynamicTable(key, nameAsDouble, valueAsBlob) values ( "key", 
>> double(102.211),
>> textAsBlob('valueInBytes').
>>
>> Do you think, it will work in case column name are double?
>>
>> -Vivek
>>
>>
>> On Sat, Aug 31, 2013 at 12:03 AM, Peter Lin <wool...@gmail.com> wrote:
>>
>>>
>>> In the interest of education and discussion.
>>>
>>> I didn't mean to say CQL3 doesn't support dynamic columns. The example
>>> from the page shows default type defined in the create statement.
>>>
>>> create column family data
>>> with key_validation_class=Int32Type
>>>  and comparator=DateType
>>>  and default_validation_class=FloatType;
>>>
>>>
>>> If I try to insert a dynamic column that uses double for column name and
>>> string for column value, it will throw an error. The kind of use case I'm
>>> talking about defines a minimum number of static columns. Most of the
>>> columns that are added at runtime are different name and value type. This
>>> is specific to my use case.
>>>
>>> Having said that, I believe it "would" be possible to provide that kind
>>> of feature in CQL, but the trade off is it deviates from SQL. The grammar
>>> would have to allow type declaration in the columns list and functions in
>>> the values. Something like
>>>
>>> insert into mytable (KEY, doubleType(newcol1), string(newcol2)) values
>>> ('abc123', "some string", double(102.211))
>>>
>>> doubleType(newcol1) and string(newcol2) are dynamic columns.
>>>
>>> I know many people find thrift hard to grok and struggle with it, but
>>> I'm a firm believer in taking time to learn. Every developer should take
>>> time to read cassandra source code and the source code for the driver
>>> they're using.
>>>
>>>
>>>
>>> On Fri, Aug 30, 2013 at 2:18 PM, Jonathan Ellis <jbel...@gmail.com>wrote:
>>>
>>>>
>>>> http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows
>>>>
>>>>
>>>> On Fri, Aug 30, 2013 at 12:53 PM, Peter Lin <wool...@gmail.com> wrote:
>>>>
>>>>>
>>>>> my bias perspective, I find the sweet spot is thrift for insert/update
>>>>> and CQL for select queries.
>>>>>
>>>>> CQL is too limiting and negates the power of storing arbitrary data
>>>>> types in dynamic columns.
>>>>>
>>>>>
>>>>> On Fri, Aug 30, 2013 at 1:45 PM, Jon Haddad <j...@jonhaddad.com> wrote:
>>>>>
>>>>>> If you're going to work with CQL, work with CQL.  If you're going to
>>>>>> work with Thrift, work with Thrift.  Don't mix.
>>>>>>
>>>>>> On Aug 30, 2013, at 10:38 AM, Vivek Mishra <mishra.v...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>> If i a create a table with CQL3 as
>>>>>>
>>>>>> create table user(user_id text PRIMARY KEY, first_name text,
>>>>>> last_name text, emailid text);
>>>>>>
>>>>>> and create index as:
>>>>>> create index on user(first_name);
>>>>>>
>>>>>> then inserted some data as:
>>>>>> insert into user(user_id,first_name,last_name,"emailId")
>>>>>> values('@mevivs','vivek','mishra','vivek.mis...@impetus.co.in');
>>>>>>
>>>>>>
>>>>>> Then if update same column family using Cassandra-cli as:
>>>>>>
>>>>>> update column family user with key_validation_class='UTF8Type' and
>>>>>> column_metadata=[{column_name:last_name, validation_class:'UTF8Type',
>>>>>> index_type:KEYS},{column_name:first_name, validation_class:'UTF8Type',
>>>>>> index_type:KEYS}];
>>>>>>
>>>>>>
>>>>>> Now if i connect via cqlsh and explore user table, i can see column
>>>>>> first_name,last_name are not part of table structure anymore. Here is the
>>>>>> output:
>>>>>>
>>>>>> CREATE TABLE user (
>>>>>>   key text PRIMARY KEY
>>>>>> ) WITH
>>>>>>   bloom_filter_fp_chance=0.010000 AND
>>>>>>   caching='KEYS_ONLY' AND
>>>>>>   comment='' AND
>>>>>>   dclocal_read_repair_chance=0.000000 AND
>>>>>>   gc_grace_seconds=864000 AND
>>>>>>   read_repair_chance=0.100000 AND
>>>>>>   replicate_on_write='true' AND
>>>>>>   populate_io_cache_on_flush='false' AND
>>>>>>   compaction={'class': 'SizeTieredCompactionStrategy'} AND
>>>>>>   compression={'sstable_compression': 'SnappyCompressor'};
>>>>>>
>>>>>> cqlsh:cql3usage> select * from user;
>>>>>>
>>>>>>  user_id
>>>>>> ---------
>>>>>>  @mevivs
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> I understand that, CQL3 and thrift interoperability is an issue. But
>>>>>> this looks to me a very basic scenario.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Any suggestions? Or If anybody can explain a reason behind this?
>>>>>>
>>>>>> -Vivek
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Jonathan Ellis
>>>> Project Chair, Apache Cassandra
>>>> co-founder, http://www.datastax.com
>>>> @spyced
>>>>
>>>
>>>
>>
>

Reply via email to