cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ali Akhtar <ali.rac...@gmail.com>
Subject Re: Consistency when adding data to collections concurrently?
Date Sun, 13 Nov 2016 12:42:26 GMT
Yeah, except I guess there's a minor debate left on whether it'd be more
performant to store the labels in their own table, and do a read query each
time when the parent item is fetched.

Or if they should be kept as a set<label> on the parent item and take the
penalty when updating / deleting labels. (Which will be rare, by the way.)

On Sun, Nov 13, 2016 at 5:38 PM, DuyHai Doan <doanduyhai@gmail.com> wrote:

> So problem solved!
>
> On Sun, Nov 13, 2016 at 1:37 PM, Ali Akhtar <ali.rac200@gmail.com> wrote:
>
>> Yeah, I am using set<label> (not set<text> though)
>>
>> On Sun, Nov 13, 2016 at 5:36 PM, DuyHai Doan <doanduyhai@gmail.com>
>> wrote:
>>
>>> Yes you'd have to know the UDT values since it's part of the primary key
>>> to query your data.
>>>
>>> If I were you I would stick to using a set<text> and use UPDATE my_table
>>> SET labels = labels + <new_label>;
>>>
>>> It does work well with concurrent updates.
>>>
>>> On Sun, Nov 13, 2016 at 1:32 PM, Ali Akhtar <ali.rac200@gmail.com>
>>> wrote:
>>>
>>>> But then how would you query it? You'd need to know all the values of
>>>> the udt, right?
>>>>
>>>> On Sun, Nov 13, 2016 at 5:30 PM, DuyHai Doan <doanduyhai@gmail.com>
>>>> wrote:
>>>>
>>>>> "Also can you make a UDT a clustered key?" --> yes if it's frozen
>>>>>
>>>>> On Sun, Nov 13, 2016 at 1:25 PM, Ali Akhtar <ali.rac200@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> If I wanted to get all values for an item, including its labels,
how
>>>>>> would that be done in the above case?
>>>>>>
>>>>>> Also can you make a UDT a clustered key?
>>>>>>
>>>>>> On Sun, Nov 13, 2016 at 4:33 AM, Manoj Khangaonkar <
>>>>>> khangaonkar@gmail.com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> Instead of using a collection, consider making label a clustered
>>>>>>> column.
>>>>>>>
>>>>>>> With this each request will essentially append a column (label)
to
>>>>>>> the partition.
>>>>>>>
>>>>>>> To get all labels would be a simple query
>>>>>>>
>>>>>>> select label from table where partitionkey = "value".
>>>>>>>
>>>>>>> In general , read + update  of a column is an anti pattern in
>>>>>>> cassandra - which is what you are doing. What I suggesting
>>>>>>> above is appending more columns and not updating existing columns.
>>>>>>>
>>>>>>> regards
>>>>>>>
>>>>>>> regards
>>>>>>>
>>>>>>> On Sat, Nov 12, 2016 at 2:34 AM, Ali Akhtar <ali.rac200@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I have a table where each record contains a list<string>
of labels.
>>>>>>>>
>>>>>>>> I have an endpoint which responds to new labels being added
to a
>>>>>>>> record by the user.
>>>>>>>>
>>>>>>>> Consider the following scenario:
>>>>>>>>
>>>>>>>> - Record X, labels = []
>>>>>>>> - User selects 2 labels, clicks a button, and 2 http requests
are
>>>>>>>> generated.
>>>>>>>> - The server receives request for Label 1 and Label 2 at
the same
>>>>>>>> time.
>>>>>>>> - Both requests see the labels as empty, add 1 label to the
>>>>>>>> collection, and send it.
>>>>>>>> - Record state as label 1 request sees it: [1], as label
2 sees it:
>>>>>>>> [2]
>>>>>>>>
>>>>>>>> How will the above conflict be resolved? What can I do so
I end up
>>>>>>>> with [1, 2] instead of either [1] or [2] after both requests
have been
>>>>>>>> processed?
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> http://khangaonkar.blogspot.com/
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Mime
View raw message