【发布时间】:2017-03-11 16:41:27
【问题描述】:
我正在尝试弄清楚如何使用 Cassandra 实现 URL 缩短服务。我有:
- 3 个 cassandra 节点(在 Docker 上)
- 将base10编码为base62数字(字符串)的函数
例如:
1 => a, 2 => b, 1205 => JR
这种方法的问题是我需要确定始终给出一个唯一的(递增的数字),以便下一个函数调用会给我一个唯一的字符串。
CREATE TABLE urls (
id int PRIMARY KEY, // 1215 (auto increment)
short_key text, // calculated short string from 1215
url text, // real url
created_at timestamp
) WITH CLUSTERING ORDER BY (created_at DESC);
使用DESC clustering,我总是可以从行中获取最后一个 id。这会产生一些问题:
- 每次写入前读取一行
- 如果你有很多写,所有 服务器必须知道下一个数字,即慢
你会如何解决这个问题?我试过用谷歌搜索解决方案,但在每个解决方案中我都发现了一个瓶颈。此外,哈希不是一种选择。
【问题讨论】:
-
您是否尝试使用专门为此目的而构建的“计数器”?
-
正如@xmas79 所说,您不能同时更新和读取计数器值。
标签: cassandra