16 рдЬреАрдмреА рд░реИрдо рдкрд░ рдЬрд╛рд╡рд╛ рдореИрдк рдореЗрдВ 3 рдмрд┐рд▓рд┐рдпрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ

рдПрдХ рдмрд░рд╕рд╛рдд рдХреА рд╢рд╛рдо, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛, рдореИрдВ 16 рдЬреАрдмреА рд░реИрдо рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреЗ рд░рд┐рдХреЙрд░реНрдб рдореИрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрдЧреНрд░рд╣ рдХреА рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА рд▓рд╛рдЧрддреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЫреЛрдЯреА рдХреБрдВрдЬреА рдФрд░ рдЫреЛрдЯреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рднреА рдкрд░реАрдХреНрд╖рдг 64-рдмрд┐рдЯ рд▓рд┐рдирдХреНрд╕ рдХреБрдмрдВрдЯреВ 12.04 рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред рд╣реЙрдЯрд╕реНрдкреЙрдЯ 23.5-b02 рдХреЗ рд╕рд╛рде рдЬреЗрд╡реАрдПрдо 64 рдмрд┐рдЯ рдУрд░реЗрдХрд▓ рдЬрд╛рд╡рд╛ 1.7.0_09-b05ред рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрд┐рдВрджреБ (-XX: + UseCompressedOops) рдЗрд╕ JVM рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред

Java.util.TreeMap рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдгред рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕реНрдореГрддрд┐ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАред рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЬреЗрд╡реАрдПрдо рдкреИрд░рд╛рдореАрдЯрд░ - Xmx15G

рдЖрдпрд╛рдд java.utilред *;
рдирдХреНрд╢рд╛ m = рдирдпрд╛ рдЯреНрд░реАрдкреИрдк ();
(рд▓рдВрдмреЗ рдХрд╛рдЙрдВрдЯрд░ = 0 ;; рдХрд╛рдЙрдВрдЯрд░ ++) {
m.put (рдХрд╛рдЙрдВрдЯрд░, "");
if (рдХрд╛рдЙрдВрдЯрд░% 1000000 == 0) System.out.println ("" + рдХрд╛рдЙрдВрдЯрд░);
}

рдпрд╣ рдЙрджрд╛рд╣рд░рдг 172 рдорд┐рд▓рд┐рдпрди рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдЖред рдЕрдВрдд рдореЗрдВ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреА рдЖрдХреНрд░рд╛рдордХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдзреАрдореА рд╣реЛ рдЧрдИред рджреВрд╕рд░реЗ рд░рди рдореЗрдВ, рдореИрдВрдиреЗ рдЯреНрд░реА рдореИрдк рдХреЛ рдПрдХ рд╣рд╛рд╢рдк рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдпрд╣ 182 рдорд┐рд▓рд┐рдпрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реБрдкрд░ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдЖрдЗрдП рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдореИрдкрд╣реЗрдб рд╕реЗ рд▓реЙрдиреНрдЧрд╣реИрд╢ рдореИрдк рдЪреБрдирд╛, рдЬреЛ рдХрд┐ рдЖрджрд┐рдо рд▓рдВрдмреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред JVM рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд┐рд░ рд╕реЗ -Xmx15G

рдЖрдпрд╛рдд org.mapdbред *
LongMap m = рдирдпрд╛ LongHashMap ();
(рд▓рдВрдмреЗ рдХрд╛рдЙрдВрдЯрд░ = 0 ;; рдХрд╛рдЙрдВрдЯрд░ ++) {
m.put (рдХрд╛рдЙрдВрдЯрд░, "");
if (рдХрд╛рдЙрдВрдЯрд░% 1000000 == 0) System.out.println ("" + рдХрд╛рдЙрдВрдЯрд░);
}

рдЗрд╕ рдмрд╛рд░ рдХрд╛рдЙрдВрдЯрд░ 276 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред рдлрд┐рд░ рд╕реЗ рдЕрдВрдд рдореЗрдВ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреА рдЖрдХреНрд░рд╛рдордХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдзреАрдореА рд╣реЛ рдЧрдИред

рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕реАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рд▓рд╛рддрд╛ рд╣реИред

рдпрд╣ рдЕрд╕рд▓реА рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреЛ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ :-)ред рд╣рдо рд╣рдореЗрд╢рд╛ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рдЖрдк рдХреЗ рд▓рд┐рдП MapDB рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде TreeMap рдФрд░ HashMap рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рднрдВрдбрд╛рд░рдг рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рддреЛ рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдк рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХреЗ рдмрд┐рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рд▓реЗрди-рджреЗрди рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рддреА рд╣реИред

рдЖрдпрд╛рдд org.mapdbред *

DB db = DBMaker
.newDirectMemoryDB ()
.transactionDisable ()
.make ();

