【问题标题】:Cassandra Table Design Strategy (KV v/s Horizontal Table)Cassandra 表设计策略(KV v/s 水平表)
【发布时间】:2021-09-19 00:48:33
【问题描述】:

我在选择策略时对 Cassandra 数据建模有疑问。

我需要存储由 id、姓名、电子邮件、出生日期、职务等属性组成的员工数据,但这些属性将来会增长。

分区键将是 id

表格设计有两种方式

  1. 创建员工表:

    CREATE TABLE employee_horizontal (
        id text,
        name text,
        email text,
        dob DATE,
        designation text,
        PRIMARY KEY (id)
    ) ;
    

    但在这里我有一个限制,我可以使用 id

    进行查询
  2. 创建员工表:

    CREATE TABLE employee_kv (
        id,
        key text, (predefined set of attributes name, email,dob, designation)
        value text,
        PRIMARY KEY (id,key)
    );
    

    上表将提供根据 id 和 key 进行查找的杠杆作用(如果该 key 存在于员工中)。

有人可以就上述策略提出一些优点/缺点吗?

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

    Cassandra 建模提倡数据非规范化。 Cassandra 的建模原则还说根据您的查询设计表。所以先写下你的查询。例如,如果您的查询可能是:

    1. 按 ID 获取员工。
    2. 通过电子邮件 ID 获取员工。
    3. 按指定获取员工。

    现在要为您的查询创建数据模型,您必须创建以下表格

    对于查询 1,

        CREATE TABLE employee_by_id (
        id text,
        name text,
        email text,
        dob DATE,
        designation text,
        PRIMARY KEY (id)) ;
    

    对于查询 2,

       CREATE TABLE employee_by_email (
        id text,
        name text,
        email text,
        dob DATE,
        designation text,
        PRIMARY KEY (email)) ;
    

    对于查询 3,

        CREATE TABLE employee_by_designation (
        id text,
        name text,
        email text,
        dob DATE,
        designation text,
        PRIMARY KEY ((designation), name)) ;
    

    这只是展示如何为 Cassandra 建模数据的示例。您不能有一个表来响应您的所有查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 2012-03-04
      • 2018-06-09
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 2023-03-29
      相关资源
      最近更新 更多