【发布时间】:2015-02-20 20:20:43
【问题描述】:
我需要一些有关 Cassandra 数据建模的帮助。 以下是问题描述: 我有 3 台服务器处理用户请求 NodeA、NodeB 和 NodeC。我有 1000 个不同的开发人员(可能有 10000 个),并且必须为每个处理节点的每个开发人员保持 $ 余额。 我可以看到两种建模方式: 1) 以 developerid+balanceid 作为行键的 CF。 列名将是 NodeA、NodeB 和 NodeC。
create table {
developerBalanceid int primarykey;
nodeA varchar;
nodeB varchar;
nodeC varchar;
}
2) CF 具有以节点 ID 作为键的宽行。 列名称将为 developerid+balanceid。这似乎类似于存储在 Cassandra 中的时间序列数据。
create table {
nodeid varchar as primary key;
developerBalanceid int; //this will be dynamic columns
}
操作: a) 写入: 每 5 秒,每个节点都会为每个开发者更新 $ 余额。更具体地说,在每个时间 t+5,节点 A 将写入 1000 个余额值。节点 B 将写入 1000 个余额值,节点 C 也将写入。
b) 读取: 还会每 5 秒进行一次读取以读取特定的 developerBalance。
看来 2) 是对此建模的最佳方式。 我确实对我想要执行的查询的行宽有一些担忧。 在最坏的情况下,宽行读取会产生多少 iops。 我是否应该考虑其他优化,例如写入压缩?
我知道我可以运行一些测试并检查性能。但我也想听听其他的经验。
【问题讨论】: