我对Cassandra数据建模有疑问。对不起,很长的帖子。Cassandra数据模型指导
我在这里采取假设的情况。假设我有一个主服务器,它从网络上的机器(1个或多个)收集数据。其他机器的数据形式如机器细节,状态,是否连接,是上或下,是台式机还是笔记本电脑,就像这样。我有这样
- 由于主服务器ID获取连接到它
- 鉴于机器ID的机器列表,获取本机的详细信息的查询。
- 鉴于机器的状态(没有其他)获取机器列表(一个或多个)
- 鉴于标志is_connected获取连接到主服务器的机器列表?
- 鉴于国旗is_up获取机器列表?
因此,根据Cassandra,我们应该为每个查询(近似)创建一个列族。我担心的是上面的查询#3,#4,#5,这些查询的where子句分别是status,is_connected和is_up,因此为了满足这些查询,我必须创建包含这些标志作为分区键或集群键的表。
CREATE TABLE server (
server_id text,
server_name text,
status text,
.
.
.
.
.
other information,
PRIMARY KEY (server_id))
CREATE TABLE machine (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (machine_id))
CREATE TABLE machine_by_status (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (status, machine_id))
CREATE TABLE machine_by_connected (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (is_connected, machine_id))
CREATE TABLE machine_by_up_down (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (is_up, machine_id))
但是这些标志的值可能会在一段时间内发生变化。值可能是多个。如果这些是分区密钥或集群密钥的一部分,那么我无法更新或更改它。因此,一旦创建了我的专栏系列并添加了一些带有标志值的记录,那么对于新值,我该如何更新该记录,或者如果我添加新记录,那么如何删除旧记录?我想避免在写之前阅读。
数据收集的频率可能会有所不同,所以我不能使用TTL的固定值,以便Cassandra可以删除旧值。我知道上述模式存在问题,例如它可能会产生热点,或者可能会造成不平衡集群,这就是我需要指导的原因。我该如何处理这种情况。我的客户端应用程序只能在几页上基于这些标志进行查询。客户端没有其他数据要查询。
那么,如何创建列族来满足查询#3,#4,#5?在这种情况下,您的指导将帮助我提出良好的数据模型。
预先感谢您。
可以插入多少台机器? –
@AshrafulIslam机器数量可能会高达200万可能更多 – Shashi
标志状态,is_connected,is_up所有这些都是低基数列,假设所有机器都已启动,所以您的所有数据都将位于一个分区中(在同一个节点上),会产生热点,不可扩展等。这是cassandra中非常糟糕的设计。 –