我需要根据IP地址存储有关用户位置的记录,但我不确定最佳建模方式。
对于每个地址,我们需要记录机器的详细信息(IP地址、代理ID)和机器的位置(ISO代码、城市)。这些信息永远不会被更新 - 只能插入和读取。
查询这些数据需要在给定的时间段内检索特定用户的位置信息。
传统上,我会使用宽行CF与JSON blob进行建模,如下所示:
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,将json分隔成专用列,例如:
CREATE TABLE user_location (
userid text,
timestamp timeuuid,
agentid text,
isocode text,
city text,
ipaddress text,
PRIMARY KEY (userid, timestamp)
);
什么是建模此类数据的推荐方法?