我们正在考虑使用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'发布于 2020-08-12 17:00:21
您的想法是正确的,它被分区到(facility,visit)的组合键上,并聚集在pat_id上。在这里,访问的唯一性很重要,但没有指定,目前我们不能确定每次患者访问的访问是否全局唯一。关于select查询的更多细节也会很有用,它们是包括范围查询还是仅包括点查询?
一旦您可以使用NoSQLBench Github Repo和Docs对其进行基准测试-这将使您在使用之前对性能有一个很好的了解。
建议的分区大小上限是100Mb,因此您可以围绕每个分区的数据大小和记录数进行一些计算,以确定您的键是否会导致分区大小问题。
https://stackoverflow.com/questions/63367481
复制相似问题