构建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'

解决方法

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...