我的 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 映射
一些事实:
我应该如何设计色谱柱?我可以通过添加 6 列来表示每个可能类型的键/值,即 StringType、DoubleType、LongType,但是还有其他方法可以做到这一点吗?
您能提供一下您现有的模式吗?这里没有足够的信息来正确提出解决方案。这是我基于几个假设的看法。
此外,您还可以利用这个基于浏览器的免费数据建模课程来学习如何在 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 = ?;
再次,我只是假设您现有的表架构并提出了上述建议,但如果您要使用其他详细信息(现有架构、查询/访问模式等)更新原始问题,我们也许能够更有效地设计它。