如何同时删除记录?

时间:2016-11-13 04:12:08

标签: spring-mvc cassandra spring-data-cassandra

案例在一个软件包中我有一个为患者执行激活的课程&医生

  • 患者细节操作(postgetputdelete)由Patient控制器完成,

  • 医生特定操作(postgetputdelete)由Doctor控制器

有:

  • 4名医生:A,B,C和D;
  • 50名患者 - 其中一名姓名Z
  • 一位医生有多名患者
  • 一名患者可以咨询多位医生

患者Z咨询医生A,B& d。

问题:如果在删除患者后,将其从每位出诊的医生处取出,并在取消医生后将其从接受治疗的患者身上移除?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的用例,这就是您想要做的事情

A医生参加了病人x,y,z ...
B医生参加了病人x,y,z ...
C医生参加了病人x,y,k ......(医生C没有参加病人z) D医生参加了病人x,y,z ......

现在您正在查看医生A就诊的患者名单,并且您从此列表中删除了患者z。因此,患者z应该从医生B和D的列表中删除。您想要为Cassandra数据库建模数据。

我们需要在模拟Cassandra架构时记住目标。

第一个目标 - 了解您的查询数据 第二个目标 - 尝试在群集中分发数据 第三个目标 - 最小化分区读取次数。

我们的询问是 -
1 - 让A医生(B,C,D)参加的所有患者 2 - 删除患者病史(从任何列表中删除)。

我们试一试 -

CREATE TABLE VISITS_BY_DOCTOR(
 Doctor_name  text ,
 Patient_name  text ,
 .
 .
 .
 Other columns 

 PRIMARY KEY (Doctor_name, Patient_name    )
)

这将满足我们的两个目标。第一个目标,在一个查询中,我们可以得到医生A参加的病人名单 从VISITS_BY_DOCTOR中选择*,其中Doctor_name = A;
从VISITS_BY_DOCTOR中删除,其中patient_name = z;

第二个目标,它还最小化分区读取的数量,因为我们可以基于分区键“doctor_name”获取数据。但是这种设计不能满足第三个目标,在整个集群中传播数据。所以让我们改进它。

CREATE TABLE VISITS_BY_DOCTOR(
Doctor_name  text ,
Patient_name  text ,
Visit_date bigint,
.
Other columns 

PRIMARY KEY ((Doctor_name, Patient_name), Visit_date    )
) WITH CLUSTERING ORDER BY (Visit_date    DESC).

这将满足“跨群集传播数据”的目标。此外,它还可用于根据访问日期获取历史记录。