如何解决构建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 Repo和Docs对它进行基准测试-这将使您在使用之前对性能有所了解。
建议的分区大小上限为100 Mb,因此您可以围绕数据大小和每个分区的记录数进行一些计算,以确定密钥是否会引起分区大小问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。