如何在键值存储中存储带有 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