[
https://issues.apache.org/jira/browse/CASSANDRA-9200?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14541556#comment-14541556
]
Robert Stupp commented on CASSANDRA-9200:
-----------------------------------------
The linked branch contains an implementation of sequences. The code is still
ugly but works including utests.
Syntax is explained in {{CQL.textile}} like this:
{code}
<create-sequence-stmt> ::= CREATE ( OR REPLACE )? SEQUENCE ( IF NOT EXISTS )?
( <keyspace> '.' )? <sequencename>
( INCREMENT ( BY )? <integer> )?
( ( MINVALUE <integer> ) | ( NO MINVALUE ) )?
( ( MAXVALUE <integer> ) | ( NO MAXVALUE ) )?
( START ( WITH )? <integer> )?
( CACHE <integer> )?
( CACHE LOCAL <integer> )?
( SERIAL CONSISTENCY LEVEL <consistencyLevel> )?
( CONSISTENCY LEVEL <consistencyLevel> )?
{code}
Access to sequences:
{code}
SELECT nextval('keyspace_name', 'sequence_name') FROM table;
{code}
The implementation uses three tables:
# {{system.schema_sequences}} holding the sequence definitions
# {{system_distributed.seq_reservations}} tracking the next available sequence
value
# {{system.sequence_local}} tracking the range of values exclusively assigned
to a node
Notes:
* {{CACHE}} defines the number of values to acquire from the overall range
({{system_distributed.seq_reservations}}).
* {{CACHE LOCAL}} (defaults to {{CACHE}}) defines the number of values to take
from {{system.sequence_local}} - not sure whether to keep that option. It's not
really necessary and its only limited use is when a node crashes without being
gracefully shut down.
* the consistency levels are those used to read from/modify
{{system_distributed.seq_reservations}}
* I've not included a {{CYCLE}} option. Reason for that is that it would
require a global synchronization of all nodes to ensure that no node still owns
a range before wrapping around.
* It also has some limited support for permissions (CASSANDRA-9372).
* {{SELECT nextval}} would benefit from virtual tables (CASSANDRA-7622) - i.e.
{{SELECT nextval(...) FROM DUAL}}
* Implementation of {{nextval()}} function requires to pass constant values to
function arguments (sneaked into the branch)
> Sequences
> ---------
>
> Key: CASSANDRA-9200
> URL: https://issues.apache.org/jira/browse/CASSANDRA-9200
> Project: Cassandra
> Issue Type: New Feature
> Reporter: Jonathan Ellis
> Assignee: Robert Stupp
> Fix For: 3.x
>
>
> UUIDs are usually the right choice for surrogate keys, but sometimes
> application constraints dictate an increasing numeric value.
> We could do this by using LWT to reserve "blocks" of the sequence for each
> member of the cluster, which would eliminate paxos contention at the cost of
> not being strictly increasing.
> PostgreSQL syntax:
> http://www.postgresql.org/docs/9.4/static/sql-createsequence.html
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)