igniteaffinitykey并置究竟是个啥?

database

先上个pgsql操作的对比,然后引出ignite的并置处理规则

ddl:

drop table student;CREATE TABLE student(sid int PRIMARY KEY ,sname varchar(64), cid int);  

drop table course;CREATE TABLE course(cid int PRIMARY KEY ,cname varchar(64));

drop table score;CREATE TABLE score(sid int ,cid int,score int,PRIMARY KEY (sid,cid));

dml:

course表:

cid

cname

1

yuwen

2

shuxue

3

yingyu

student表:

sid

sname

cid

1

zhang

1

2

wang

2

3

liu

1

4

li

3

5

chen

3

6

zhao

3

score表:

sid

cid

score

1

1

99

3

1

99

2

2

50

4

3

79

dql 查询有成绩的学生信息

SELECT student.* FROM student inner JOIN score ON STUDENT 

.sid=score.sid

pgsql结果

sid

sname

cid

1

zhang

1

3

liu

1

2

wang

2

4

li

3

ignite结果

SID

SNAME

CID

1

zhang

1

2

wang

2

显然,ignite结果不正确,似乎是少了部分结果

ignite 并置:

  • ignite的数据是分布式存在的
  • join类计算只会在本地的数据集上执行,不会跨节点

    因此有两种处理方式:

  1. 设计时就把具有E-R关系的数据分布在相同的节点,此种方式最优,在设计分库分表时也需要考虑这一点
  2. 开启并置处理:affinity_key=sid,即是告诉ignite,涉及到这个字段的计算时,需要把数据广播到其他所有节点,由此可见,当表的数据量较大时,性能很差

改写score表的ddl如下:

CREATE TABLE score(sid int(11) ,cid int(11),score int(11),PRIMARY KEY (sid,cid))

WITH "template=partitioned,backups=1,affinity_key=sid" ;

再执行:

SELECT student.* FROM student inner JOIN score ON STUDENT 

.sid=score.sid

ignite结果

SID

SNAME

CID

1

zhang

1

2

wang

2

3

liu

3

4

li

3

连序都排好了,你说赞不赞 _

以上是 igniteaffinitykey并置究竟是个啥? 的全部内容, 来源链接: utcz.com/z/534234.html

回到顶部