incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Lin <wool...@gmail.com>
Subject Re: CQL & Thrift
Date Fri, 30 Aug 2013 19:03:16 GMT
CQL3 collections is meant to store stuff that is list, set, map. Plus,
collections currently do not supporting secondary indexes.

The point is often you don't know what columns are needed at design time.
If you know what's needed, use static columns.

Using a list, set or map to store data you don't know and can't predict in
the future feels like "a hammer solution". Cassandra has this super
powerful and useful feature that developers can use via thrift.

The last time I looked DataStax's official statement is that thrift isn't
going away, so I take them at their word.



On Fri, Aug 30, 2013 at 2:51 PM, Vivek Mishra <mishra.vivs@gmail.com> wrote:

> 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 <woolfel@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.vivs@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 <woolfel@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 <jbellis@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 <woolfel@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 <jon@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.vivs@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.mishra@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
>>>>>
>>>>
>>>>
>>>
>>
>

Mime
View raw message