á¡ááŒá®ážáá¯á¶ážááá¯ááºá¡áá¯ááºáá®áá¯áá¹ááá®ááŒá®ážáá áºáá¯ááŒá áºááá·áº Alibaba ááẠPostgreSQL ááá¯á¡ááŒá±áá¶á ááŒáá·áºáá±áá¬ážáá±á¬ DBMS PolarDB áá¡áááºážá¡ááŒá áºáá¯ááºááá¯ááœáá·áºááá¯ááºááŒá®ááŒá áºáááºá PolarDB ááẠááá°áá®áá±á¬ á¡á á¯á¡áá±ážáá»á¬ážááŒá¬ážááœáẠááŒáá·áºáá±áá¬ážáá±á¬ ááá¹áá¬áá¯á¶ážááá¯ááºáá¬áá±áá¬áá±á·á áºáá áºáá¯áá¯á¶ážá áááºá ááºááŸá¯ááœáẠááá¯ááºáá¬ááŸá¯ááŸááá±á¬ ááŒáá·áºáá±áá¬ážáá±á¬áá±áá¬ááá¯ááŸá±á¬ááºááŸá¯á¡ááœáẠáááááá¬áá»á¬ážááŒáá·áº PostgreSQL áá áœááºážáááºáá»á¬ážááᯠááá¯ážáá»á²á·áá±ážáá«áááºá PolarDB ááẠááŒáá·áºáá±áá¬ážáá±á¬ SQL query processingá fault tolerance ááŸáá·áº redundant data storage ááá¯á·ááá¯áááºáž áá¶á·ááá¯ážáá±ážáá«áááºá áááºá ááá¯ááŸá±á¬ááºáááºážááᯠáá»á²á·ááœááºááẠááá¯á¡ááºáá«áá á¡á á¯á¡áá±ážááœáẠnode á¡áá áºáá»á¬ážááᯠááá¯ážááŸááºážá áœá¬ ááá·áºááá¯ááºáááºá áá¯ááºááᯠApache 2.0 ááá¯ááºá ááºá¡á±á¬ááºááœáẠááœáá·áºáá¬ážáááºá
PolarDB ááœáẠá¡á áááºá¡ááá¯ááºáž ááŸá áºáᯠáá«áááºááẠ- ááá¯ážáá»á²á·ááŸá¯áá»á¬áž ááŸáá·áº PostgreSQL á¡ááœáẠáááºááºáá»á¬áž á¡á á¯á¶áá«ááŸááá«áááºá Patches áá»á¬ážááẠPostgreSQL core á áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááᯠáá»á²á·ááœááºááŒá®áž áá±á¬ááºáááºááœá²áá»á¬ážááœáẠPostgreSQL á០áá®ážááŒá¬ážáá¯ááºáá±á¬ááºáá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááŒá áºááá·áº ááŒáá·áºáá±áá¬ážáá±á¬ ááœá±áá±ážááœá±áá°á á®áá¶ááá·áºááœá²ááŸá¯ ááá¹ááá¬ážá ááá¹áá¬áá¯á¶ážááá¯ááºáᬠáááºáá±á¬ááºááŸá¯áá»á¬ážá ááŒáá·áºáá±áá¬ážáá±á¬ SQL query áááá¯áááºáá¬á á¡ááá¯áááºáá¬áá±áá¬á á¡á á¯á¡áá±ážááᯠá á®áá¶ááá·áºááœá²áááºá á¡á á¯á¡áá±ážáá áºáá¯ááᯠá¡áá¯á¶ážáá»ááŒááºážááŸáá·áº ááá¯ážááŸááºážá á±ááŒááºážáá²á·ááá¯á·áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážáá«áááºáááºá ááŸáááŒá®ážáá¬ážá áá áºáá»á¬ážááᯠáááºážááá¯á· ááœáŸá±á·ááŒá±á¬ááºážááŒááºážá
áá¬áá±ážááŸá¯áá»á¬ážááẠááá°áá®áá±á¬ á¡áá®ážáá»ááºá¡ááá·áºáá»á¬ážá¡ááœáẠMultiversion (MVCCá Multiversion concurrency control) ááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬áá»á¬ážááá¯á· á¡ááŒáá¯ááºáááºáá±á¬ááºááœáá·áºááᯠááááºážáá»á¯ááºáááºá¡ááœáẠááŒáá·áºáá±ááá·áºáá¬ážááŸááºážááᯠPostgreSQL core ááá¯á· áá±á«ááºážááá·áºáááºá PolarDB ááá¯ááºáá±á¬ááºááá¯ááºá áœááºážá¡áá»á¬ážá á¯ááœáẠPostgreSQL ááá¯ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯ááá¯áá»á±á¬á·áááºážá á±ááŒá®áž PolarDB ááá¯á¡ááŒá±áá¶ááá·áºááŒá±ááŸááºážáá»ááºáá»á¬ážá¡á¬ážá¡ááá·áºááŒáŸáá·áºáááºááŒááºážááŸáá·áºá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááá¯ááá¯ážááŸááºážááœááºáá°á á±ááẠ(áááºážááẠPostgreSQL ááá¬ážááŸááºážá¡áá áºááá¯á·áá°ážááŒá±á¬ááºážááŒááºážááá¯ááá¯ážááŸááºážá á±ááŒá®áž PostgreSQL ááŸáá·áºá¡ááŒáá·áºá¡áááá¯ááºáááºáá®ááŸá¯ááá¯ááááºážááááºážáá¬ážáááº) á á¡á á¯á¡áá±ážááᯠá á®áá¶ááá·áºááœá²áááºá PostgreSQL-XC ááŸáá·áº PostgreSQL-XL ááá¯á·á០á¡áá¬ážáá° á¡áá¯á¶ážáááºááŸá¯á¡áá±á«áº á¡ááŒá±áá¶á pgxc_ctl áááááá¬á¡á á¯á¶ááᯠá¡áá¯á¶ážááŒá¯áááºá
á¡á á¯á¡ááœá²á·áá áºáá¯ááœáẠá¡ááŒá±áᶠá¡á áááºá¡ááá¯ááºáž áá¯á¶ážáᯠááŸááááº- áá±áá¬áá±á·á Ạáá¯á¶ááŸááºáá»á¬áž (DN)á á¡á á¯á¡áá±áž áááºáá±áá»á¬ (CM) ááŸáá·áº ááœá±áá±ážááœá±áá° á á®áá¶ááá·áºááœá²ááŸá¯ áááºáá±á¬ááºááŸá¯ (TM)á ááá¯á·á¡ááŒááºá proxy load balancer ááá¯áá¯á¶ážááá¯ááºáááºá á¡á áááºá¡ááá¯ááºážáá áºáá¯á á®ááẠáá®ážááŒá¬ážáá¯ááºáááºážá ááºáá áºáá¯ááŒá áºááŒá®áž ááá°áá®áá±á¬áá¬áá¬áá áºáá¯áá±á«áºááœáẠáá¯ááºáá±á¬ááºááá¯ááºáááºá Database nodes áá»á¬ážááẠclient áá»á¬ážáá¶á០SQL queries áá»á¬ážááᯠáá±á¬ááºááœááºáá±ážááŒá®áž áá áºáá»áááºáááºážááœáẠá¡ááŒá¬ážáá±á¬ database node áá»á¬ážá áá«áááºááŸá¯ááŒáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ query execute á ááŸáááŸáá¯ááºážáá±ážááŸá°ážáá»á¬ážá¡ááŒá Ạáá±á¬ááºááœááºáá«áááºá á¡á á¯á¡áá±ážáááºáá±áá»á¬ááẠáá±áá¬áá±á·á Ạnode áá áºáá¯á á®á á¡ááŒá±á¡áá±ááᯠá á±á¬áá·áºááŒáá·áºá á áºáá±ážááŒá®ážá á¡á á¯á¡áá±ážááœá²á·á ááºážáá¯á¶ááᯠááááºážáááºážáᬠá á®áá¶ááá·áºááœá²ááŒááºážá á¡áááºááááºážááŒááºážá áá»áááºááœááºáá»áŸá¬ááŸáááŒááºážá á¡ááºááááºáá¯ááºááŒááºážá á áááºááŒááºážááŸáá·áº áááºááá·áºááŒááºážá¡ááœáẠáááááá¬áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá ááœá±áá±ážááœá±áá° á á®áá¶ááá·áºááœá²ááŸá¯ áááºáá±á¬ááºááŸá¯ááẠá¡á á¯á¡ááœá²á·áá áºáá¯áá¯á¶ážááœáẠá¡áá¯á¶ážá á¯á¶ ááá¬ááááᯠááááºážááááºážááẠáá¬áááºááŸááááºá
PolarDB ááẠShared-nothing ááŒáá·áºáá±áá¬ážáá±á¬ ááœááºááŒá°áá¬áááá¯áá¬ááᯠá¡ááŒá±áá¶á ááá°áá®áá±á¬ node áá»á¬ážáá±á«áºááœáẠááááºážáááºážááá·áºá¡áá« áá±áá¬áá»á¬ážááᯠááŒáá·áºáá±ááŒááºážáááŸááá²á node á¡á¬ážáá¯á¶ážá¡ááœáẠáá¯á¶ááá¯ááŸá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážáááŒá¯áá²á node áá áºáá¯á á®ááẠáááºážááŸáá·áºáááºááá¯ááºááá·áº áá±áá¬á¡ááá¯ááºážá¡ááœáẠáá¬áááºááŸáááŒá®áž áááºá ááºáá±ážááŒááºážáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±ážáá«áááºá data ááá¯á·á ááá¬ážáá áºáá¯á á®ááᯠáááºááá±á¬á·á¡áá±á«áºá¡ááŒá±áá¶á hashing ááá¯á¡áá¯á¶ážááŒá¯á á¡ááá¯ááºážáá»á¬ážááœá²áá¬ážááẠ(sharding)á áá±á¬ááºážááá¯áá»ááºááẠááá°áá®áá±á¬ node áá»á¬ážáá±á«áºááœááºááŸááá±á¬ áá±áá¬ááᯠááŒáá·áºáá»ááºááœá¬ážáá«áá á¡ááºáááºáááºááŸá¯á áá®ááœááºááŸá¯á á¡áá®ážáá»ááºááŸá¯ááŸáá·áº áá¯á¶ááŒááºá áááºáá»áááŸá¯ (ACID) ááᯠáá±áá»á¬á á±ááẠááŒáá·áºáá±áá¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá¯ááºáá±á¬ááºááŸá¯ ááá¹ááá¬ážááŸáá·áº ááœá±áá±ážááœá±áá°ááŸáááŸáá¯ááºážáá±ážáááááá¬ááᯠá¡áááºááœááºážáááºááŒá áºáááºá
á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸáá á±áááºá á¡ááá¯ááºážáá áºáá¯á á®ááᯠá¡áááºážáá¯á¶áž node áá¯á¶ážáá¯á¡áá áá¯á¶áá°áá°ážáá¬ážáááºá á¡áááºážá¡ááŒá áºáá»á¬ážááᯠááááºážáááºážáááºá áá±áá¬á¡ááŒáá·áºá¡á á¯á¶ááœáẠáá¯á¶áá°ááŸá áºáá¯áᬠáá«áááºááŒá®áž áá áºáá¯ááẠáá±áž-ááŒááºááŸááºáááºáž (WAL) ááᯠááááºážáááºážááẠááá·áºáááºáá¬ážáááºá áá¯á¶áá°áá»á¬ážá¡ááŒáá·áºáá«ááá·áº áá¯á¶ááŸááºááŸá áºáá¯áá²á០áá áºáá¯ááᯠáá±á«ááºážáá±á¬ááºá¡ááŒá Ạááœá±ážáá»ááºááŒá®áž áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá¬ááœáẠáá«áááºáá«áááºá áá¯ááá Node ááẠáá±ážááœááºážááŸááá±áá¬á¡ááá¯ááºážá¡ááœáẠá¡á¬ážáááºáá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºááŒá®áž ááááááẠáŠážáá±á¬áẠnode áááœá±ážáá»ááºááŸá¯ááœáẠáá«áááºáᬠá¡ááŒáá·áºá¡ááá¯á¶á á¶áá° node ááŸá áºáá¯á áá»ááºááœááºááŸá¯ááŒá áºáááºááœáẠá¡áá»ááºá¡áááºááŒááºáááºááá°ááẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á¡á á¯á¡á ááºážáá»á¬ážááŒá¬ážááœáẠáá±áá¬áá°ážáá°ááŒááºážá¡á¬áž Paxos algorithm ááá¯á¡áá¯á¶ážááŒá¯á á á¯á ááºážáá¬ážááŒááºážááŒá áºááŒá®ážá áá¯á¶ááŒááºá áááºáá»áááŸá¯áááŸááá±á¬ nodes áá»á¬ážáá«ááŸááá±á¬ ááœááºáááºáá áºáá¯á¡ááœááºáž ááá±á¬áá°áá®ááŸá¯á áá áºááááºáááºážáá±á¬ á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááᯠáá±áá»á¬á á±áááºá
PolarDB DBMS á á¡ááŒáá·áºá¡ááá¯ááºáá±á¬ááºááá¯ááºá
áœááºážááᯠáá¯ááºáá±ááŸá¯áá¯á¶ážáá»áá¯ážááœáẠáá¯ááºáá±á¬áºááŒáááẠá
á®á
ááºáá¬ážáááº- ááááá¬ážááŸááºážááœááºá áá°ážáá°ááŒááºážá¡ááœáẠáááááá¬áá»á¬ážá ááŒáá·áºáá¬ážáá±á¬áááŸáááá¯ááºááŸá¯ááŸáá·áº á¡á
á¯á¡áá±ážá
á®áá¶ááá·áºááœá²ááŸá¯ááá¯á·ááᯠáá¯ááºáá±áááºááŒá
áºááŒá±á¬ááºáž ááŸááºáá¬ážááá«áááºá áá¯ááááá¯ááºáá±ááŸá¯ááœáẠcross-node ACID ááŸáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ SQL áá¯ááºáá±á¬ááºáá»ááºááᯠáá¶á·ááá¯ážáá±ážááá·áº ááŒáá·áºáá±áá¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá¯ááºáá±á¬ááºááŸá¯á
áá
áºáá
áºáá¯áá«ááŸááááºá áááááá¯ááºáá±ááŸá¯ááœáẠPostgreSQL á¡ááœáẠááááºá¡ááºáá
áºáá¯ááŸáá·áº node áá»á¬ážáá
áºáá»áŸá±á¬áẠááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ áá±áá¬ááŒáá·áºáá±ááŸá¯á¡ááœáẠáááááá¬áá»á¬ážáá«áááºáááºááŒá
áºááŒá®áž á¡áá±á¬ááºážáá¯á¶ážá
áœááºážáá±á¬ááºáááºáááŸáááẠá¡ááá¯ááºážáá»á¬ážááᯠááá¯ááºáá»á±á¬áá®ááœá±ááŒá
áºá¡á±á¬áẠáá±áá¬áá»áá¬ážááŒááºážááŸáá·áº node á¡áá
áºáá»á¬ážááá·áºááŒááºážááŒáá·áº á¡á
á¯á¡áá±ážááᯠáá»á²á·ááœááºááá¯ááºááŸá¯ááá¯á· áá«áááºáááºááŒá
áºáááºá
source: opennet.ru