先上个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类计算只会在本地的数据集上执行,不会跨节点
因此有两种处理方式:
设计时就把具有E-R关系的数据分布在相同的节点,此种方式最优,在设计分库分表时也需要考虑这一点
开启并置处理: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
连序都排好了,你说赞不赞 ^_^
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[ignite affinity key 并置 究竟是个啥?]http://www.zyiz.net/tech/detail-140132.html