Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures Cassandra NoSQL-域和页面的最佳数据结构_Data Structures_Cassandra_Cql_Database_Nosql - Fatal编程技术网

Data structures Cassandra 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

我从noSQL开始,看了一些很棒的教程和解释。然而,我仍然以关系的方式思考,这就是为什么我请求您的帮助

我有以下简单的关系模型,它存储域及其页面,并且能够保存页面标题和描述更新的历史记录

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作为集群键,源页面作为列