我在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)的键/值,但是还有其他方法吗?
1条答案
按热度按时间93ze6v8z1#
你能提供你现有的模式是什么样的吗?这里没有足够的信息来正确地提出一个解决方案。下面是我基于几个假设的看法。
此外,您可以利用this free browser-based data modeling课程来学习如何在Cassandra中执行数据建模。
字符串
如果你有一个像上面这样的表,你可以简单地将值持久化为,
型
在应用程序端,您可以利用基于
key_type
列值的数据将其解析为所需的类型,然后简单地查询domain
表:型
(或)
型
同样,我只是假设了你现有的表模式并提出了上面的问题,但是如果你用额外的细节来更新你原来的问题-现有的模式,查询/访问模式等,我们可能能够更有效地设计这个问题。