我们知道在SQL数据库中创建自动增量ID很容易,在Cassandra中有一个很好的解决方案吗?ID应该是键名或列名.
Alo*_*onL 33
使用Cassandra的轻量级交易,以下情况如何?
CREATE TABLE ids (
id_name varchar,
next_id int,
PRIMARY KEY (id_name)
)
Run Code Online (Sandbox Code Playgroud)
例如:
INSERT INTO ids (id_name, next_id)
VALUES ('person_id', 1)
Run Code Online (Sandbox Code Playgroud)
SELECT next_id FROM ids WHERE id_name = 'person_id'
Run Code Online (Sandbox Code Playgroud)
假设结果是next_id = 1
UPDATE ids SET next_id = 2 WHERE id_name = 'person_id' IF next_id = 1
Run Code Online (Sandbox Code Playgroud)
结果应如下所示:
[{[applied]: True}]
Run Code Online (Sandbox Code Playgroud)
如果它已成功更新,或者
[{[applied]: False, next_id: 2}]
Run Code Online (Sandbox Code Playgroud)
如果其他人已经更新了它.
所以,如果你得到True,请使用id'1' - 它是你的.否则,递增next_id(或只使用返回的next_id)并重复该过程.
Sim*_*mon 15
没有好的解决方案.
要么
只要有任何事情超出单个实例,id的排序就会变得复杂,至少如果你想扩展它.这包括关系数据库.
小智 5
有一个可以使用的计数器数据类型.考虑下面的例子.
CREATE KEYSPACE counterks WITH REPLICATION =
{ 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 };
Run Code Online (Sandbox Code Playgroud)
为计数器列创建一个表.
CREATE TABLE counterks.page_view_counts
(counter_value counter,
url_name varchar,
page_name varchar,
PRIMARY KEY (url_name, page_name)
);
Run Code Online (Sandbox Code Playgroud)
将数据加载到计数器列中.
UPDATE counterks.page_view_counts
SET counter_value = counter_value + 1
WHERE url_name='www.datastax.com' AND page_name='home';
Run Code Online (Sandbox Code Playgroud)
看一下计数器值.
SELECT * FROM counterks.page_view_counts;
Run Code Online (Sandbox Code Playgroud)
输出是:
url_name | page_name | counter_value
------------------+-----------+---------------
www.datastax.com | home | 1
Run Code Online (Sandbox Code Playgroud)
增加柜台的价值.
UPDATE counterks.page_view_counts
SET counter_value = counter_value + 2
WHERE url_name='www.datastax.com' AND page_name='home';
Run Code Online (Sandbox Code Playgroud)
看一下计数器值.
url_name | page_name | counter_value
------------------+-----------+---------------
www.datastax.com | home | 3
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅此处:http://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html
| 归档时间: |
|
| 查看次数: |
51577 次 |
| 最近记录: |