incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Edward Capriolo <edlinuxg...@gmail.com>
Subject Re: Retrieve all composite columns from a row, whose composite name's first component matches from a list of Integers
Date Thu, 29 Dec 2011 21:13:42 GMT
vi ./src/java/org/apache/cassandra/db/marshal/CompositeType.java

'end-of-component' byte should always be 0 for actual column name.
 * However, it can set to 1 for query bounds. This allows to query for the
 * equivalent of 'give me the full super-column'. That is, if during a slice
 * query uses:
 *   start = <3><"foo".getBytes()><0>
 *   end   = <3><"foo".getBytes()><1>

So with composites columns you can do:

scf [b][1][*]

by setting the start and end component.

But you can not do
scf [b][1][*]
scf [b][7][*]
in a single operation with composites.

You seen to say you can query for a list of supercolumns, I am not
sure how this works because the ColumnParent seems to only accept a
single SuperColumn, but if you can do it I am not calling you a liar.

Maybe this is a good case for 'server side scanners'. Ow man I know
jbellis read this and put my face up on a dart board.




On 12/29/11, Aditya <adynnn@gmail.com> wrote:
> On Fri, Dec 30, 2011 at 1:42 AM, Edward Capriolo
> <edlinuxguru@gmail.com>wrote:
>
>> Hum...
>>
>> Do you have this?
>> scf [b][1][a]=value
>> scf [b][1][x]=value
>> scf [b][7][b]=value
>>
>> and you want to slice:
>> scf [b][1][*]
>>
>> Which would result in
>>
>> scf [b][1][a]=value
>> scf [b][1][x]=value
>>
>> ?
>>
>
> Exactly I have this!
> And as for the queries, I want to retrieve columns (satisfying from a list
> of wildcard names) , something like below :
>
> scf [b][1][*]
> scf [b][7][*]
>
> Now this type of queries are not possible with composite columns but it is
> very easily achievable through use of supercolumns, i can simply query for
> a list of  supercolumns(with entire subcolumns) by name. Right?
>
> So this is easier in terms of designing a query but since I don't
> understand much about the internals and all, I am not sure if this is best
> option for me, though by looking at my retrieval needs I feel somewhat
> biased towards using supercolumns.
>
>>
>> The composite version of this would be:
>> cf [b][1:a]=value
>> cf [b][1:x]=value
>> cf [b][7:b]=value
>>
>> I am not sure exactly what you are doing because A SlicePredicate
>> takes either a list of columns or a SliceRange. A ColumnPath takes a
>> Single SuperColumn.
>>
>> I do not see how this is done with Columns or SuperColumns. Maybe you
>> can provide a code snippet and/or some sample data?
>>
>> On 12/29/11, Aditya <adynnn@gmail.com> wrote:
>> > @Edward: Perhaps you missed to notice that I need to always retrieve
>> > 'all
>> > columns' under the supercolumn at any time.. and as per my query
>> > requirements if I use composite columns instead of supercolumns then it
>> is
>> > impossible to do wildcard queries like the ones asked in this thread's
>> > headline but which is much easier to do through the use of supercolumns.
>> >
>> > On Thu, Dec 29, 2011 at 11:06 PM, Edward Capriolo
>> > <edlinuxguru@gmail.com>wrote:
>> >
>> >> The use case in question was: Only accessing some columns.
>> >>
>> >> Even if that is not the case:
>> >>
>> >> SuperColumns: 1 extra level of nesting
>> >> Composite Colunns: Arbitrary levels of nesting
>> >>
>> >> SuperColumns: More overhead (space on disk) then using your own
>> delimiter
>> >> '_'
>> >> SuperColumns: Likely going to be replaced in future c* version behind
>> >> the scenes by composite columns anyway
>> >> SuperColumns: Usually an afterthought for API developers, (support for
>> >> them comes "later")
>> >> SuperColumns: Almost always utilized incorrectly by users, users speak
>> >> of '10%' performance gains after they switch away from them.
>> >>
>> >> There are some (a small % of cases) where SuperColumns are a better
>> >> choice, but this is rare. With composites and concatenating columns
>> >> they have no great purpose any more, (bad analogy coming!) like a
>> >> mechanical type writer.
>> >>
>> >> On 12/29/11, Philippe <watcherfr@gmail.com> wrote:
>> >> > Would you stand by that statement in case all colums inside the super
>> >> > column need to be read?  Why?
>> >> >
>> >> > Thanks
>> >> > Le 28 déc. 2011 19:26, "Edward Capriolo" <edlinuxguru@gmail.com>
a
>> >> écrit :
>> >> >
>> >> >> Super columns have the same fundamental problem and perform worse
in
>> >> >> general. So switching from composites to super columns is NEVER
a
>> good
>> >> >> idea.
>> >> >>
>> >> >>
>> >> >> On Wed, Dec 28, 2011 at 1:19 PM, Aditya <adynnn@gmail.com>
wrote:
>> >> >>
>> >> >>> Since I have around 20 items to query, I guess making 20 queries
to
>> >> >>> retrieve activities by all followies on all of those 20 columns
>> would
>> >> too
>> >> >>> inefficient, so to take the advantage of more efficient queries,
>> >> >>> are
>> >> >>> supercolumns recommended for this case ? Anyways, in case I
use
>> >> >>> supercolumns, I need to retrieve the entire supercolumn at
any
>> >> >>> point
>> >> >>> of
>> >> >>> time & I am writing subcolumn(s) to the supercolumn at
different
>> times
>> >> >>> not
>> >> >>> at once.
>> >> >>>
>> >> >>> On Wed, Dec 28, 2011 at 8:07 PM, Edward Capriolo
>> >> >>> <edlinuxguru@gmail.com>wrote:
>> >> >>>
>> >> >>>> You need to execute one get slice operation for each item
id or if
>> >> >>>> the
>> >> >>>> row is not large , you can try one large get slice on the
entire
>> row
>> >> and
>> >> >>>> deal with the results client side.
>> >> >>>>
>> >> >>>> If you try method 1 When doing slices on composites you
can set
>> >> >>>> the
>> >> >>>> start inclusive or exclusive values to get only the column
you
>> >> >>>> want
>> >> and
>> >> >>>> not
>> >> >>>> some extra columns up to slice range size.
>> >> >>>>
>> >> >>>>
>> >> >>>> On Tuesday, December 27, 2011, Aditya <adynnn@gmail.com>
wrote:
>> >> >>>> > I need to store data of all activities by user's followies
in
>> >> >>>> > single
>> >> >>>> row. I am trying to do that making use of composite column
names
>> in a
>> >> >>>> single user specific row named 'rowX'.
>> >> >>>> > On any activity by a user's followie on an item, a
column is
>> stored
>> >> in
>> >> >>>> 'rowX'. The column has a composite type column name made
up of
>> >> >>>> itemId+userId (which makes it unique col. name) in rowX.
(& column
>> >> value
>> >> >>>> contains the activity data related to that item by that
followie)
>> >> >>>> >
>> >> >>>> > Now I want to retrieve activity by all users on a
list of items.
>> So
>> >> I
>> >> >>>> need to retrieve all composite columns with composite's
first
>> >> component
>> >> >>>> matching the itemId. Is it possible to do such a query
to
>> Cassandra ?
>> >> I
>> >> >>>> am
>> >> >>>> using Hector.
>> >> >>>>
>> >> >>>
>> >> >>>
>> >> >>
>> >> >
>> >>
>> >
>>
>

Mime
View raw message