构建Cassandra表以进行高速查询

时间:2020-08-11 22:59:46

标签: cassandra

我们正在考虑使用Cassandra存储用于临床试验的数据。数据本质上是氧饱和度和呼吸速率(以及其他一些东西)。我们还需要存储患者标识符,访问代码和设施代码。我们希望只需要按唯一的患者/访问来检索数据。但是,每个患者可以拥有500,000多个记录。可能有1000名患者,也许有100家设施。我的问题与表的设计有关,以确保快速检索数据:

Create table OxygenSats
    (
        facility int,
        visit text,
        pat_id text,
        probe_id text
        event timestamp,
        oxygen float,
        resp int,
        Primary key((facility, visit), pat_id)
    );

据此,我认为数据将基于pat_id进行群集,并根据(设施,访问)进行分区。这个对吗?读取速度非常重要。我们将需要按患者(基本上是设施,探视,患者)进行选择,并按日期进行过滤。

这是针对我们正在处理的数据类型的最佳方法吗?任何指导/建议表示赞赏。

我们需要的查询相当简单-我们只需要选择一个患者的所有数据(按日​​期过滤也是有用的):

select oxygen, resp from OxygenSats where facility = '1', and visit = '1' and pat_id = '22'

1 个答案:

答案 0 :(得分:2)

您的想法是正确的,因为它在(设施,访问)的组合键上进行了分区,并在pat_id上进行了群集。访视的唯一性很关键,但未指定,目前我们无法确定每次患者访视是否是全球唯一的。有关选择查询的更多详细信息也将很有用,它们将包括范围查询还是仅点查询?

一旦您能做的就是使用NoSQLBench Github RepoDocs对它进行基准测试-这将使您在使用之前对性能有所了解。

建议的分区大小上限为100 Mb,因此您可以围绕数据大小和每个分区的记录数进行一些计算,以确定密钥是否会引起分区大小问题。