lka*_*ris 4 database database-design cassandra nosql database-schema
我有很多用户(150-2亿)。每个用户有 N(30-100) 个属性。该属性可以是整数、文本或时间戳类型。属性是未知的,所以我想动态地、即时地添加它们。
解决方案 1 - 通过更改表添加新列
CREATE TABLE USER_PROFILE(
UID uuid PRIMARY KEY,
LAST_UPDATE_DATE TIMESTAMP,
CREATION_DATE TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)
对于每个新属性:
ALTER TABLE USER_PROFILE ADD AGE INT;
INSERT INTO USER_PROFILE ( UID, LAST_UPDATE_DATE, CREATION_DATE, AGE) VALUES ('01f63e8b-db53-44ef-924e-7a3ccfaeec28', 2021-01-12 07:34:19.121, 2021-01-12 07:34:19.121, 27);
Run Code Online (Sandbox Code Playgroud)
解决方案 2 - 固定架构:
CREATE TABLE USER_PROFILE(
UID uuid,
ATTRIBUTE_NAME TEXT,
ATTRIBUTE_VALUE_TEXT TEXT,
ATTRIBUTE_VALUE_TIMESTAMP TIMESTAMP,
ATTRIBUTE_VALUE_INT INT,
LAST_UPDATE_DATE TIMESTAMP,
CREATION_DATE TIMESTAMP,
PRIMARY KEY (UID, ATTRIBUTE_NAME)
);
Run Code Online (Sandbox Code Playgroud)
对于每个新属性:
INSERT INTO USER_PROFILE ( UID, ATTRIBUTE_NAME, ATTRIBUTE_VALUE_INT, LAST_UPDATE_DATE, CREATION_DATE) VALUES ('01f63e8b-db53-44ef-924e-7a3ccfaeec28', 'age', 27, 2021-01-12 07:34:19.121, 2021-01-12 07:34:19.121, 27);
Run Code Online (Sandbox Code Playgroud)
就性能而言,哪个是最佳解决方案?
我个人会选择第二个解决方案 - 为所使用的每种数据类型提供列,并使用属性名称作为主键的最后一个组成部分(请参阅我之前关于该主题的答案中的示例:
\n\n第一种解决方案存在以下问题:
\n| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |