Cassandra CQL3:JSON或UDT

Cassandra CQL3:JSON或UDT,json,cassandra,cql3,user-defined-types,Json,Cassandra,Cql3,User Defined Types,我需要根据IP地址存储有关用户位置的记录,但我不确定如何对其进行最佳建模 对于每个地址,我们需要记录机器的详细信息(ipaddress,agentId)和机器的位置(isocode,city)。此信息永远不会更新-仅插入和读取 对该数据的查询需要在给定的时间段内提取特定用户的位置信息 传统上,我会使用带有JSON blob的宽行CF对此进行建模,大致如下: CREATE TABLE user_location ( userid text, timestamp timeuuid, data tex

我需要根据IP地址存储有关用户位置的记录,但我不确定如何对其进行最佳建模

对于每个地址,我们需要记录机器的详细信息(ipaddress,agentId)和机器的位置(isocode,city)。此信息永远不会更新-仅插入和读取

对该数据的查询需要在给定的时间段内提取特定用户的位置信息

传统上,我会使用带有JSON blob的宽行CF对此进行建模,大致如下:

CREATE TABLE user_location (
userid text,
timestamp timeuuid,
data text, -- json blob {agentid, isocode, city, ipaddress}
PRIMARY KEY (userid, timestamp)
);
我现在质疑这是否是最好的方法,我是否应该用用户定义类型(UDT)替换JSON,例如:

CREATE TYPE machinelocation (
isocode text,
city text,
ipaddress inet
);

CREATE TABLE user_location (
userid text,
timestamp timeuuid,
machinelocations map<text, machinelocation>
PRIMARY KEY (userid, timestamp)
);

对于这种类型的数据建模,推荐的方法是什么?

我将使用单独的列,除非您真的总是在拉完整的blob。即使这样,我可能还是会选择单独的专栏。我看到的UDT的最佳用例是能够将它们放入集合中,这样您就可以拥有一个集合,每个项目有多个字段。

感谢您的回复。除了最终的列限制(我无论如何都不会达到这个限制)之外,您能想到将它们划分为专用列的任何缺点吗?Cassandra将不得不在专用列的情况下在服务器端做更多的工作,因此在一个玩具场景中,开销可能会随着使用更多的cpu而显示出来。但是它不应该与任何实际的工作负载有任何区别,它给您带来的好处不仅仅是检索整个blob。
CREATE TABLE user_location (
userid text,
timestamp timeuuid,
agentid text,
isocode text,
city text,
ipaddress text,
PRIMARY KEY (userid, timestamp)
);