如何在键值存储中存储带有 2 个键的记录?
how can I store a record with 2 keys in a key value store?
这是一道半理论题,我学的是系统设计,没有接触过KV store。
问题是关于设计聊天应用程序。
我有这样的架构:
Message
PK | channel_id bigint
| message_id bigint
_______________
| user_id
| content
| created_at
...
我如何组织这些信息以存储在像 Hbase 或 Cassandra 这样的键-值存储中?
Cassandra 支持组合键
所以你可以做一个键 channel_id + message_id
您的模式的示例结构:
CREATE TABLE message (
channel_id bigint,
message_id bigint,
user_id bigint,
content text,
created_at date,
PRIMARY KEY (channel_id, message_id)
);
然而,cassandra 密钥有点难。
使用 PRIMARY KEY (channel_id, message_id)
你只定义如何分区你的数据,
但也有 CLUSTERING KEY 选项来定义排序
在这种情况下可能是
PRIMARY KEY ((channel_id, message_id), created_at)
这意味着按 channel_id + message_id
分区并根据 created_at
对分区进行排序。
进一步阅读 cassandra 中的键:
Difference between keys in cassandra
这是一道半理论题,我学的是系统设计,没有接触过KV store。 问题是关于设计聊天应用程序。
我有这样的架构:
Message
PK | channel_id bigint
| message_id bigint
_______________
| user_id
| content
| created_at
...
我如何组织这些信息以存储在像 Hbase 或 Cassandra 这样的键-值存储中?
Cassandra 支持组合键
所以你可以做一个键 channel_id + message_id
您的模式的示例结构:
CREATE TABLE message (
channel_id bigint,
message_id bigint,
user_id bigint,
content text,
created_at date,
PRIMARY KEY (channel_id, message_id)
);
然而,cassandra 密钥有点难。
使用 PRIMARY KEY (channel_id, message_id)
你只定义如何分区你的数据,
但也有 CLUSTERING KEY 选项来定义排序
在这种情况下可能是
PRIMARY KEY ((channel_id, message_id), created_at)
这意味着按 channel_id + message_id
分区并根据 created_at
对分区进行排序。
进一步阅读 cassandra 中的键:
Difference between keys in cassandra