Cassandra 数据建模 - 设计列

问题描述 投票:0回答:1

我的 Java 应用程序中有一个数据模型,如下所示,我希望在现有的 Cassandra 表中设计列(这是我第一次使用 Cassandra)

public class Domain {
    private StringType strData;
    private LongType longData;
    private DoubleType doubleData;

    // constructor, setters, getters
}


public class StringType {
   private String key;
   private String value;

   // constructor, getter, setters
}

public class LongType {
   private String key;
   private Long value;

   // constructor, getter, setters
}

public class DoubleType {
   private String key;
   private Double value;

   // constructor, getter, setters
}

我在 Cassandra 中有一个现有表,我希望向其中添加列,以便能够在表中存储域对象 - 表行和域对象之间的 1:1 映射

一些事实:

  • 仅会为 Domain 对象的实例填充“strData”、“longData”、“doubleData”之一
  • 需要具备根据‘key’查询表中数据的能力
  • 预计向 Domain 类添加更多属性,例如 BooleanData

我应该如何设计色谱柱?我可以通过添加 6 列来表示每个可能类型的键/值,即 StringType、DoubleType、LongType,但是还有其他方法可以做到这一点吗?

cassandra nosql data-modeling datamodel
1个回答
0
投票

您能提供一下您现有的模式吗?这里没有足够的信息来正确提出解决方案。这是我基于几个假设的看法。

此外,您还可以利用这个基于浏览器的免费数据建模课程来学习如何在 Cassandra 中执行数据建模。

CREATE TABLE IF NOE EXISTS domain (
  key text,
  key_type text,
  other_clustering_cols <>,
  ...
  PRIMARY KEY ((key_type, key), other_clustering_cols)
);

如果您有一个像上面这样的表,您可以简单地将值保留为,

INSERT INTO domain(key, key_type, other_clustering_cols, ...) VALUES ('key1', 'string', <clustering key cols values>, ...);

在应用程序方面,您可以利用基于

key_type
列值的数据将其解析为所需的类型,然后简单地查询
domain
表:

SELECT ... FROM domain WHERE key = ? AND key_type = ? AND other_clustering_cols = ?;

(或)

SELECT ... FROM domain WHERE key = ? AND key_type = ?;

再次,我只是假设您现有的表架构并提出了上述建议,但如果您要使用其他详细信息(现有架构、查询/访问模式等)更新原始问题,我们也许能够更有效地设计它。

© www.soinside.com 2019 - 2024. All rights reserved.