cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ben McCann <...@benmccann.com>
Subject Re: How to store a list of values?
Date Mon, 26 Mar 2012 17:04:11 GMT
True.  But I don't need the skills to be searchable, so I'd rather embed
them in the user than add another top-level CF.  I was thinking of doing
something along the lines of adding a skills super column to the User table:

skills: {
  'java': null,
  'c++': null,
  'cobol': null
}

However, I'm still not sure yet how to accomplish this with Astyanax.  I've
only figured out how to make composite columns with predefined column names
with it and not dynamic column names like this.



On Mon, Mar 26, 2012 at 9:08 AM, R. Verlangen <robin@us2.nl> wrote:

> In this case you only neem the columns for values. You don't need the
> column-values to hold multiple columns (the super-column principle). So a
> normal CF would work.
>
>
> 2012/3/26 Ben McCann <ben@benmccann.com>
>
>> Thanks for the reply Samal.  I did not realize that you could store a
>> column with null value.  Do you know if this solution would work with
>> composite columns?  It seems super columns are being phased out in favor of
>> composites, but I do not understand composites very well yet.  I'm trying
>> to figure out if there's any way to accomplish what you've suggested using
>> Astyanax <https://github.com/Netflix/astyanax>.
>>
>> Thanks for the help,
>> Ben
>>
>>
>> On Mon, Mar 26, 2012 at 8:46 AM, samal <samalgorai@gmail.com> wrote:
>>
>>> plus it is fully compatible with CQL.
>>> SELECT * FROM UserSkill WHERE KEY='ben';
>>>
>>>
>>> On Mon, Mar 26, 2012 at 9:13 PM, samal <samalgorai@gmail.com> wrote:
>>>
>>>> I would take simple approach. create one other CF "UserSkill"  with row
>>>> key same as profile_cf key,
>>>> In user_skill cf will add skill as column name and value null. Columns
>>>> can be added or removed.
>>>>
>>>> UserProfile={
>>>>   '*ben*'={
>>>>    blah :blah
>>>>    blah :blah
>>>>    blah :blah
>>>>  }
>>>> }
>>>>
>>>> UserSkill={
>>>>   '*ben*'={
>>>>     'java':''
>>>>     'cassandra':''
>>>>   .
>>>>   .
>>>>   .
>>>>   'linux':''
>>>>   'skill':'infinity'
>>>>
>>>>  }
>>>>
>>>> }
>>>>
>>>>
>>>> On Mon, Mar 26, 2012 at 12:34 PM, Ben McCann <ben@benmccann.com> wrote:
>>>>
>>>>> I have a profile column family and want to store a list of skills in
>>>>> each profile.  In BigTable I could store a Protocol Buffer<http://code.google.com/apis/protocolbuffers/docs/overview.html>with
a repeated field, but I'm not sure how this is typically accomplished
>>>>> in Cassandra.  One option would be to store a serialized Thrift<http://thrift.apache.org/>or
protobuf, but I'd prefer not to do this as I believe Cassandra doesn't
>>>>> have knowledge of these formats, and so the data in the datastore would
not
>>>>> not human readable in CQL queries from the command line.  The other
>>>>> solution I thought of would be to use a super column and put a random
UUID
>>>>> as the key for each skill:
>>>>>
>>>>> skills: {
>>>>>   '4b27c2b3ac48e8df': 'java',
>>>>>   '84bf94ea7bc92018': 'c++',
>>>>>   '9103b9a93ce9d18': 'cobol'
>>>>> }
>>>>>
>>>>> Is this a good way of handling lists in Cassandra?  I imagine there's
>>>>> some idiom I'm not aware of.  I'm using the Astyanax<https://github.com/Netflix/astyanax/wiki>client
library, which only supports composite columns instead of super
>>>>> columns, and so the solution I proposed above would seem quite awkward
in
>>>>> that case.  Though I'm still having some trouble understanding composite
>>>>> columns as they seem not to be completely documented yet.  Would this
>>>>> solution work with composite columns?
>>>>>
>>>>> Thanks,
>>>>> Ben
>>>>>
>>>>>
>>>>
>>>
>>
>
>
> --
> With kind regards,
>
> Robin Verlangen
> www.robinverlangen.nl
>
>

Mime
View raw message