cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Thomas <ma...@apache.org>
Subject Re: Isolation in case of Single Partition Writes and Batching with LWT
Date Mon, 12 Sep 2016 13:14:42 GMT
On 12/09/2016 13:57, Ryan Svihla wrote:
> It was just the first place google turned up, I made an answer late in the evening trying
to help someone out on my own free time. 

Thanks for the background Ryan. That is really useful.

Googling for "CQL" and the first Apache hosted result (for me anyway) is
the 6th entry. 7th if you count the 'featured snippet' as position 1.

Interestingly, the results for "Cassandra" are much better.

SEO is not my area of expertise at all. Does anyone here have some
suggestions as to what could be done to improve our ranking for "CQL"
(and any similar search terms)?

Mark


> 
> Regards,
> 
> Ryan Svihla
> 
>> On Sep 12, 2016, at 6:34 AM, Mark Thomas <markt@apache.org> wrote:
>>
>>> On 11/09/2016 23:07, Ryan Svihla wrote:
>>> 1. A batch with updates to a single partition turns into a single
>>> mutation so partition writes aren't possible (so may as well use
>>> Unlogged batches)
>>> 2. Yes, so use local_serial or serial reads and all updates you want to
>>> honor LWT need to be LWT as well, this way everything is buying into the
>>> same protocol and behaving accordingly. 
>>> 3. LWT works with batch (has to be same partition).
>>> https://docs.datastax.com/en/cql/3.1/cql/cql_reference/batch_r.html if
>>> condition doesn't fire none of the batch will (same partition will mean
>>> it'll be the same mutation anyway so there really isn't any magic going on).
>>
>> Is there a good reason for linking to the 3rd party docs rather than the
>> official docs in this case? I can't see one at the moment.
>>
>> The official docs appear to be:
>>
>> http://cassandra.apache.org/doc/latest/cql/dml.html#batch
>>
>> It might not matter in this particular instance but it looks as if there
>> is a little more to the syntax than the 3rd party docs suggest (even if
>> you switch to the latest version of those 3rd party docs).
>>
>> Generally, if you are going to point to docs, please point to the
>> official Apache Cassandra docs unless there is a very good reason not
>> to. (And if the good reason is that there’s a deficiency in the Apache
>> Cassandra docs, please make it known on the list or in a Jira so someone
>> can write what’s missing)
>>
>> Mark
>>
>>
>>> Your biggest issue with such a design will be contention (as it would
>>> with an rdbms with say row locking), as by intent you're making all
>>> reads and writes block until any pending ones are complete. I'm sure
>>> there are a couple things I forgot but this is the standard wisdom. 
>>>
>>> Regards,
>>>
>>> Ryan Svihla
>>>
>>> On Sep 11, 2016, at 3:49 PM, Jens Rantil <jens.rantil@tink.se
>>> <mailto:jens.rantil@tink.se>> wrote:
>>>
>>>> Hi,
>>>>
>>>> This might be off-topic, but you could always use Zookeeper locking
>>>> and/or Apache Kafka topic keys for doing things like this.
>>>>
>>>> Cheers,
>>>> Jens
>>>>
>>>> On Tuesday, September 6, 2016, Bhuvan Rawal <bhu1rawal@gmail.com
>>>> <mailto:bhu1rawal@gmail.com>> wrote:
>>>>
>>>>    Hi,
>>>>
>>>>    We are working to solve on a multi threaded distributed design
>>>>    which in which a thread reads current state from Cassandra (Single
>>>>    partition ~ 20 Rows), does some computation and saves it back in.
>>>>    But it needs to be ensured that in between reading and writing by
>>>>    that thread any other thread should not have saved any operation
>>>>    on that partition.
>>>>
>>>>    We have thought of a solution for the same - *having a write_time
>>>>    column* in the schema and making it static. Every time the thread
>>>>    picks up a job read will be performed with LOCAL_QUORUM. While
>>>>    writing into Cassandra batch will contain a LWT (IF write_time is
>>>>    read time) otherwise read will be performed and computation will
>>>>    be done again and so on. This will ensure that while saving
>>>>    partition is in a state it was read from.
>>>>
>>>>    In order to avoid race condition we need to ensure couple of things:
>>>>
>>>>    1. While saving data in a batch with a single partition (*Rows may
>>>>    be Updates, Deletes, Inserts)* are they Isolated per replica node.
>>>>    (Not necessarily on a cluster as a whole). Is there a possibility
>>>>    of client reading partial rows?
>>>>
>>>>    2. If we do a LOCAL_QUORUM read and LOCAL_QUORUM writes in this
>>>>    case could there a chance of inconsistency in this case (When LWT
>>>>    is being used in batches).
>>>>
>>>>    3. Is it possible to use multiple LWT in a single Batch? In
>>>>    general how does LWT performs with Batch and is Paxos acted on
>>>>    before batch execution?
>>>>
>>>>    Can someone help us with this?
>>>>
>>>>    Thanks & Regards,
>>>>    Bhuvan
>>>>
>>>>
>>>>
>>>> -- 
>>>> Jens Rantil
>>>> Backend engineer
>>>> Tink AB
>>>>
>>>> Email: jens.rantil@tink.se <mailto:jens.rantil@tink.se>
>>>> Phone: +46 708 84 18 32
>>>> Web: www.tink.se <http://www.tink.se/>
>>>>
>>>> Facebook <https://www.facebook.com/#!/tink.se> Linkedin
>>>> <http://www.linkedin.com/company/2735919?trk=vsrp_companies_res_photo&trkInfo=VSRPsearchId%3A1057023381369207406670%2CVSRPtargetId%3A2735919%2CVSRPcmpt%3Aprimary>
Twitter
>>>> <https://twitter.com/tink>
>>


Mime
View raw message