Download as pdf or txt
Download as pdf or txt
You are on page 1of 1

e#-/.=$? 2-CC.*&$6 <.==0??(<$-#&0? )0?-.#=0?

a0$(<$"#$0/

Four Data Sharding Strategies We


Analyzed in Building a Distributed
SQL Database
!"#$%&'()"*+"*"$%"* | ,-.*/0#(1(234
5"*."#6(789(:;:;

>(/&?$#&@.$0/(<AB(/"$"@"?0(*00/?($-(".$-C"$&="DD6(E"#$&$&-*($%0(/"$"(&*("($"@D0("*/
/&?$#&@.$0(&$("=#-??(*-/0?F(3%&?(&?('*-G*("?(/"$"(?%"#/&*+("*/(&$(="*(@0("=%&0H0/($%#-.+%
/&I0#0*$(?$#"$0+&0?9(0"=%(G&$%(&$?(-G*($#"/0-I?F(J*($%&?(E-?$9(G0(G&DD(0K"C&*0(H"#&-.?(/"$"
?%"#/&*+(?$#"$0+&0?(L-#("(/&?$#&@.$0/(<AB(/"$"@"?09("*"D6M0($%0($#"/0-I?9(0KED"&*($%0
#"$&-*"D0(L-#(G%&=%(-L($%0?0(?$#"$0+&0?(N.+"@6$0OP(?.EE-#$?("*/(G%"$(G0(E&='0/("?($%0
/0L".D$(?%"#/&*+(?$#"$0+6F

!"#$%&'()*#+,$-./0!"#!$%!&'!()*'!%(+,-*.!/$0/1)*,2(,3&'-*!4$%#,$5+#*4!678!4&#&5&%*
5+$9#!('!&!%-&9&59*!&'4!2&+9#1#(9*,&'#!4*%$0'!$'%)$,*4!5:!;((09*!6)&''*,<!=+0&5:#*>%
678!?@"!A=678B!$%!@(%#0,*678!C$,*!-(3)&#$59*<

Lessons from building sharded data systems

O"$"(?%"#/&*+(%0DE?(&*(?="D"@&D&$6("*/(+0-Q/&?$#&@.$&-*(@6(%-#&M-*$"DD6(E"#$&$&-*&*+(/"$"F(>
<AB($"@D0(&?(/0=-CE-?0/(&*$-(C.D$&ED0(?0$?(-L(#-G?("==-#/&*+($-("(?E0=&R=(?%"#/&*+
?$#"$0+6F(S"=%(-L($%0?0(?0$?(-L(#-G?(&?(="DD0/("(?%"#/F(3%0?0(?%"#/?("#0(/&?$#&@.$0/("=#-??
C.D$&ED0(?0#H0#(*-/0?(T=-*$"&*0#?9(UV?9(@"#0QC0$"DW(&*("(?%"#0/Q*-$%&*+("#=%&$0=$.#0F(3%&?
0*?.#0?($%"$($%0(?%"#/?(/-(*-$(+0$(@-$$D0*0='0/(@6($%0(=-CE.$09(?$-#"+0("*/(*0$G-#'&*+
#0?-.#=0?("H"&D"@D0("$("(?&*+D0(*-/0F(X&+%("H"&D"@&D&$6(&?("=%&0H0/(@6(#0ED&="$&*+(0"=%(?%"#/
<0"#=%
!

"=#-??(C.D$&ED0(*-/0?F(X-G0H0#9($%0("EED&="$&-*(&*$0#"=$?(G&$%("(<AB($"@D0("?(-*0(D-+&="D
.*&$("*/(#0C"&*?("+*-?$&=($-($%0(E%6?&="D(ED"=0C0*$(-L($%0(?%"#/?F(J*($%&?(?0=$&-*9(G0(G&DD
Top Posts
-.$D&*0($%0(E#-?9(=-*?("*/(-.#(E#"=$&="D(D0"#*&*+?(L#-C($%0(?%"#/&*+(?$#"$0+&0?("/-E$0/(@6
$%0?0(/"$"@"?0?F TPC-C Benchmark: Scaling YugabyteDB to
100,000 Warehouses

Memcached and Redis – Algorithmic Sharding


PostgreSQL Timestamps and Timezones: What
You Need to Know—and What You Don’t
O&?$#&@.$0/(="=%0?(%"H0(%"/($-(/&?$#&@.$0(/"$"("=#-??(C.D$&ED0(*-/0?(L-#("(G%&D0F(>
=-CC-*D6(.?0/($0=%*&Y.0(&?("D+-#&$%C&=(?%"#/&*+9(G%0#0(0"=%('06(=-*?&?$0*$D6(C"E?($- Distributed SQL Tips and Tricks – April 26, 2022

$%0(?"C0(*-/0F(3%&?(&?("=%&0H0/(@6(=-CE.$&*+("(*.C0#&=(%"?%(H"D.0(-.$(-L($%0('06("*/
A Matter of Time: Evolving Clock Sync for
=-CE.$&*+("(C-/.D-(-L($%"$(%"?%(.?&*+($%0($-$"D(*.C@0#(-L(*-/0?($-(=-CE.$0(G%&=%(*-/0 Distributed Databases

-G*?($%0('06F
PostgreSQL Timestamps and Timezones: How to
Navigate the Interval Minefield

Categories

>2JO(3#"*?"=$&-*?

>C"M-*(>.#-#"

>C"M-*(O6*"C-OP

>C"M-*([0@(<0#H&=0?

>E"=%0(2"??"*/#"

>E"=%0(!"L'"

2D-./(e#-H&/0#?

@&,#!(2!#/*!$3&0*!2,(3!%(+,-*D!E(C!6/&,4$'0!F(,G% 2-='#-"=%OP

!"#$ 2-CC.*&$6(c0G?

J*("D+-#&$%C&=(?%"#/&*+9($%0(=D&0*$(="*(/0$0#C&*0("(+&H0*(E"#$&$&-*Z?(/"$"@"?0(G&$%-.$("*6
2-CE"*6(c0G?
%0DEF

2-*$"&*0#?
%#&$
[%0*("(*0G(*-/0(&?("//0/(-#(#0C-H0/9($%0(-G*0#?%&E(-L("DC-?$("DD('06?(G-.D/(@0 O"$"@"?0?
"I0=$0/9(#0?.D$&*+(&*("(C"??&H0(#0/&?$#&@.$&-*(-L("DD($%0(/"$"("=#-??(*-/0?(-L($%0(=D.?$0#F
[%&D0($%&?(&?(*-$("(=-##0=$*0??(&??.0(&*("(/&?$#&@.$0/(="=%0(T@0=".?0(="=%0(C&??0?(G&DD O&?$#&@.$0/(<AB

#0E-E.D"$0($%0(/"$"W9(&$(="*(%"H0("(%.+0(E0#L-#C"*=0(&CE"=$(?&*=0($%0(0*$&#0(="=%0(G&DD
O-='0#
%"H0($-(@0(G"#C0/("+"&*F

S=-?6?$0C(J*$0+#"$&-*?
'&()*$+$
>//&*+("*/(#0C-H&*+(*-/0?(&?(L.*/"C0*$"D($-("(/&?$#&@.$0/(/"$"@"?09("*/($%0?0
a--+D0(2D-./(eD"$L-#C
-E0#"$&-*?(*00/($-(@0(0\=&0*$F
a--+D0(<E"**0#
3%&?(C"'0?($%&?($6E0(-L(?%"#/&*+("(E--#(-E$&-*("*/(&?(*-$(&CED0C0*$0/(&*(N.+"@6$0OPF
a#"E%AB
,-.-"-&/-$0
X-G(J$([-#'?
<%"#/&*+(/"$"("=#-??("(C0C="=%0($&0#(L#-C(]O&?$#&@.$0/(2"=%&*+(G&$%(V0C="=%0/^
>D+-#&$%C&=(?%"#/&*+(L#-C(]X-G(<%"#/&*+([-#'?^ X-G(3-

Initial Implementation in Cassandra – Linear Hash Sharding 50E?0*(30?$?

U"#&-.?(C0C@0#?(-L($%0(N.+"@6$0($0"C(G0#0(/&#0=$D6(&*H-DH0/(&*($%0(0"#D6(/"6?(-L(@.&D/&*+
!.@0#*0$0?
2"??"*/#"("$(,"=0@--'(T=&#="(:;;_W9(G0DD(@0L-#0(&$(@0="C0("*(-E0*(?-.#=0(E#-`0=$F([%&D0
/0?&+*&*+(/"$"(?%"#/&*+(&*(2"??"*/#"9(G0(D--'0/($-(P&+$"@D0(L#-C(a--+D0(TG%&=%(/&/(#"*+0 V&=#-?-L$(>M.#0
?%"#/&*+(@6(/0L".D$W("*/(O6*"C-(L#-C(>C"M-*(TG%&=%(/&/(=-*?&?$0*$(%"?%(?%"#/&*+(@6
/0L".D$WF(>?("*("$$0CE$($-("=%&0H0($%0(@0?$(-L(@-$%(G-#D/?9(G0(-E$0/(L-#(D&*0"#(%"?% V&=#-?-L$(>M.#0(2-?C-?(OP

?%"#/&*+9("D?-('*-G*("?($%0(H,4*,@,*%*,I$'0@&,#$#$('*,(&*(2"??"*/#"F
V-*+-OP

B&*0"#(%"?%(?%"#/&*+(&?("(%6@#&/(@0$G00*(%"?%("*/(#"*+0(?%"#/&*+($%"$(E#0?0#H0?($%0(?-#$
4E0*(<-.#=0
-#/0#(-L($%0(#-G?(@6(.$&D&M&*+("(D&*0"#(%"?%(L.*=$&-*(&*?$0"/(-L("(#0+.D"#(#"*/-C(%"?%
L.*=$&-*($-(=-CE.$0(%-G($-(?%"#/($%0(#-G?F(>(D&*0"#(%"?%(L.*=$&-*9(?-C0$&C0?(#0L0##0/($-
e0#L-#C"*=0(P0*=%C"#'?
"?("*(-#/0#(E#0?0#H&*+(%"?%9(&?("(%"?%(L.*=$&-*($%"$(C"&*$"&*?($%0(#0D"$&H0(-#/0#&*+(-L(&*E.$
H"D.0?(G%&D0(=%"*+&*+($%0&#(/&?$#&@.$&-*(?E"=&*+F(3%&?($6E0(-L(?%"#/&*+(E#0?0#H0?($%0(?-#$ e&H-$"D(2-*$"&*0#(<0#H&=0(Te!<W

-#/0#&*+(-L($%0(#-G?9(G%&D0(#0/&?$#&@.$&*+($%0?0(#-G?("=#-??("(D"#+0#('06(?E"=0F(3%0(&/0"(&?
e-?$+#0<AB
$%"$($%0(D"#+0#('06(?E"=0(-H0#(G%&=%($%0(#0/&?$#&@.$&-*(-L(#-G?(&?(/-*0(="*(@0(E#0Q?%"#/0/9
0*"@D&*+($%0($"@D0($-(@0(?E#0"/("=#-??(C.D$&ED0(*-/0?F
)0D0"?0(>**-.*=0C0*$?

<E#&*+

[00'(J*()0H&0G

N.+"@6$0OP(7F7

N.+"@6$0OP(7F:

N.+"@6$0OP(7Fh

N.+"@6$0OP(:F;

N.+"@6$0OP(:F7

N.+"@6$0OP(:F:
!"#$
J*($%0-#69($%&?($6E0(-L(?%"#/&*+("DD-G?(0\=&0*$D6(Y.0#6&*+("(#"*+0(-L(#-G?(@6($%0(E#&C"#6
'06(H"D.0?(G%&D0(0*"@D&*+(E#0Q?ED&$$&*+(-L($%0($"@D0(&*$-(C.D$&ED0(?%"#/?F

%#&$
J*(E#"=$&=09($%&?(?%"#/&*+(?$#"$0+6(G"?(E#-@D0C"$&=(@0=".?0(&$(G"?(&CE-??&@D0($-(E&='(+--/
?%"#/(?ED&$(@-.*/"#&0?("%0"/(-L($&C0F(3%0(E#&C"#6(/&?"/H"*$"+0(-L(D&*0"#(%"?%(?%"#/&*+(&?
$%"$($%0(/"$"(&?(*0H0#(0H0*D6(/&?$#&@.$0/(@0$G00*(E"#$&$&-*?9("*/($%.?(#0?.D$?(&*(%-$?E-$?F

'&()*$+$
[%&D0(.?0L.D(&*($%0-#69($%0?0("#0(-*D6("(*"##-G(?0$(-L(.?0Q="?0?($%"$(="*(D0H0#"+0($%&?
?%"#/&*+(?$#"$0+6(0I0=$&H0D6F(J*($%0(="?0(-L(2"??"*/#"9($%0(/0L".D$(?%"#/&*+(?$#"$0+6(G"?
=%"*+0/(L#-C(D&*0"#(%"?%(?%"#/&*+($-(=-*?&?$0*$(?%"#/&*+($-(&CE#-H0(?="D"@&D&$6("*/
E0#L-#C"*=0F

3%&?(&?(/-=.C0*$0/(&*($%0(>E"=%0(2"??"*/#"(/-=?($%.?b

c-$(#0=-CC0*/0/(@-$%(@0=".?0(-L($%&?(D&C&$"$&-*("*/(@0=".?0(+D-@"DD6(-#/0#&*+
"DD(6-.#(E"#$&$&-*?(+0*0#"$0?(%-$(?E-$?b(?-C0(E"#$&$&-*?(=D-?0($-+0$%0#(G&DD(+0$
C-#0("=$&H&$6($%"*(-$%0#?9("*/($%0(*-/0(%-?$&*+($%-?0(G&DD(@0(-H0#D-"/0/(#0D"$&H0
$-(-$%0#?F(N-.(="*($#6($-(C&$&+"$0(G&$%("=$&H0(D-"/(@"D"*=&*+(@.$($%&?(G-#'?(E--#D6
&*(E#"=$&=0d(@6($%0($&C0(6-.(="*("/`.?$($-'0*("??&+*C0*$?(?-($%"$(D0??(%-$
E"#$&$&-*?("#0(-*($%0(-H0#D-"/0/(*-/09(6-.#(G-#'D-"/(-L$0*(=%"*+0?(0*-.+%($%"$
$%0(%-$(?E-$(&?(*-G(0D?0G%0#0F()0C0C@0#($%"$(E#0?0#H&*+(+D-@"D(-#/0#(C0"*?(6-.
="*Z$(`.?$(E&='("*/(=%--?0(%-$(E"#$&$&-*?($-(#0D-="$09(6-.(%"H0($-(#0D-="$0
=-*$&+.-.?(#"*+0?F

X0*=09($%&?(&?("(E--#(?%"#/&*+(?$#"$0+6("*/(&?(*-$(&CED0C0*$0/(&*(N.+"@6$0OPF

DynamoDB and Cassandra – Consistent Hash Sharding

[&$%(=-*?&?$0*$(%"?%(?%"#/&*+9(/"$"(&?(0H0*D6("*/(#"*/-CD6(/&?$#&@.$0/("=#-??(?%"#/?(.?&*+
"(E"#$&$&-*&*+("D+-#&$%CF(S"=%(#-G(-L($%0($"@D0(&?(ED"=0/(&*$-("(?%"#/(/0$0#C&*0/(@6
=-CE.$&*+("(=-*?&?$0*$(%"?%(-*($%0(E"#$&$&-*(=-D.C*(H"D.0?(-L($%"$(#-GF(3%&?(&?(?%-G*(&*
$%0(R+.#0(@0D-GF

!"#$
3%&?(?%"#/&*+(?$#"$0+6(&?(&/0"D(L-#(C"??&H0D6(?="D"@D0(G-#'D-"/?(@0=".?0(&$(/&?$#&@.$0?(/"$"
0H0*D6("=#-??("DD($%0(*-/0?(&*($%0(=D.?$0#9(G%&D0(#0$"&*&*+(0"?0(-L("//&*+(*-/0?(&*$-($%0
=D.?$0#F()0="DD(L#-C(0"#D&0#($%"$("D+-#&$%C&=(%"?%(?%"#/&*+(&?(H0#6(0I0=$&H0("D?-("$
/&?$#&@.$&*+(/"$"("=#-??(*-/0?9(@.$($%0(/&?$#&@.$&-*(?$#"$0+6(/0E0*/?(-*($%0(*.C@0#(-L
*-/0?F([&$%(=-*?&?$0*$(%"?%(?%"#/&*+9($%0#0("#0(C"*6(C-#0(?%"#/?($%"*($%0(*.C@0#(-L
*-/0?("*/($%0#0(&?("*(0KED&=&$(C"EE&*+($"@D0(C"&*$"&*0/($#"='&*+($%0("??&+*C0*$(-L(?%"#/?
$-(*-/0?F([%0*("//&*+(*0G(*-/0?9("(?.@?0$(-L(?%"#/?(L#-C(0K&?$&*+(*-/0?(="*(@0
0\=&0*$D6(C-H0/(&*$-($%0(*0G(*-/0?(G&$%-.$(#0Y.&#&*+("(C"??&H0(/"$"(#0"??&+*C0*$F

%#&$
e0#L-#C&*+(#"*+0(Y.0#&0?(=-.D/(@0(&*0\=&0*$F(SK"CED0?(-L(#"*+0(Y.0#&0?("#0(R*/&*+(#-G?
+#0"$0#($%"*("(D-G0#(@-.*/(-#(D0??($%"*("*(.EE0#(@-.*/(T"?(-EE-?0/($-(E-&*$(D--'.E?WF

'&()*$+$
>?("($0"C(G&$%(0KE0#&0*=0(@.&D/&*+("*/(#.**&*+(C.D$&ED0(/"$"@"?0(?6?$0C?9(G0(%"H0(L-.*/
%"?%(?%"#/&*+($-(@0(&/0"D(L-#(G-#'D-"/?(#0Y.&#&*+(?="D0F(,-#(0K"CED09(G&$%-.$("*6
0K=0E$&-*9("DD($%0(C"??&H0D6(?="D"@D0(?0#H&=0?(G0(#"*("$(,"=0@--'(-*(>E"=%0(XP"?0
&CED0C0*$0/(%"?%(?%"#/&*+("$($%0("EED&="$&-*(D"60#("*/(E#0Q?ED&$($"@D0?F([&$%-.$(%"?%
?%"#/&*+9($%0?0("EED&="$&-*?(G-.D/(%"H0(%&$(?0H0#0(@-$$D0*0='?F

[0(/0=&/0/(N.+"@6$0OP(?%-.D/(?.EE-#$(=-*?&?$0*$(%"?%(?%"#/&*+F

Google Spanner and HBase – Range Sharding

>E"=%0(XP"?0(&?("(C"??&H0D6(?="D"@D09(/&?$#&@.$0/(c-<AB(/"$"@"?0(C-/0DD0/("L$0#(a--+D0
P&+3"@D0F(3%&?(&?("*-$%0#(/"$"@"?0($%"$(C"*6(C0C@0#?(&*($%0(N.+"@6$0($0"C("#0(L"C&D&"#
G&$%(+&H0*($%06(@.&D$("*/(#"*(XP"?0("$(?="D0(&*?&/0(,"=0@--'(C"*6(60"#?("+-F(J$(G"?($%0
/"$"@"?0($%"$(@"='0/(C.D$&ED0(&*$0#*0$Q?="D0(?0#H&=0?(?.=%("?(,"=0@--'(V0??0*+0#(T$%0
.?0#($-(.?0#(C0??"+&*+(ED"$L-#CW("*/($%0(4E0#"$&-*"D(O"$"(<$-#0(TG%&=%(E-G0#0/(C0$#&=?
"*/("D0#$?("=#-??("DD(,"=0@--'(&*L#"?$#.=$.#0WF(XP"?09("?(G0DD("?(a--+D0(<E"**0#9(%"H0
?.EE-#$(L-#(#"*+0(?%"#/&*+F

)"*+0(?%"#/&*+(&*H-DH0?(?ED&$$&*+($%0(#-G?(-L("($"@D0(&*$-(=-*$&+.-.?(#"*+0?($%"$(#0?E0=$
$%0(?-#$(-#/0#(-L($%0($"@D0(@"?0/(-*($%0(E#&C"#6('06(=-D.C*(H"D.0?F(3%0($"@D0?($%"$("#0
#"*+0(?%"#/0/(.?."DD6(?$"#$(-.$(G&$%("(?&*+D0(?%"#/F(>?(/"$"(&?(&*?0#$0/(&*$-($%0($"@D09(&$(&?
/6*"C&="DD6(?ED&$(&*$-(C.D$&ED0(?%"#/?(@0=".?0(&$(&?(*-$("DG"6?(E-??&@D0($-('*-G($%0
/&?$#&@.$&-*(-L('06?(&*($%0($"@D0("%0"/(-L($&C0F(3%0(@"?&=(&/0"(@0%&*/(#"*+0(?%"#/&*+(&?
?%-G*(&*($%0(R+.#0(@0D-GF

!"#$
3%&?($6E0(-L(?%"#/&*+("DD-G?(0\=&0*$D6(Y.0#6&*+("(#"*+0(-L(#-G?(@6($%0(E#&C"#6('06(H"D.0?F
SK"CED0?(-L(?.=%("(Y.0#6(&?($-(D--'(.E("DD('06?($%"$(D&0(@0$G00*("(D-G0#(@-.*/("*/("*
.EE0#(@-.*/F

%#&$
)"*+0(?%"#/&*+(D0"/?($-("(*.C@0#(-L(&??.0?(&*(E#"=$&=0("$(?="D09(?-C0(-L(G%&=%("#0(?&C&D"#
$-($%"$(-L(D&*0"#(%"?%(?%"#/&*+F

,&#?$D69(G%0*(?$"#$&*+(-.$(G&$%("(?&*+D0(?%"#/(&CED&0?(-*D6("(?&*+D0(*-/0(&?($"'&*+("DD($%0(.?0#
Y.0#&0?F(3%&?(-L$0*(#0?.D$?(&*("(/"$"@"?0(]G"#C&*+^(E#-@D0C9(G%0#0("DD(Y.0#&0?("#0(%"*/D0/
@6("(?&*+D0(*-/0(0H0*(&L($%0#0("#0(C.D$&ED0(*-/0?(&*($%0(=D.?$0#F(3%0(.?0#(G-.D/(%"H0($-
G"&$(L-#(0*-.+%(?ED&$?($-(%"EE0*("*/($%0?0(?%"#/?($-(+0$(#0/&?$#&@.$0/(@0L-#0("DD(*-/0?(&*
$%0(=D.?$0#("#0(@0&*+(.$&D&M0/F(3%&?(="*(@0("(@&+(&??.0(&*(E#-/.=$&-*(G-#'D-"/?F(3%&?(="*(@0
C&$&+"$0/(&*(?-C0(="?0?(G%0#0($%0(/&?$#&@.$&-*(&?('06?(&?('*-G*("%0"/(-L($&C0(@6(E#0Q
?ED&$$&*+($%0($"@D0(&*$-(C.D$&ED0(?%"#/?9(%-G0H0#($%&?(&?(%"#/(&*(E#"=$&=0F

<0=-*/D69(+D-@"DD6(-#/0#&*+('06?("=#-??("DD($%0(?%"#/?(-L$0*(+0*0#"$0?(%-$(?E-$?b(?-C0
?%"#/?(G&DD(+0$(C.=%(C-#0("=$&H&$6($%"*(-$%0#?9("*/($%0(*-/0(%-?$&*+($%-?0(G&DD(@0
-H0#D-"/0/(#0D"$&H0($-(-$%0#?F([%&D0($%0?0(="*(@0(C&$&+"$0/($-(?-C0(0K$0*$(G&$%("=$&H0(D-"/
@"D"*=&*+9($%&?(/-0?(*-$("DG"6?(G-#'(G0DD(&*(E#"=$&=0(@0=".?0(@6($%0($&C0(%-$(?%"#/?("#0
#0/&?$#&@.$0/("=#-??(*-/0?9($%0(G-#'D-"/(=-.D/(=%"*+0("*/(&*$#-/.=0(*0G(%-$(?E-$?F

'&()*$+$
)"*+0(?%"#/&*+(&?(0??0*$&"D(L-#(0\=&0*$D6(?.EE-#$&*+(Y.0#&0?(D--'&*+(.E("(#"*+0(-L(#-G?
@"?0/(-*(=-D.C*(H"D.0?($%"$("#0(D0??($%"*9(+#0"$0#($%"*(-#($%"$(D&0(@0$G00*(?-C0(.?0#
?E0=&R0/(H"D.0?F(<.@`0=$&*+(?.=%(Y.0#&0?($-("(?=%0C0($%"$(&?(*-$(#"*+0(?%"#/0/(=-.D/(@0
E#-%&@&$&H0(&*(E0#L-#C"*=09(?&*=0(&$(C&+%$(%"H0($-(E0#L-#C("(L.DD($"@D0(?="*F(3%&?(C"'0?($%&?
?$#"$0+6(0??0*$&"DF

[%0*(#"*+0(?%"#/&*+(&?(E&='0/(&*(?=0*"#&-?($%"$(/-(*-$(#0Y.&#0($%0(E#&C"#6('06?($-(@0
-#/0#0/9("EED&="$&-*?(#.*(&*$-(?="D"@&D&$6(@-$$D0*0='?("?(C0*$&-*0/(&*($%0(=-*?(?0=$&-*
"@-H0F(>*(-L$0*(#0=-CC0*/0/(G-#'"#-.*/(&?($-(&CED0C0*$(%"?%(?%"#/&*+(-*($-E(-L(#"*+0
?%"#/&*+F(P.$(&*(E#"=$&=09(.?0#?(/-(*-$("DG"6?(#0C0C@0#($-(&CED0C0*$(%"?%(?%"#/&*+(-*
$-E(-L(#"*+0(?%"#/&*+F

a&H0*($%"$(#"*+0(?%"#/&*+(&?(.?0L.D(&*(=0#$"&*(?=0*"#&-?9(G0(/0=&/0/(N.+"@6$0OP(?%-.D/
?.EE-#$(#"*+0(?%"#/&*+F

Putting it all together

X"?%(?%"#/&*+(0*"@D0?(.$&D&M&*+(C.D$&ED0(*-/0?(0H0*D6(L#-C($%0(+0$(+-9("*/(&?(H0#6(0I0=$&H0
"$(E#0H0*$&*+(%-$(?E-$?F()"*+0(?%"#/&*+(&?(+--/(L-#(E0#L-#C&*+(#"*+0(?0"#=%0?(TL-#
0K"CED09('06(#"*+0(&*(@0$G00*($G-(H"D.0?W9("*/(&?(`.?$(-*0(-L(C"*6("==0??(E"$$0#*?
E-??&@D0(&*("(/&?$#&@.$0/(/"$"@"?0F(3%0($"@D0(@0D-G(?.CC"#&M0?($%0('06($#"/0-I?(@0$G00*
#"*+0("*/(%"?%(?%"#/&*+F

Support for consistent hash and range sharding

P0=".?0("DD(-L($%0("@-H0(E#-E0#$&0?("#0(/0?&#"@D09(G0(/0=&/0/($-(&*=D./0(@-$%(=-*?&?$0*$
%"?%("*/(#"*+0(?%"#/&*+(&*(N.+"@6$0OPF(3%&?(+&H0?($%0(.?0#(L.DD(=-*$#-D(-H0#(%-G($-(?%"#/
/"$"(G%0*(=#0"$&*+("($"@D0F(B0$(.?(#0H&0G($%0?0(?$#"$0+&0?($%#-.+%(0K"CED0?(-L(N.+"@6$0OP
$"@D0?(L-#("*(02-CC0#=0("EED&="$&-*F(3%0(L-DD-G&*+(0K"CED0?("#0(L#-C($%0(?$"*/"#/(<AB
/"$"?0$('*-G*("?(c-#$%G&*/?F

X"?%(?%"#/&*+(&?(&/0"D(L-#("(C"`-#&$6(-L($"@D0?9(?.=%("?($%0(=.?$-C0#?9(E#-/.=$(="$"D-+("*/
$%0(?%-EE&*+(="#$F(3%0(0K"CED0(@0D-G(?%-G?(=#0"$&*+("(=.?$-C0#($"@D0(G&$%(%"?%(?%"#/&*+F

CREATE TABLE customers (


customer_id bpchar NOT NULL,
company_name character varying(40) NOT NULL,
contact_name character varying(30),
contact_title character varying(30),
address character varying(60),
city character varying(15),
region character varying(15),
postal_code character varying(10),
country character varying(15),
phone character varying(24),
fax character varying(24),
PRIMARY KEY (customer_id HASH)
);

c-G9(D0$(.?(?"6(G0(G"*$($-(E0#L-#C(#"*+0(Y.0#&0?(-*($%0(-#/0#?($"@D0(T$%06(G"6(&$(&?
/0R*0/(&*($%&?(/"$"?0$W9("*/($%0#0L-#0(G"*$($-(#"*+0(?%"#/(&$F(3%&?(="*(@0(/-*0("?(L-DD-G?b

CREATE TABLE order_details (


order_id smallint NOT NULL,
product_id smallint NOT NULL,
unit_price real NOT NULL,
quantity smallint NOT NULL,
discount real NOT NULL,
PRIMARY KEY (order_id ASC, product_id),
FOREIGN KEY (product_id) REFERENCES products,
FOREIGN KEY (order_id) REFERENCES orders
);

Consistent hash as the default sharding strategy

3%0(*0K$(Y.0?$&-*(G"?(%-G($-(E&='($%0(/0L".D$(?%"#/&*+(?$#"$0+6F(O0L".D$?("#0(C0"*$($-
?0#H0($%0($"#+0$(.?0(="?0F(f?0#?($.#*($-(N.+"@6$0OP(E#&C"#&D6(L-#(?="D"@&D&$6(#0"?-*?F(V-?$
.?0(="?0?(#0Y.&#&*+(?="D"@&D&$6(-L$0*(/-(*-$(*00/($-(E0#L-#C(#"*+0(D--'.E?(-*($%0(E#&C"#6
'069(%0*=0(G0(E&='0/(=-*?&?$0*$(%"?%(?%"#/&*+("?($%0(/0L".D$(&*(N.+"@6$0OPF(f?0#(&/0*$&$6
T.?0#(&/?(/-(*-$(*00/(-#/0#&*+W9(E#-/.=$(="$"D-+(TE#-/.=$(&/?("#0(*-$(#0D"$0/($-(-*0
"*-$%0#W("*/(?$-='($&='0#(/"$"(T-*0(?$-='(?6C@-D(&?(&*/0E0*/0*$(-L("DD(-$%0#(?$-='(?6C@-DW
"#0(?-C0(=-CC-*(0K"CED0?F

J*(.?0(="?0?(G%0*(#"*+0(D--'.E?("#0(/0?&#0/9(N.+"@6$0OP("DD-G?(?E0=&L6&*+(#"*+0
?%"#/&*+9("D-*+(G&$%(-E$&-*"DD6(E#0Q?ED&$$&*+($%0(/"$"F(J*(="?0?(G%0*(#"*+0(Y.0#&0?(@0=-C0
&CE-#$"*$("L$0#($%0(/"$"(&?("D#0"/6(D-"/0/(&*$-("(%"?%(?%"#/0/($"@D09("(#"*+0(?%"#/0/
?0=-*/"#6(&*/0K(="*(@0(=#0"$0/(-*($%"$(=-D.C*F(4*=0($%0(?0=-*/"#6(&*/0K(&?(#0@.&D$9(#"*+0
Y.0#&0?(G-.D/(@0=-C0(0\=&0*$F

Future work

c-$0($%"$(".$-C"$&=($"@D0$(?ED&$$&*+(&?("*(0??0*$&"D(L0"$.#0($-(0*"@D0(=-*$&*.-.?(?%"#/&*+(-L
/"$"9(0?E0=&"DD6(L-#(#"*+0(?%"#/&*+F(>.$-C"$0/($"@D0$(?ED&$$&*+(G"?(&*=D./0/(&*(N.+"@6$0OP
#0D0"?0?(?$"#$&*+(&*(H0#?&-*(:F:9("*/(G-#'(=-*$&*.0?($-(C"'0($%&?(L0"$.#0(+0*0#"DD6("H"&D"@D0
"*/(0*"@D0/(@6(/0L".D$9(=.##0*$D6(?=%0/.D0/(L-#($%0(.E=-C&*+(:F8(#0D0"?0F(U&?&$($%0(ED"**0/
#-"/C"E($-(L-DD-G("D-*+9("*/g-#(ED0"?0(?.@?=#&@0($-($%&?(a&$X.@(&??.0F

Conclusion

2-*?&?$0*$(%"?%("*/(#"*+0(?%"#/&*+("#0($%0(C-?$(.?0L.D(/"$"(?%"#/&*+(?$#"$0+&0?(L-#("
/&?$#&@.$0/(<AB(/"$"@"?0F(2-*?&?$0*$(%"?%(?%"#/&*+(&?(@0$$0#(L-#(?="D"@&D&$6("*/(E#0H0*$&*+
%-$(?E-$?9(G%&D0(#"*+0(?%"#/&*+(&?(@0$$0#(L-#(#"*+0(@"?0/(Y.0#&0?F(N.+"@6$0OP(?.EE-#$?
@-$%(%"?%("*/(#"*+0(?%"#/&*+(-L(/"$"("=#-??(*-/0?($-(0*"@D0($%0(@0?$(-L(@-$%(G-#D/?9(G&$%
%"?%(?%"#/&*+("?($%0(/0L".D$F

What’s Next?

2-CE"#0(N.+"@6$0OP(&*(/0E$%($-(/"$"@"?0?(D&'0(2-='#-"=%OP9(a--+D0(2D-./(<E"**0#
"*/(V-*+-OPF
a0$(?$"#$0/(G&$%(N.+"@6$0OP(-*(C"=4<9(B&*.K9(O-='0#9("*/(!.@0#*0$0?F
2-*$"=$(.?($-(D0"#*(C-#0("@-.$(D&=0*?&*+9(E#&=&*+(-#($-(?=%0/.D0("($0=%*&="D(-H0#H&0GF

JANUARY 14, 2020  

! " # $ % & ' ( ) * + , &- % * . ) / * 0 $ ) , % & . 1 " &- 2(/)*)*#'*'3& - 2#.)3/,.1"

!"#$%&'()"*+"*"$%"* | ,-.*/0#(1(234
5"*."#6(789(:;:;

Related Posts

Yugabyte Java Development: Snowflake CDC:


Engineering: Why I How Applications Publishing Data
Decided to Join a Litter Beyond the Using Amazon S3
Fast-Growing Heap and YugabyteDB
Startup 5 days ago 6 days ago
3 days ago

Get started in any cloud, container,


or data center

!"#$%&'()* !"#$%&'()*+,-&./(0( !"#$%&'()*+1$-$#(2

!"#$%&'( )*(#%"&*( +#,-./0

4E0*(<-.#=0 a0$(<$"#$0/ >@-.$

<0DLQV"*"+0/(eD"$L-#C O-=.C0*$"$&-* 2"#00#?


Bot from Yugabyte
,.DD6QV"*"+0/(2D-./ PD-+ <.==0??(<$-#&0?
How can we help you?
<$"#$.E?(e#-+#"C 2-CE"#&?-*? 2-*$"=$(f?
Reply to Bot
e#&=&*+ <D"=' <.EE-#$(e-D&=6

<.EE-#$ a&$X.@ e#&H"=6(e-D&=6 Chat by Drift

e#-L0??&-*"D(<0#H&=0? ,-#.C 2--'&0(e-D&=6

3#"&*&*+ ,>A

2-E6#&+%$(i(:;:;Q:;:7(Nfa>PN3S9(Jc2F(>DD(#&+%$?(#0?0#H0/F
" # $ %

You might also like