рдорд╛рдирдЪрд┐рддреНрд░ m = db.getTreeMap ("рдкрд░реАрдХреНрд╖рдг");
(рд▓рдВрдмреЗ рдХрд╛рдЙрдВрдЯрд░ = 0 ;; рдХрд╛рдЙрдВрдЯрд░ ++) {
m.put (рдХрд╛рдЙрдВрдЯрд░, "");
if (рдХрд╛рдЙрдВрдЯрд░% 1000000 == 0) System.out.println ("" + рдХрд╛рдЙрдВрдЯрд░);
}

рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ JVM рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: -XX: MaxDirectMemorySize = 15G -Xmx128Mред рд╕реНрдореГрддрд┐ 980 рдорд┐рд▓рд┐рдпрди рдореЗрдВ рднрд╛рдЧ рдЧрдИред

рд▓реЗрдХрд┐рди MapDB рдмреЗрд╣рддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рдЦрдВрдбрди рд╣реИ, рдмреА-рдЯреНрд░реА рдиреЛрдб рдкреНрд░рддреНрдпреЗрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдкрд░ рдЖрдХрд╛рд░ рджреЗрддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдбрд╛рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдХреЛ рдЪрд╛рдЯрдирд╛ рд╣реИред рдпрд╣ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╡рд┐рдЦрдВрдбрди рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред DB рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓реЗрдВ:

DB db = DBMaker
.newDirectMemoryDB ()
.transactionDisable ()
.SyncFlushDelay (100)
.make ();

рдорд╛рдирдЪрд┐рддреНрд░ m = db.getTreeMap ("рдкрд░реАрдХреНрд╖рдг");

рдореЗрдореЛрд░реА 31 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж 1.738 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдмрд╛рд╣рд░ рдЪрд▓рд╛ рдЧрдпрд╛ред

32 рд╕реЗ 120 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдореЗрдВ рдкреЗрдбрд╝ рдореЗрдВ рдиреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдХрд░ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╕рдВрдкреАрдбрд╝рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдХреЗ MapDB рдФрд░ рднреА рдмреЗрд╣рддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

DB db = DBMaker
.newDirectMemoryDB ()
.transactionDisable ()
.SyncFlushDelay (100)
ред
.make ();

рдорд╛рдирдЪрд┐рддреНрд░ m = db.createTreeMap ("рдкрд░реАрдХреНрд╖рдг", 120, рдЭреВрдард╛, рдЕрд╢рдХреНрдд, рдЕрд╢рдХреНрдд, рдЕрд╢рдХреНрдд);

рдпрд╣ рдЙрджрд╛рд╣рд░рдг 3.315 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдореЗрдореЛрд░реА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдХрд╛рд░рдг рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдШрдВрдЯреЛрдВ рдХреЗ рднреАрддрд░ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди (рд╡рд┐рд╢реЗрд╖ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ) рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдХрд╣реАрдВ 4 рдмрд┐рд▓рд┐рдпрди рдХреЗ рдЖрд╕рдкрд╛рд╕ред

рд╢рд╛рдпрдж рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рд╕рднреА рдиреЛрдЯ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рдлрд┐рдЯ рд╣реИрдВред рдЙрддреНрддрд░ рдбреЗрд▓реНрдЯрд╛-рдХреБрдВрдЬреА рд╕рдВрдкреАрдбрд╝рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреА-рдЯреНрд░реА рдореЗрдВ рдСрд░реНрдбрд░ рдХреА рдЧрдИ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдбрд╛рд▓рдирд╛ рдПрдХ рдмреЗрд╣рддрд░ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдФрд░ рдореИрдкрдмреАрдбреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрд▓реНрдЯрд╛-рдХреБрдВрдЬреА рд╕рдВрдкреАрдбрд╝рдиред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдЬрд╝рд╛рд▓рд┐рдм рд╕рдВрдкреАрдбрд╝рди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ред

DB db = DBMaker
.newDirectMemoryDB ()
.transactionDisable ()
.SyncFlushDelay (100)
.make ();

рдорд╛рдирдЪрд┐рддреНрд░ m = db.getTreeMap ("рдкрд░реАрдХреНрд╖рдг");

рд░реИрдВрдбрдо r = new random ();
(рд▓рдВрдмреЗ рдХрд╛рдЙрдВрдЯрд░ = 0 ;; рдХрд╛рдЙрдВрдЯрд░ ++) {
m.put (r.nextLong (), "");
if (рдХрд╛рдЙрдВрдЯрд░% 1000000 == 0) System.out.println ("" + рдХрд╛рдЙрдВрдЯрд░);
}

рд▓реЗрдХрд┐рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдХреЗ рд╕рд╛рде рднреА, MapDB рд╕рд╛рдзрд╛рд░рдг рдбрд╛рдпрдиреЗрдорд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 651 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб, рд▓рдЧрднрдЧ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рдХрдИ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ MapDB рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рд╕рдореНрдорд┐рд▓рди рдХреА рдЧрддрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рдереА рдФрд░ рдореИрдкрдбреАрдмреА рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

github.com/jankotek/jdbm3

Source: https://habr.com/ru/post/In158451/


All Articles