【问题标题】:Cassandra NoSQL - optimal data structure for domains and pagesCassandra NoSQL - 域和页面的最佳数据结构
【发布时间】:2015-12-22 20:44:36
【问题描述】:

我从 noSQL 开始,观看了像 https://www.youtube.com/watch?v=tg6eIht-00M 这样的精彩教程和解释。但是,我仍在以关系的方式思考,这就是我寻求您帮助的原因。

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

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 将网络技术分配给域

最佳结构是什么样子的?

【问题讨论】:

    标签: data-structures cassandra cql database nosql


    【解决方案1】:

    对于 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_updated,则返回单个记录,或者返回按 page_updated 排序的所有记录更新。那是你需要做的吗?这就是你需要做的一切吗?你用url 做什么?

    【讨论】:

    • 感谢您的回复。大多数情况下,我想检索单个记录(最后更新的页面)。但对我来说最关键的是另一个名为“链接”的表,该表存储实际的源页面和目标页面,我想列出给定目标页面的链接中的所有记录。
    • 因此您将创建一个表,其中目标页面作为分区键,链接 ID 作为集群键,源页面作为列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多