Cassandra数据建模-设计列

2eafrhcq  于 12个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(202)

我在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表

CREATE TABLE port(
   user_id UUID,
   account_id UUID,
   trade_date TIMESTAMP,
   shares INT,
   price_per_share DECIMAL,
   PRIMARY KEY ((user_id, account_id), trade_id)
);


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

  • 对于域对象的示例,只能填充“strData "、”longData“和”doubleData“中的一个
  • 需要具备根据'key'查询表中数据的能力
  • 预计将更多属性添加到域类,如BooleanData,自定义嵌套对象,计划在Cassandra中存储为Blob

我应该如何设计列呢?我可以通过添加6列来表示每个可能的类型(即StringType,DoubleType,LongType)的键/值,但是还有其他方法吗?

93ze6v8z

93ze6v8z1#

你能提供你现有的模式是什么样的吗?这里没有足够的信息来正确地提出一个解决方案。下面是我基于几个假设的看法。
此外,您可以利用this free browser-based data modeling课程来学习如何在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 = ?;


同样,我只是假设了你现有的表模式并提出了上面的问题,但是如果你用额外的细节来更新你原来的问题-现有的模式,查询/访问模式等,我们可能能够更有效地设计这个问题。

相关问题