Data structures Cassandra NoSQL-域和页面的最佳数据结构
我从noSQL开始,看了一些很棒的教程和解释。然而,我仍然以关系的方式思考,这就是为什么我请求您的帮助 我有以下简单的关系模型,它存储域及其页面,并且能够保存页面标题和描述更新的历史记录Data structures Cassandra NoSQL-域和页面的最佳数据结构,data-structures,cassandra,cql,database,nosql,Data Structures,Cassandra,Cql,Database,Nosql,我从noSQL开始,看了一些很棒的教程和解释。然而,我仍然以关系的方式思考,这就是为什么我请求您的帮助 我有以下简单的关系模型,它存储域及其页面,并且能够保存页面标题和描述更新的历史记录 CREATE TABLE domain ( id bigint(20) NOT NULL AUTO_INCREMENT, name TEXT, suffix TEXT, PRIMARY KEY (id) ) ENGINE=InnoDB; CREATE TABLE page ( id big
CREATE TABLE domain (
id bigint(20) NOT NULL AUTO_INCREMENT,
name TEXT,
suffix TEXT,
PRIMARY KEY (id)
) ENGINE=InnoDB;
CREATE TABLE page (
id bigint(20) NOT NULL AUTO_INCREMENT,
domainid bigint(20),
url TEXT,
PRIMARY KEY (id),
FOREIGN KEY (domainid) REFERENCES domain(id)
) ENGINE=InnoDB;
CREATE TABLE page_update (
id bigint(20) NOT NULL AUTO_INCREMENT,
pageid bigint(20),
updated TIMESTAMP,
title TEXT,
descr TEXT,
PRIMARY KEY (id),
FOREIGN KEY (pageid) REFERENCES page(id)
) ENGINE=InnoDB;
我想将此模型转换为CQL:
我应该创建非规范化的表页,并根据域后缀(.com、.net、.de、…)和名称将其分发到分区上。并设置聚类索引来更新时间
CREATE TABLE page (
domain_name text,
domain_suffix text,
page_url text,
page_title text,
page_descr text,
page_updated timestamp,
PRIMARY KEY ((domain_suffix, domain_name), page_updated)
);
然而,我不确定这是否最佳,因为
- 我必须为每次更新保留域名、后缀和页面url,所以会有很多重复李>
- 每次更新都将生成整行数据,而不是它的一部分
- 我想要其他表中的地址域或页面。例如,我有另一个表domain_technlogy,它将web技术分配给域
最佳结构会是什么样子?对于cassandra,正确的建模方法是首先考虑SELECT查询,然后构建便于这些查询的表 您需要什么查询 您提供的架构:
CREATE TABLE page (
domain_name text,
domain_suffix text,
page_url text,
page_title text,
page_descr text,
page_updated timestamp,
PRIMARY KEY ((domain_suffix, domain_name), page_updated)
);
将允许您在知道后缀+域名的情况下查找url+title+descr,如果您知道
page\u updated
,则返回单个记录,或者返回由page\u updated
订购的所有记录更新。这就是你需要做的吗?你只需要这么做吗?你使用url
做什么 谢谢你的回复。我主要想检索单个记录(最后更新的页面)。但对我来说最关键的是另一个名为“link”的表。这个表存储实际的源页面和目标页面,我想列出给定目标页面链接中的所有记录。因此,您可以创建一个表,目标页面作为分区键,链接id作为集群键,源页面作为列