[ 
https://issues.apache.org/jira/browse/CASSANDRA-13315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15903379#comment-15903379
 ] 

Jonathan Ellis commented on CASSANDRA-13315:
--------------------------------------------

I like this idea a lot.  We have a lot more experience now with how people use 
and misuse CL in the wild so I am comfortable getting a lot more opinionated in 
how we push people towards certain options and away from others.

1/2: The dual CL for Serial isn't for what to do w/ no condition, it's for the 
"commit" to EC land from the Paxos sandbox.  So mandating a condition (don't we 
already?) doesn't make that go away.  But, I think we could make that default 
to Q and call it good.  (I'm having trouble thinking of a situation where you 
would need LWT, which requires a quorum to participate already, but also need 
lower CL on commit.)

3: I would bikeshed this to

# EVENTUAL
# STRONG
# SERIAL

4. It sounds like we can do all of this at the drivers level except for adding 
some aliases to CQLSH.  I don't see any benefit to adding synonyms at the 
protocol level. 

5. How do we give power users the ability to use classic CL if they need it?

> Consistency is confusing for new users
> --------------------------------------
>
>                 Key: CASSANDRA-13315
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13315
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Ryan Svihla
>
> New users really struggle with consistency level and fall into a large number 
> of tarpits trying to decide on the right one.
> 1. There are a LOT of consistency levels and it's up to the end user to 
> reason about what combinations are valid and what is really what they intend 
> it to be. Is there any reason why write at ALL and read at CL TWO is better 
> than read at CL ONE? 
> 2. They require a good understanding of failure modes to do well. It's not 
> uncommon for people to use CL one and wonder why their data is missing.
> 3. The serial consistency level "bucket" is confusing to even write about and 
> easy to get wrong even for experienced users.
> So I propose the following steps:
> 1. Remove the "serial consistency" level of consistency levels and just have 
> all consistency levels in one bucket at the protocol level.
> 2. To enable #1 just reject writes or updates done without a condition when 
> SERIAL/LOCAL_SERIAL is specified.
> 3. add 3 new consistency levels pointing to existing ones but that infer 
> intent much more cleanly:
>    * EVENTUALLY_CONSISTENT = LOCAL_ONE reads and writes
>    * HIGHLY_CONSISTENT = LOCAL_QUORUM reads and writes
>    * TRANSACTIONALLY_CONSISTENT = LOCAL_SERIAL reads and writes
> for global levels of this I propose keeping the old ones around, they're 
> rarely used in the field except by accident or particularly opinionated and 
> advanced users.
> Drivers should put the new consistency levels in a new package and docs 
> should be updated to suggest their use. Likewise setting default CL should 
> only provide those three settings and applying it for reads and writes at the 
> same time.
> CQLSH I'm gonna suggest should default to HIGHLY_CONSISTENT. New sysadmins 
> get surprised by this frequently and I can think of a couple very major 
> escalations because people were confused what the default behavior was.
> The benefit to all this change is we shrink the surface area that one has to 
> understand when learning Cassandra greatly, and we have far less bad initial 
> experiences and surprises. New users will more likely be able to wrap their 
> brains around those 3 ideas more readily then they can "what happens when I 
> have RF2, QUROUM writes and ONE reads". Advanced users get access to all the 
> way still, while new users don't have to learn all the ins and outs of 
> distributed theory just to write data and be able to read it back.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to