首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Cassandra中为TinyURL用例设计表?

如何在Cassandra中为TinyURL用例设计表?
EN

Stack Overflow用户
提问于 2022-03-05 01:15:04
回答 2查看 74关注 0票数 1

最近我遇到了一个著名的设计问题。“”

我发现的是为NoSQL星展担保的人,如DynamoDB或Cassandra。我已经读了几天关于Cassandra的文章,我想围绕这个DB为这个特定的问题设计我的解决方案。

  1. 表的定义是什么?如果我选择下表定义:

创建表UrlMap(tiny_url文本主键,url文本);

这不是会导致很多分区吗?由于分区键可以接受大约68B值(使用6个char base64字符串)

这在某种程度上会影响整体读写性能吗?如果是这样的话,有什么更好的模型来定义表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-05 08:55:19

Cassandra中数据建模的主要原则是为每个应用程序查询设计一个表。

对于URL缩短服务,主要的应用程序查询是为给定的微小URI检索等效的完整URL。在伪代码中,查询如下:

代码语言:javascript
复制
    GET long url FROM datastore WHERE uri = ?

请注意,为了服务的目的,我们不会存储web域名来使应用程序在任何领域可重用。过滤器(WHERE子句)是URI,所以这就是您想要的分区键,因此我们将相应地设计表:

代码语言:javascript
复制
CREATE TABLE urls_by_uri (
    uri text,
    long_url text,
    PRIMARY KEY(uri)
)

如果我们想检索http://tinyu.rl/abc123的URL,CQL查询是:

代码语言:javascript
复制
    SELECT long_url FROM urls_by_uri WHERE uri = 'abc123'

正如Phact和Andrew所指出的,没有必要担心您将存储在表中的分区(记录)的数量,因为您可以在Cassandra表中存储多达2^128个分区,这实际上是无限的。

在Cassandra中,使用Murmur3哈希算法(默认分区)将每个分区散列为一个令牌值。此实现将每个分区随机分布在集群中的所有节点上。同样的哈希算法用于确定哪个节点“拥有”分区,使得在Cassandra中检索(读取)非常快。

只要将SELECT查询限制在一个分区上,检索数据就会非常快。事实上,我与数百家拥有SLA的公司合作,在6-9毫秒之间读取95%的数据。这在Cassandra中是可以实现的,当您正确地建模数据并正确调整集群的大小时。干杯!

票数 1
EN

Stack Overflow用户

发布于 2022-03-05 02:12:02

很多分区都很好,可以把它看作是使用c*作为一个键值存储。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71358726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档