zoukankan      html  css  js  c++  java
  • ignite affinity key 并置 究竟是个啥?

    先上个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

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

    file

  • 相关阅读:
    Go语言程序调试
    IDA FLIRT使用
    通过PEB寻找函数地址
    使用IWebBrowser2操控浏览器页面测试(IE)
    虚拟机检测手段
    初步了解PE分析
    CG-CTF simple-machine
    调试器原理初步学习
    简单shellcode编写
    使用ReportViewer的远程模式
  • 原文地址:https://www.cnblogs.com/liangjzy/p/13156458.html
Copyright © 2011-2022 走看看