- ΠΠ΅ΡΡΠΈΠΊΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°
- ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊ
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
- ΠΠ½Π΄Π΅ΠΊΡΡ
- Π Π΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ
- Π¨Π°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- 6.1 ΠΠ±ΡΠ΅Π΅
- 6.2 Vitess.io
- ΠΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² Π Π‘Π£ΠΠ
- In-memory Π‘Π£ΠΠ
rps
,rpm
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈpps
(packets per second),mps
(megabytes ...) - ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈsimultaneous connections
,concurrency
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉlatency
- Π·Π°Π΄Π΅ΡΠΆΠΊΠ° ΠΎΡΠ²Π΅ΡΠ°throughput
- ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ (Π² Ρ Π°ΠΉΠ»ΠΎΠ°Π΄ ΠΆΠ΅ΡΡΠ²ΡΡΡ latency ΡΠ°Π΄ΠΈ ΡΡΠΎΠ³ΠΎ)
Π‘ΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ (95, 99) - ΠΏΠ΅ΡΡΠ΅Π½ΡΠΈΠ»ΠΈ
- ΠΠ΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ - ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°
- ΠΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π·Π°Π΄Π°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠΉΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ²
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ pid, tid, uid, gid, euid, egid ΠΈ Ρ. Π΄.
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°/ΠΏΠΎΡΠΎΠΊΠ°
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ)
- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ
- ΠΡΠΈΡΡΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
- ΠΡΠΈΡΡΠΊΠ° TLB, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅
Π ΡΠΈΡΡΠ΅ΠΌΠ΅ linux ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ. Π£ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ½Π° ΠΎΠ±ΡΠ°Ρ
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°
clone(
child_stack=0,
ags=CLONE_CHILD_CLEARTID |
CLONE_CHILD_SETTID |
SIGCHLD,
child_tidptr=0x7fa001a93a10) = 6916
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°
clone(
child_stack=0,
ags=CLONE_VM|
CLONE_FS|
CLONE_FILES|
CLONE_SYSVSEM|
CLONE_SIGHAND|
CLONE_THREAD|
CLONE_SETTLS|
CLONE_PARENT_S
child_tidptr=0x7fa001a93a10) = 6916
- worker (ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ)
- prefork (ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΠΉ)
- ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ (select)
- async (Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ epol)
- ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ
- ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΡΡΠ°ΡΠ½ΠΎΠ΅
- ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ
- ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ
ΠΠ»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ) Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ Π΄Π°Π½Π½ΡΠ΅ (ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ ). ΠΠΎ Π²ΡΠ΅ΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ. Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌ. Π Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ»ΠΈ ΠΎΡΠ²Π΅Ρ (Ρ ΠΎΡΡ Π±Ρ Π΅Π³ΠΎ ΡΠ°ΡΡΡ), ΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ Π³ΠΎΡΠΎΠ²Ρ. Π§ΡΠ΅Π½ΠΈΠ΅ Ρ Π΄ΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌ(*)
- Apache - ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΠΉ
- Nginx - Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ
- ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ - Π±ΡΡΡΡΡΠΉ, ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ ΠΌΠ°Π»ΠΎ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ - ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ.
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ - ΠΌΠ΅Π΄Π»Π΅Π½Π΅Π΅, ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ - ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ.
-
Perl
- ΠΠ±ΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π½ΡΡΡΠΈ apache.
- Π‘ΠΈΠ½Ρ Π½ΡΠΎΠ½Π½ΡΠΉ ΡΠ·ΡΠΊ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠ² (ΡΠ΅Π΄ΠΊΠΎ).
- ΠΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° AnyEvent (Π΅ΡΠ΅ ΡΠ΅ΠΆΠ΅ ΡΡΠ΅Π΄ΠΎΠ²)
- ΠΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ fiber
-
Php
- CLI SAPI - Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ php Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π°ΡΠΈΡ ΠΊΡΠΎΠ½ΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ cli-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (Command Line Interface)
- apxs2 SAPI - Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊ apache2
- CGI SAPI - Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ CGI (ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°ΠΊ ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ)
- FPM SAPI - Fast Process Manager, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π΄Π»Ρ PHP ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½ΠΈΠΈ Badoo ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ
- ΠΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, Π½ΠΎ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
-
Python
- ΠΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ.
- ΠΡΡΡ fiber.
- ΠΡΠΎΡΠ΅ΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² Python ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠ΄ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
-
Node.js
- ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄.
- Π‘ΡΡΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ.
-
Go
- ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π·Π΅Π»Π΅Π½ΡΡ ΡΡΠ΅Π΄ΠΎΠ².
- Π£ΠΌΠ΅Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Ρ Π¦ΠΠ£, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΠΎ.
- ΠΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ.
- ΠΡΡΡΡΡΠΉ.
Frontend, Backend, Storage
- ΠΠ°Π΄Π°ΡΠΈ frontend (reverse proxy)
- Π’Π΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ssl-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
- ΠΡΠ΄Π°ΡΠ° ΡΡΠ°ΡΠΈΠΊΠΈ.
- Keep-Alive.
- ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
- ΠΠ°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ°.
- Π ΠΎΡΡΠΈΠ½Π³ ΠΏΠΎ Π±ΡΠΊΠ΅Π½Π΄Π°ΠΌ
- ΠΠ°Π΄Π°ΡΠΈ backend
- ΠΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ°
- ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΎΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ
- ΠΠ°Π΄Π°ΡΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
- ΠΡΡΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ (ΠΈΠ½Π΄Π΅ΠΊΡΡ)
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎΡΡΠΈ (ACID)
-
Node.js multithreading: What are Worker Threads and why do they matter? - LogRocket Blog https://blog.logrocket.com/node-js-multithreading-what-are-worker-threads-and-why-do-they-matter-48ab102f8b10/
-
ΠΠ»ΠΈΡΠ½ΠΈΠ΅ Transparent Huge Pages Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ https://habr.com/ru/company/tinkoff/blog/446342/
-
Is this explanation about VSS/RSS/PSS/USS accurate? https://stackoverflow.com/questions/22372960/is-this-explanation-about-vss-rss-pss-uss-accurate
- ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ, backend
- ΠΡΡΡΡΡΠ΅ ΠΎΡΠ²Π΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
- ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ
- ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Frontend, Android, iOs
- ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π±ΡΡΡΡΠ°Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
- ΠΠ½Π΅ΡΠ³ΠΎΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ
- ΠΠ½Π°Π»ΠΈΡΠΈΠΊΠΈ
- Π£Π΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠΎΠ½ΡΡΠ½ΠΎΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΠΎΡΡΡ
- Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° Π΄ΠΈΡΠΊ
- fio - flexible i/o tester https://github.com/axboe/fio
- The following example benchmarks maximum write throughput:
fio --ioengine=sync --direct=0 \ --fsync_on_close=1 --randrepeat=0 --nrfiles=1 --name=seqwrite --rw=write \ --bs=1m --size=20G --end_fsync=1 --fallocate=none --overwrite=0 --numjobs=1 \ --directory=/mnt/gcfs --loops=10
- The following example benchmarks maximum write IOPS:
fio --ioengine=sync --direct=0 \ --fsync_on_close=1 --randrepeat=0 --nrfiles=1 --name=randwrite --rw=randwrite \ --bs=4K --size=1G --end_fsync=1 --fallocate=none --overwrite=0 --numjobs=80 \ --sync=1 --directory=/mnt/standard --loops=10
- fio - flexible i/o tester https://github.com/axboe/fio
- Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ
- Phoronix https://phoronix-test-suite.com/
phoronix-test-suite benchmark smallpt Test Results: 57.683207988739 57.237819910049 57.684161901474 Average: 57.54 Seconds
- Phoronix https://phoronix-test-suite.com/
- Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° ΡΠ΅ΡΡ
- iperf3 https://software.es.net/iperf/
iperf3 -s iperf3 -c 192.168.1.66 [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 42.9 GBytes 36.8 Gbits/sec 0 sender [ 4] 0.00-10.00 sec 42.9 GBytes 36.8 Gbits/sec
- iperf3 https://software.es.net/iperf/
- ΠΠΎΠ΄Π°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ
httpperf
,ab
- ΠΠΎΠ΄Π°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
sysbench
(MySQL),pgbench
(PostgreeSQL)
- ΠΠΎΠ΄Π°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
curl
,wget
,ab
- Π½Π° ΡΡΠΎΠ²Π½Π΅ TCP -
tcpreplay
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΡΡΡΡ
- Π‘Π°ΠΌΠΎΠΏΠΈΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ "ΠΠ΅ΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ"
- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΡ Π±Π΅Π· ΠΏΠ°ΡΠ· Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΡΠ½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ°, Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Ρ Π½ΡΠΆΠ½ΠΎΠΉ ΡΠΈΠ»ΠΎΠΉ, Ρ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ
- Appache.JMeter - ΠΏΡΠΎΡΡΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ (Groovy, Java, JavaScript)
- Gatling - ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Ρ Π΄Π΅ΡΡΡΠΊΠ°ΠΌΠΈ Π·ΠΏΡΠΎΡΠΎΠ² (Scala)
- wrk - Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Lua
- Yandex.Tank - Π΅Π΄ΠΈΠ½ΡΠΉ ΠΎΡΡΠ΅Ρ, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Go, Pyhon)
- Π‘ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ
- ΠΡΠ»Π°Π΄ΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ (Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅ΡΡΠ° Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠΈΡΡΠ΅ΠΌ)
TIG
- Telegraph, InfluxDB, GrafanaPrometheus
- Telegraf, Prometheus, GrafanaZabbix
- Zabbix, Grafana.
- Π‘ΡΠ°Π²Π½ΠΈΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ
-
ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ (load testing) - Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΠΈΠ»Ρ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ Π²ΡΡΠ΅
- ΠΏΠΎΠ΄Π°Π΅ΠΌ Π½Π°Π³ΡΡΠ·ΠΊΡ ΡΡΡΠΏΠ΅Π½ΡΠΌΠΈ, Π½Π°ΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ( Π²ΡΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°Π³ΡΡΠ·ΠΊΡ, Π΅ΡΡΡ Π»ΠΈ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ°)
- Π²ΡΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ°, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ Π΅ΡΡΡ Π»ΠΈ Π·Π°ΠΏΠ°Ρ
- ΠΈΡΠ΅ΠΌ ΡΠΎΡΠΊΡ Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ (timeout, 504)
- ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Ρ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΌ Π½Π°Π³ΡΡΠ·ΠΊΠΈ (min, med, max)
- ΠΈΡΠ΅ΠΌ ΡΠ·ΠΊΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Π»ΠΈΠΌΠΈΡΡ, Π².Ρ.Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅
- Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
- ΠΈΡΠ΅ΠΌ ΡΠΎΡΠΊΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ
- ΡΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ
- ΠΈΡ ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΡΠΈΠ»Ρ Π½Π°Π³ΡΡΠ·ΠΊΠΈ (med, max)
- Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠΎΡΠΈΠ»Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠ° ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ (80% ΠΎΡ ΡΠΎΡΠΊΠΈ Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΠΈ)
-
Π‘ΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ (stability testing) - Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎ ΡΡΠ΅Π΄Π½Π΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ, ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ (ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ 24/7, ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π° Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎ ΡΠ°ΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π΅ΡΡΡ Π»ΠΈ ΡΡΠ΅ΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ, Π½Π΅Ρ Π»ΠΈ ΠΏΠΎΡΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ )
-
Π‘ΡΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ (stress testing) - ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΠ°Π±ΠΎΡΠΈΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΡΠ΅ΡΡΡΡΠ°Ρ (Π΅ΡΠ»ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π΅Π½Π°Π΄ΠΎΠ»Π³ΠΎ ΠΏΡΠ΅Π²ΡΡΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ Π»ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΡΡΡΡ, Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ)
- Π±ΡΡΡΡΠΎ ΠΈ Π½Π΅Π½Π°Π΄ΠΎΠ»Π³ΠΎ ΠΏΠΎΠ²ΡΡΠΈΠΌ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·
- ΠΡΡΠ²ΠΈΠΌ ΡΡΠ΅ΡΠΊΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
- Π²ΡΡΠ²ΠΈΠΌ ΡΡΠ΅ΡΠΊΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠ΅ΡΡΡΡΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠ΅ΡΡΡΡΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ
- Π±ΡΡΡΡΠΎ Π»ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ
-
ΠΠ±ΡΠ΅ΠΌΠ½ΠΎΠ΅ (volume testing) - ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² Π΄Π°Π½Π½ΡΡ (ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠ΅Π· 5 Π»Π΅Ρ ΡΠ°Π±ΠΎΡΡ, Π° Π΅ΡΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²)
- ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· 1 Π³ΠΎΠ΄ ΡΠ°Π±ΠΎΡΡ
- ΡΡΠ΅Π½Π½Π°ΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· 5 Π»Π΅Ρ ΡΠ°Π±ΠΎΡΡ
- ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· 10 Π»Π΅Ρ ΡΠ°Π±ΠΎΡΡ
- Π½ΡΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΈ Π»ΡΡΡΠ΅ Π΅Π³ΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π° SQL
-
ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ (scalability testing) - ΡΠ΅ΡΠΈΡ Π½Π°Π³ΡΡΠ·ΠΎΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠ·Π»ΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΡ, Π½Π°ΡΡΡΠΎΠ΅ΠΊ - ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ, Π»ΠΈΠΌΠΈΡΠΎΠ² (ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π² 2 ΡΠ°Π·Π°, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠ΅Π΄Π΅Π» Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅, ΠΊΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° Π΄Π²ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ )
- ΠΠ°ΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³Π½ΠΎΠ·Π° Π·Π°ΡΡΠ°Ρ
- ΠΠ°ΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠ΅Π΄Π΅Π»
- ΠΠ°ΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ·Π»ΠΎΠ² Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠ°ΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ·Π»ΠΎΠ² Π·Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ
- ΠΠ°ΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ·Π»ΠΎΠ² - Π΄Π°Π΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ
- ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ SQL Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
- Π²ΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ
- ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ 100ΠΠ±Π°ΠΉΡ
- Π½Π΅ Π½ΡΠΆΠ½Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
- SQL - ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ΅
- API - Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ
- Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅
- Π±ΡΡΡΡΡΠΉ ΠΎΡΠΊΠ»ΠΈΠΊ ΠΏΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²ΠΊΠ΅
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ
- Π£ΡΠΊΠΎΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ
- ΠΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄Π΅Π»Π°ΡΡ constaints (UNIQUE, FOREIGN KEY)
- BTREE
- RTREE
- Hash
- FULLTEXT
-
ΡΠΌΠ΅Π΅Ρ
- ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ°Π²Π΅Π½ΡΡΠ²Ρ (Π°=5)
- ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΠΎΡΠΊΡΡΡΡΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ (Π° > 5 b a < 3)
- ΠΠΎΠΈΡΠΊ ΠΏΠΎ Π·Π°ΠΊΡΡΡΠΎΠΌΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ ( 2 < f < 8)
-
Π½Π΅ ΡΠΌΠ΅Π΅Ρ
- ΠΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°
- ΠΡΠΊΠ°ΡΡ ΡΡΡΡΠΈΠΊΡΡ
-
Π΄Π»Ρ ΡΡΡΠΎΠΊ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° (Like ΡΠΎ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ)
- Ρ
ΠΎΡΠΎΡΠΎ
LIKE "a%"
, ΠΏΠ»ΠΎΡ ΠΎLIKE "%c"
- Ρ
ΠΎΡΠΎΡΠΎ
- InnoDB - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π²ΡΠΎΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π΅ΡΡΡ ΡΠΊΡΡΡΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°)
- MyIsam - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠ»ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅
- ΠΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΎΡΠ½ΡΠΌΠΈ key(a,b,c)
- ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°
- ΠΠ½Π΄Π΅ΠΊΡΡ Π΄ΠΎΡΠΎΠ³Π°Ρ ΡΡΡΠΊΠ°
- ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
- ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
- ΠΠ»Π°ΡΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ - InnoDB - ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΊΡΡΡΡΠΉ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΈΠ· PRIMARY_KEY ΠΈΠ»ΠΈ UNIQUE_KEY ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ
- Π΅ΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ,ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΈΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ( ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ ΠΏΠΎΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠ΅ΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠΎΡΡΠ° ΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°ΡΡΠΈ) ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΡΡΠΈΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½Π°ΡΠΈΠ΅Π² ΡΡΠ΄ΠΎΠΌ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ, ΡΡΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΡΠ΅Π½ΠΈΠ΅
- ΠΠΎΠΈΡΠΊ Π΄Π°Π½Π½ΡΡ
- Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
- ΠΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ (ΠΏΠΎΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ - covering indexes)
- Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ
USE db;
CREATE TABLE tbl (
id bigint(20) NOT NULL AUTO_INCREMENT,
a bigint(20) NOT NULL,
b bigint(20) NOT NULL,
c bigint(20) NOT NULL,
d bigint(20) NOT NULL,
e bigint(20) NOT NULL,
str VARCHAR(54) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ - data/docker-compose.yml
- Π΄Π°Π½Π½ΡΠ΅ - mock-generate.py
EXPLAIN SELECT a, b from tbl where a = 1;
- type: all - ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
+----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-------------+
| 1 | SIMPLE | tbl | NULL | ALL | NULL | NULL | NULL | NULL | 21460 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-------------+
- ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ
CREATE INDEX a ON tbl(a);
EXPLAIN SELECT a, b from tbl where a = 1;
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------+
| 1 | SIMPLE | tbl | NULL | ref | a | a | 8 | const | 10730 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------+
- type: ref
EXPLAIN SELECT a from tbl where a = 1;
- Extra: Using index - Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅ΡΡΡΡΡ ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ°
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
| 1 | SIMPLE | tbl | NULL | ref | a | a | 8 | const | 10730 | 100.00 | Using index |
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
EXPLAIN SELECT a, b from tbl where a = 1 and b = 3
- Π·Π°ΠΏΡΠΎΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΡΠΊΡ Π°, Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ b
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
| 1 | SIMPLE | tbl | NULL | ref | a | a | 8 | const | 10730 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
CREATE INDEX a_b ON tbl(a,b);
EXPLAIN SELECT a, b from tbl where a = 1 and b = 3
- ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΊΠ»ΡΡΠ°ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ
+----+-------------+-------+------------+------+---------------+------+---------+-------------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+-------------+------+----------+-------------+
| 1 | SIMPLE | tbl | NULL | ref | a_b | a_b | 16 | const,const | 1000 | 100.00 | Using index |
+----+-------------+-------+------------+------+---------------+------+---------+-------------+------+----------+-------------+
CREATE INDEX a_b_c ON tbl(a,b,c)
- Π₯ΠΎΡΠΎΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ
- where a = 0
- where a > 0
- where a = 0 and b > 4
- where a = 0 and b = 2
- where a = 0 and b = 2 and c > 2
- where a = 0 and b in (2,4) and c > 3
- ΠΠ»ΠΎΡ
ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ (ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ,ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠ΅ΡΠΈΠΊΡ Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ)
- where b > 3
- where b = 6
- where b = 2
- Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ - ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π»Π΅Π²Π° Π½Π° ΠΏΡΠ°Π²ΠΎ, Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ
- a > 0 and b = 4
- a = 0 and b < 3 and c = 3
- a = 0 and b > 3 and c < 3
- Π₯ΠΎΡΠΎΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ
- SELECT * FROM tbl ORDER BY a LIMIT 10
- SELECT * FROM tbl WHERE a = 1 ORDER BY b LIMIT 10
- SELECT * FROM tbl WHERE a > 1 ORDER BY a LIMIT 10 - ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΡΠΎ ΠΈ ΠΊ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²Ρ (ΡΡΠΎ ΠΆΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅)
- SELECT * FROM tbl ORDER BY a DESC, b DESC LIMIT 10 - ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ
- SELECT * FROM tbl ORDER BY a ASC, b ASC LIMIT 10
- ΠΠ»ΠΎΡ
ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ
- SELECT * FROM tbl ORDER BY b LIMIT 10
- SELECT * FROM tbl WHERE a > 1 ORDER BY b LIMIT 10
- SELECT * FROM tbl WHERE a in (1,2,3) ORDER BY b LIMIT 10 - Π² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ in Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!!!
- SELECT * FROM tbl ORDER BY a ASC, d DESC LIMIT 10 - Π² Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΡΠ°Π·Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ
- min ΠΈ max - ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ, Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΡΠΊΠΎΡΡΡΡΡΡ
- CREATE INDEX a_str ON tbl(a, str)
- SELECT a, max(str) from tbl GROUP BY a
- Π MySQL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ nested loops, Π½ΠΎ Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ
- JOIN Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ
SELECT * FROM posts WHERE author='Peter'
JOIN comments ON posts.id = comments.post_id
- ΠΠ½Π΄Π΅ΠΊΡ ΠΏΠΎ post_id - Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π΅Π½
- ΠΠ½Π΄Π΅ΠΊΡ ΠΏΠΎ comments.post_id - Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ
- OR ΡΡΠΎ ΠΏΠ»ΠΎΡ Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π² Π·Π°ΠΏΡΠΎΡΠ΅
- ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΡΠ°Π²Π½ΠΎΠ³ΠΎ
- ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΡ ΡΡΡΠΎΠΊΠΈ, Π²Π°ΠΆΠ½Π° ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ
- between
- Π½Π΅Π»ΡΠ·Ρ -
SELECT * FROM tbl WHERE a BETWEEN 0 AND 5 AND b = 5
- ΠΌΠΎΠΆΠ½ΠΎ
SELECT * FROM tbl WHERE a IN (0,1,2,3,4,5) AND b = 5
- Π½Π΅Π»ΡΠ·Ρ -
- ΡΠ΅ΠΉΠΊΠΎΠ²ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ - Π΅ΡΠ»ΠΈ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠΎΡΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π²Π΅ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ
- SELECT * from tbl WHERE gender in('m', 'f') and city = 'Moscow' (index - gender_city)
- ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
- Π½Π΅Π»ΡΠ·Ρ
SELECT * FROM tbl WHERE a IN(0,1) ORDER BY b LIMIT 10
- ΠΌΠΎΠΆΠ½ΠΎ
ΠΊ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ >>(SELECT * FROM tbl WHERE a = 0 ORDER BY b LIMIT 10) UNION ALL (SELECT * FROM tbl WHERE a = 1 ORDER BY b LIMIT 10) ORDER BY b LIMIT 10
- Π½Π΅Π»ΡΠ·Ρ
Π Π΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ - ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
- ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ²
- Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ backup
- ΠΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ Π·Π°ΠΏΠΈΡΡ
- ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅
- ΠΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡΡ
- ΠΎΠ΄ΠΈΠ½ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡ
- Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄
- ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎ
- ΠΎΡΠΊΠ»ΡΡΠΈΡΡ/Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ
- ΠΌΠ°ΡΡΠ΅Ρ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΡΠ°ΡΠΈΡΡΡ...
- Π½Π΅Ρ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΠΊΠ°Π·Π°
- ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ
- Π»Π΅Π³ΠΊΠΈΠΉ failover
- Π½Π΅Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ (Π²ΡΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΌΠ°Π΅ΡΡΡ)
- group replication?
- sync
- Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ (Postgres)
- ΡΠ΄Π΅Π»Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΠΈΠ΄Π½ΡΠ΅ Π²ΡΠ΅ΠΌ ΠΈ Π²Π΅Π·Π΄Π΅
- async
- Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π²ΡΠ΅ (MySQL, Postgres))
- Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅
- semi-sync
- Π·Π°ΠΊΠΎΠΌΠΈΡΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ack (MySQL)
- Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π·Π΄Π΅ΡΡ, ΡΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ
- Master:
- ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ
- Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
- ΠΏΠΈΡΠ΅Ρ binary logs
- binlog dump thread (SHOW PROCESSLIST Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ΅)
- Slave:
- ΡΡΡΠ³ΠΈΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°, ΠΊΠ»Π°Π΄Π΅Ρ Π² relay log
- ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· relay log ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
- slave I/O thread (SHOW SLAVE STATUS Π½Π° ΡΠ»Π΅ΠΉΠ²Π΅)
- slave SQL thread
https://dev.mysql.com/doc/refman/5.7/en/replication-implementation-details.html
- statement based
- ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠ°ΠΌΠΈ Π·Π°ΠΏΡΠΎΡΡ
- Π³ΠΎΠ½ΡΠ΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ
- Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π² Π»ΠΎΠ³Π΅
- UPDATE items SET enabled=1 WHERE time < UNIX_TIMESTAMP(NOW())-60 ΠΈ Π²ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΌΠ°Π»ΠΎΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Π΅ https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html
- row based
- ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ ΡΡΡΠΎΡΠΊΠΈ
- Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ
- Π½Π΅ΠΏΠΎΠ½ΡΡΠ½Ρ Π³ΡΠ°Π½ΠΈΡΡ statementΠ°
- Π΅Π³ΠΎ ΡΡΡΠ΄Π½ΠΎ ΡΠΈΡΠ°ΡΡ
- before/after image
- ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° binlog_row_image: full, minimal, blob https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_row_image
- mixed
https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
- ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ
- ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ³ΠΎΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΉΠ²Π°
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ!
ΠΠΏΡΠΈΠΈ:
- replicate_do_db, replicate_ignore_db, replicate_do_table... https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html
- binary log position (FILE NAME + OFFSET)
- mysql-bin.00078:44
- Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
- ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅Π΄Π΅ΡΡΡ!
- GTID (SOURCE_ID:TRANSACTION_ID)
- 7F33BC78-56CA-44B3-5E33-B34CC7689333:44
- Π³Π»ΠΎΠ±Π°Π»Π΅Π½, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅
- Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
- ΠΏΡΠΎΡΡΠΎΠΉ slave promotion
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΅Π³ΠΎ!
- https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html
- ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ
- Ρ MySQL5.6 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
- Ρ MySQL5.7 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ:
- slave-parallel-workers
- slave-parallel-type (DATABASE|LOGICAL_CLOCK)
https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html
- 1 ΠΌΠ°ΡΡΠ΅Ρ, 3 ΡΠ»Π΅ΠΉΠ²Π°
- ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅Ρ Π² 1 ΠΏΠΎΡΠΎΠΊ
- Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅Ρ Π² 20 ΠΏΠΎΡΠΎΠΊΠΎΠ²
- ΡΡΠ΅ΡΠΈΠΉ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅Ρ Π² 100 ΠΏΠΎΡΠΎΠΊΠΎΠ²
- Π²ΡΡΠ°Π²ΠΊΠ° Π² 25 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Ρ Π² 100 ΠΏΠΎΡΠΎΠΊΠΎΠ² (sysbench)
https://www.percona.com/blog/2016/02/10/estimating-potential-for-mysql-5-7-parallel-replication/
- ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊΠ΅ 2564 ΡΠ°Π²Π½ΠΎ 154)
- ΡΡΠ΄Π° ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
- ΠΎΠ΄ΠΈΠ½ ΠΆΡΡΠ½Π°Ρ Π½Π° Π²ΡΠ΅
https://wiki.postgresql.org/images/a/af/FOSDEM-2015-New-WAL-format.pdf
- Π΅ΡΡΡ binlog
- Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ WAL (InnoDB Undo/Redo Log)
- Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ MySQL - ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ Π»ΠΎΠ³ΠΈ!
- Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ (Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ)
- MySQL ΠΏΠΈΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ (~1.5 ΡΠ°Π·Π°)
https://dev.mysql.com/doc/refman/5.7/en/innodb-undo-logs.html
- ΡΠΎΡ ΡΠ°ΠΌΡΠΉ row based ΡΠΎΡΠΌΠ°Ρ
- ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΊΠΎΡΡΠ΅ΠΆΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
- Π½Π΅ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅
- CPU-bound, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΡΡ ΠΏΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌ
- Π Postgres10+ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ - https://www.postgresql.org/docs/10/logical-replication.html
- ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ
- slave = master Π±Π°ΠΉΡ Π² Π±Π°ΠΉΡ
- Postgres WAL, InnoDB Undo/RedoLog - ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ
- IO-bound, Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΡΡ
- ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ MySQL5.7
- ΠΏΠΎ ΡΡΡΠΈ - ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ
- Π½Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠ° master-slave, ΡΠΊΠΎΡΠ΅Π΅ master-master
- ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ Π½ΠΎΠ΄Π°ΠΌΠΈ
- single primary (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
- ΠΊΠ²ΠΎΡΡΠΌ, ΡΠΌΠ΅Π΅Ρ automatic failover
- flow control (Ρ ΡΡΠΎ-ΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΡΠ°Π»)
- Π»ΠΈΠΌΠΈΡ Π² 9 node
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π³ΡΡΠΏΠΏΠΎΠ²ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΡ Π² Π΄ΠΎΠΊΠ΅ΡΠ΅:
- https://mysqlhighavailability.com/setting-up-mysql-group-replication-with-mysql-docker-images/ ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
- https://dev.mysql.com/doc/refman/5.7/en/group-replication.html ΠΠ±Π·ΠΎΡ, Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ, ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ:
- http://mysqlhighavailability.com/performance-evaluation-mysql-5-7-group-replication/
- ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΡΡΠ°Π½Π·Π°ΠΊΠΈΡ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
- Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΠΈΡ Π² binary log
- Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΡΠ°Π½Π·Π°ΠΊΠΈΡ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ Π±Π°Π·Ρ
- Π²Π΅ΡΠ½ΡΡΡ ΠΎΡΠ²Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
- Π Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΡΠ°Π²Π°Π½ΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ.
- ΠΠ»ΠΎΡ ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ (ΠΈ ΠΏΠΎ ΠΌΠ°ΡΡΠ΅ΡΡ, ΠΈ ΠΏΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅) ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΡΡΠ°Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ.
- Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ:
- Π£Π±ΠΈΠ²Π°ΠΉΡΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ.
- ΠΠ΅ΡΠΆΠΈΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ Π΄Π»Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
- ΠΡΠΌΠ°ΠΉΡΠ΅ ΠΎ ΠΊΡΠΎΡΡ-Π‘Π£ΠΠ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ.
- Π‘ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° Π·Π°ΠΏΠΈΡΡ-ΡΡΠ΅Π½ΠΈΠ΅.
- ΡΠ²ΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΡΠ°Π΅ΠΌ Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°, ΡΡΠΈΠΆΠΈΠ΅ ΡΠΎ ΡΠ»Π΅ΠΉΠ²Π°
- ΠΠΎΠ½ΠΎΡΠΎΠ½Π½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅
- ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΎΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
- ΠΠ°ΡΠΈΠ°Π½Ρ - ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅.
- Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅
- Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ .
- ΠΠ°ΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΡΠΈΠ½Π½ΠΎ-ΡΠ»Π΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ²ΡΠ·Π΅ΠΉ.
- ΠΠ·Π±Π΅Π³Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ².
- Last wins.
- Π Π°Π½Π³ ΡΠ΅ΠΏΠ»ΠΈΠΊ. ΠΡΠΉΠ³ΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΡ ΡΡΠ°ΡΡΠ΅ΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ.
- Π‘Π»ΠΈΡΠ½ΠΈΠ΅.
- Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅.
- Conflict-free replicated data types (CRDT).
- Mergeable persistent data structures.
- ΠΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠ½ΡΡΠΎΠΏΠΈΠΈ Π΄Π°Π½Π½ΡΡ - Π€ΠΎΡΠΌΡΠ»Π° Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΠΊΠ²ΠΎΡΡΠΌΠ°: w + r > number of replicas
- https://www.youtube.com/watch?v=ppI74hTuXO0
- https://www.youtube.com/watch?v=_r8vLPTl0PE
- https://m.habr.com/ru/company/oleg-bunin/blog/414111/
- https://severalnines.com/database-blog/overview-logical-replication-postgresql
- Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ MySQL
- Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Postgres
- Π±Π»ΠΎΠ³ Percona
- Π±Π΅ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΡ
- ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π»Π΅ΠΆΠ°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ
- Π²ΡΠ΅ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°!
- Π±ΡΠ²Π°Π΅Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ²
- Π² ΡΠ΅ΠΎΡΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅ (?)
- key
- range
- list
- hash
CREATE TABLE members (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p0 VALUES LESS THAN (1960),
PARTITION p1 VALUES LESS THAN (1970),
PARTITION p2 VALUES LESS THAN (1980),
PARTITION p3 VALUES LESS THAN (1990),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
CREATE TABLE measurement (
city_id
int not null,
logdate
date not null,
peaktemp
int,
unitsales
int
) PARTITION BY RANGE (logdate);
CREATE TABLE measurement_y2006m02 PARTITION OF measurement
FOR VALUES FROM ('2006-02-01') TO ('2006-03-01');
CREATE TABLE measurement_y2006m03 PARTITION OF measurement
FOR VALUES FROM ('2006-03-01') TO ('2006-04-01');
- ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΊΡΡΠΊΠΈ
- Π΄Π°Π½Π½ΡΠ΅ ΠΆΠΈΠ²ΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ (Π½Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°ΠΊ)
- Π½Π΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ - !
- Π½Π΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ - !
- Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΡΡΠΊΠΎΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π·Π°ΠΏΠΈΡΡ!)
- ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ(*)
- Key Based Sharding
- Π΅ΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ hash based
- ΡΠΎΡΠΌΡΠ»Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ: F(key) -> shard_id
- F ΠΈ key ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Ρ
- Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±
- ΠΏΠ»ΡΡΡ
- ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎ (+)
- ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (+)
- Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (+)
- ΠΌΠΈΠ½ΡΡΡ
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠ΄Π° Π²ΡΠ΅Π³Π΄Π° Π±ΠΎΠ»Ρ (-)
- Range Based Sharding
- ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ table function/virtual bucket
- ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ range -> shard
- ΡΠΎΡΠΌΡΠ»Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ: hash(key) -> virtual_bucket -> shard_id
- ΠΏΠ»ΡΡΡ
- ΠΏΡΠΎΡΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (+)
- ΠΌΠΈΠ½ΡΡΡ
- Directory Based Sharding
- ΠΏΠΎΡ ΠΎΠΆ Π½Π° range based
- ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ key -> shard_id
- low cardinality Π΄Π»Ρ key - Π½Π°Ρ ΡΠ»ΡΡΠ°ΠΉ
- ΠΏΠ»ΡΡΡ
- Π³ΠΈΠ±ΠΊΠΎΡΡΡ (+)
- ΠΌΠΈΠ½ΡΡΡ
- ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (-)
- SPOF (-)
- ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΡΠΌΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ)
- ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄
- Π½Π΅Ρ Π»ΠΈΡΠ½ΠΈΡ Ρ ΠΎΠΏΠΎΠ²
- ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ/ΡΠ΅ΡΠ°ΡΠ΄ΠΈΡΡ?
- ΠΏΡΠΎΠΊΡΠΈ
- ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ ΡΠ°ΡΠ΄ΠΈΠ½Π³Π΅
- ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ
- Π»ΠΈΡΠ½ΠΈΠΉ Ρ ΠΎΠΏ (*)
- ΠΌΠΎΠ³ΡΡ ΠΏΠ°Π΄Π°ΡΡ
- ΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΡΡΡ
- https://www.proxysql.com https://shardingsphere.apache.org/document/current/en/manual/sharding-proxy
- ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ
- ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ ΡΠ°ΡΠ΄ΠΈΠ½Π³Π΅
- ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ
- Π»ΠΈΡΠ½ΠΈΠΉ Ρ ΠΎΠΏ
- Π½Π°Π³ΡΡΠ·ΠΊΠ°
- SPOF
- ΠΠ»ΠΎΡ
ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅
- ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ Π»ΡΡΡΠΈΠΉ ΠΊΠ»ΡΡ/ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΡΠ΅ΡΠ°ΡΠ΄ΠΈΠ½Π³ (Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»)
- JOIN
- Π΄Π΅ΡΠΆΠ°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅
- Π΄Π΅Π»Π°ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅
- Π Π»ΠΎΠ±:
- Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
- Π΅ΡΠ»ΠΈ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ 2ΠΊΠΈ - ΡΠΆΠ΅ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ (ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ~50%)
- ΠΡΠΈΠΌΠ΅Ρ:
- ΡΠΎΡΠΌΡΠ»Π° shard_id % count
- 16 Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π° 8 ΡΠ°ΡΠ΄ΠΎΠ² => 2 Π·Π°ΠΏΠΈΡΠΈ Π½Π° ΡΠ°ΡΠ΄
- 16 Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π° 16 ΡΠ°ΡΠ΄ΠΎΠ² => 1 Π·Π°ΠΏΠΈΡΡ Π½Π° ΡΠ°ΡΠ΄
- Consistent hashing
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ hash-ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π½ΠΎΠ΄ ΠΈ Π΄Π°Π½Π½ΡΡ
- Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ ΡΠ·Π΅Π»
- ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ/ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ
- ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ K/N (K-ΠΊΠ»ΡΡΠΈ, N-ΡΠ΅ΡΠ²Π΅ΡΠ°)
- ΠΠ°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π½Π΅ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ.
- Consistent hashing - Virtual Nodes
- ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ
- Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΡΠΊΠΎΡΡΡΡΡ
- Π·Π°ΠΏΡΠΎΡΡ Π½Π΅ ΠΏΠΎ ΠΊΠ»ΡΡΡ ΠΎΠ±ΠΎΠΉΠ΄ΡΡ Π²ΡΠ΅ ΡΠ°ΡΠ΄Ρ
- Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ Π²ΡΠ΅ ΡΠ°ΡΠ΄Ρ
- aggregating, joinΡ - ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°
ΠΡΠ»ΠΎ:
- Total = Serial + Parallel
Π‘ΡΠ°Π»ΠΎ:
- Total = Serial + Parallel/N + Xserial
https://en.wikipedia.org/wiki/Amdahl%27s_law
- MySQL Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π°Π²ΡΠΎΡΠ°ΡΠ΄ΠΈΠ½Π³ (NDB ?)
- Postgres ΡΠΌΠ΅Π΅Ρ Π°Π²ΡΠΎΡΠ°ΡΠ΄ΠΈΠ½Π³ (FDW)
- Cassandra ΡΠΌΠ΅Π΅Ρ Π°Π²ΡΠΎΡΠ°ΡΠ΄ΠΈΠ½Π³
- MongoDB ΡΠΌΠ΅Π΅Ρ Π°Π²ΡΠΎΡΠ°ΡΠ΄ΠΈΠ½Π³
CREATE TABLE temperature (
id BIGSERIAL PRIMARY KEY NOT NULL,
city_id INT NOT NULL,
timestamp TIMESTAMP NOT NULL,
temp DECIMAL(5,2) NOT NULL
);
CREATE TABLE temperature_201904 (
id BIGSERIAL NOT NULL,
city_id INT NOT NULL,
timestamp TIMESTAMP NOT NULL,
temp DECIMAL(5,2) NOT NULL
);
CREATE EXTENSION postgres_fdw;
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw to app_user;
CREATE SERVER shard02 FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'postgres', host 'shard02', port
'5432');
CREATE USER MAPPING for app_user SERVER shard02
OPTIONS (user 'fdw_user', password 'secret');
CREATE FOREIGN TABLE temperature_201904 PARTITION OF temperature
FOR VALUES FROM ('2019-04-01') TO ('2019-05-01')
SERVER remoteserver01;
- https://www.percona.com/blog/2018/08/21/foreign-data-wrappers-postgresql-postgres_fdw
- https://www.percona.com/blog/2019/05/24/an-overview-of-sharding-in-postgresql-and-how-it-relates-to-mongodbs
- https://www.youtube.com/watch?v=MhGO7BBqSBU
- https://www.youtube.com/watch?v=xx_Lv1P_X_I
- https://www.youtube.com/watch?v=ihrPoHlDFkk
- https://www.mysql.com/products/cluster/scalability.html
- https://www.postgresql.org/docs/9.5/postgres-fdw.html
- https://clickhouse.yandex/docs/en/operations/table_engines/distributed/
- Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ MySQL
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ read-tolerance ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅Ρ-Π±Π°Π· Π² ΡΠ»ΡΡΠ°Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΈΠ· ΡΡΡΠΎΡ
- Π£ΠΌΠ΅Π΅Ρ
- Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅(ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅)
- ΠΏΡΠ»Π»ΠΈΠ½Π³ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ
- ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ²(ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡΠ±Π»Π΅ΠΉ)
- 2Ρ ΡΠ°Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ(c Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ)
- ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ(ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ consul, etcd, ZooKeeper)
- ACL Π½Π° Π·Π°ΠΏΡΠΎΡΡ
- ΠΠ΅ ΡΠΌΠ΅Π΅Ρ
- last_inserted_id Π½Π° ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠ΅ΠΉΡΠΏΠ΅ΠΉΡΠ΅: SELECT last_inserted_id() FROM user;
- distinct & ΡΡΠ½ΠΊΡΠΈΠΈ Π°Π³ΡΠ΅Π³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ: SELECT DISTINCT a, COUNT(*) FROM user
- Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ»Ρ, ΡΠΎ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² SELECT: SELECT a FROM user GROUP BY b;
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°ΡΠ΄Π°ΠΌ Ρ Π»ΠΈΠΌΠΈΡΠΎΠΌ: DELETE FROM user LIMIT 10;
- ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ: https://github.com/vitessio/vitess/blob/master/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt
- Cell β Π³ΡΡΠΏΠΏΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡ Π°Π²Π°ΡΠΈΠΉ
Π² Π΄ΡΡΠ³ΠΈΡ
cell(Π΄Π°ΡΠ°ΡΠ΅Π½ΡΡ)
- ΠΠ±ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΈΠ»ΠΈ ΠΠ¦ ΠΈΠ»ΠΈ ΡΠ°ΡΡΡ ΠΠ¦, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ βΠ·ΠΎΠ½Π°β ΠΈΠ»ΠΈ βΠ·ΠΎΠ½Π°
Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈβ.
- Keyspace β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
- ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΎ ΠΊΠ΅ΠΉΡΠΏΠ΅ΠΉΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
- MySQL Π±Π°Π· Π΄Π°Π½Π½ΡΡ
, ΠΈΠ½Π°ΡΠ΅ Π½Π° ΠΎΠ΄Π½Ρ Π±Π°Π·Ρ
- Π§ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΠΊΠ΅ΠΉΡΠΏΠ΅ΠΉΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· MySQL
- Keyspace graph ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Vitess ΡΠ΅ΡΠ°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ°ΡΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ
ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°
- Shard β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠ΅ΠΉΡΠΏΠ΅ΠΉΡΠ°. ΠΠ±ΡΡΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΡΡΠ΅Ρ
ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ MySQL ΡΠ»Π΅ΠΉΠ²ΠΎΠ²
- Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄
- SHARD=-80, Π³Π΄Π΅ -80 β ΡΡΠΎ ΠΊΠ»ΡΡΠΈ [0x0, 0x80)
- ΠΠ»ΠΈ ΠΆΠ΅ SHARD=80-, Π³Π΄Π΅ 80- β ΡΡΠΎ ΠΊΠ»ΡΡΠΈ [0x80, 0xff]
- Π’Π°Π±Π»Π΅ΡΠΊΠ° β ΡΡΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° mysql ΠΈ vttablet, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
Π½Π° ΠΎΠ΄Π½ΠΎΠΉ
ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΌΠ°ΡΠΈΠ½Π΅.
- master β ΠΌΠ°ΡΡΠ΅Ρ-Π±Π°Π·Π°
- replica β ΡΠ»Π΅ΠΉΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡ Π΄ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ°
- rdonly β ΡΠ»Π΅ΠΉΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡ Π΄ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ°. ΠΠ±ΡΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ background Π·Π°Π΄Π°Ρ, Π΄Π°ΠΌΠΏΠ° Π΄Π°Π½Π½ΡΡ , ΡΡΠΆΠ΅Π»ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
- backup β Π±Π°Π·Π° Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ
- restore β Π±Π°Π·Π°, Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π»ΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π±Π΅ΠΊΠ°ΠΏΠ°.
- drained β ΡΠ°Π·Π΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π±Π°Π·Π° Π΄Π»Ρ background Π·Π°Π΄Π°Ρ Vitessβa
- Π‘Π΅ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ
- ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ
- ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, etcd, ZooKeeper ΠΈΠ»ΠΈ Consul
- Π ΠΎΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΡ
- ΠΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΡΠ΅Ρ ΡΠ°Π±Π»Π΅ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ
- Π₯ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Π°Π½Π½ΡΠ΅ Π»Π΅ΠΆΠ°Ρ Π²Π½ΡΡΡΠΈ ΠΊΠ΅ΠΉΡΠΏΠ΅ΠΉΡΠΎΠ² ΠΈ ΡΠ°ΡΠ΄ΠΎΠ². Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ JSONΠΎΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
{
"sharded": true,
"tables": {
"dinosaurs": {
"column_vindexes": [
{"column": "id", "name": "hash"}
]
}
}
- hash β 3DES null-key hash
- consistent_lookup_unique β Ρ Π΅Ρ ΠΏΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ Π² ΡΠ°Π±Π»ΠΈΡΠ΅(primary key)
- unicode_loose_md5 β md5 ΠΏΠΎ ΠΊΠ»ΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅
https://vitess.io/docs/reference/vschema/ β ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ
- ΠΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ vttablet.
- ΠΠ±ΡΠ°Π΅ΡΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΠΎ MySQL ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ
- ΠΠ±ΡΠ°Π΅ΡΡΡ Ρ vttablet ΠΏΠΎ gRPC
- vtctl β CLI Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ vitess-ΠΊΠ»Π°ΡΡΠ΅ΡΠ°
- ΠΠ°Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π΄ΠΎΠ»Π³ΠΈΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ°ΡΠ΄ΠΈΠ½Π³ΠΎΠΌ
ΠΡΡ ΠΈΠ»ΠΈ ΠΊΠ΅Ρ(Π°Π½Π³Π». cache, ΠΎΡ ΡΡ. cacher β Β«ΠΏΡΡΡΠ°ΡΡΒ»; ΠΏΡΠΎΠΈΠ·Π½ΠΎΡΠΈΡΡΡ [kΓ¦Κ] β Β«ΠΊΡΡΒ») β ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ Ρ Π±ΡΡΡΡΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ Π½Π΅ΠΌΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π° Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ. ΠΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π² ΠΊΡΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π²ΡΠ±ΠΎΡΠΊΠ° ΠΈΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Ρ ΠΎΠ±ΡΡΠΌ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ .
- ΠΠ»Ρ ΡΠ°ΡΠΎΠ² - ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
- ΠΠ»Ρ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ - ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ
- ΠΠ»Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΠ°ΠΊΡΠΈ - Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π·Π°ΠΊΠ°Π·Ρ.
- ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΠ΅Π»Π°Π΄ΠΈ (ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ)
- Least recently used (LRU)
- Most Recently Used (MRU)
- ΠΡΠ΅Π²Π΄ΠΎ-LRU
- Least-Frequently Used
- Adaptive Replacement Cache
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅ΡΠΆΠ°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π±Π΅Π· ΠΊΠ΅ΡΠ°. ΠΠ°Π΄Π°ΡΠ° ΠΊΠ΅ΡΠ° - ΡΡΠΊΠΎΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ, Π° Π½Π΅ Π΄Π΅ΡΠΆΠ°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ. ΠΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΡΠ΅Π½ΠΈΡ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π±Π΅Π· ΠΊΠ΅ΡΠ°.
- ΠΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
- ΠΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ (ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠ²)
- ΠΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π±Π°Π·Ρ
ΠΠ΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ GET, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ GET - ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ΅Π½.
- ETAG
- If-Modified-Since
- Cache-Control
- LocalStorage
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΡ Π² Π³Π΅Ρ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ . ΠΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - Π΄Π΅Π»Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° md5-ΡΡΠΌΠΌΠΎΠΉ ΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ.
- ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
- https://habr.com/ru/post/428127/
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
map $request_method $purge_method {
PURGE
1;
default 0;
}
server {
...
location / {
proxy_pass http://backend;
proxy_cache cache_zone;
proxy_cache_key $uri;
proxy_cache_purge $purge_method;
}
}
ΠΠΎΡ ΠΎΠ΄Ρ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΈΠΌΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² ΠΊΠ΅Ρ. Π‘Π°ΠΌΡΠΌΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ:
- Π₯ΡΠ°Π½ΠΈΠ½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΠΠ£/shared memory
- memcache
- redis
- Redis:
- ΠΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»Π»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄
- ΠΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ lua
- Π‘Π»ΠΎΠΆΠ½ΡΠΉ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
- ΠΡΡΡ ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
- ΠΠ»Π°ΡΡΠ΅ΡΠ½ΡΠΉ
- Π‘Π»ΠΎΠΆΠ½ΡΠΉ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
- Memcache:
- ΠΡΠΎΡΡΠΎΠΉ
- ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ
- ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ Π΅ΡΡΡ moxy.
- Tarantool ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» memcache
AverageTime = DbAccessTime * CacheMissRate + CacheAccessTime
ΠΡΡΡΡ:
- DbAccessTime = 100ms CacheAccessTime = 20ms
- Π’ΠΎΠ³Π΄Π° ΠΏΡΠΈ CacheMissRate > 0.8 - ΠΊΠ΅Ρ Π²ΡΠ΅Π΄Π΅Π½!
ΠΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΊΠ»ΡΡΠ° Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΡΠΊ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ Π±Π°Π·Ρ. ΠΠ»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΎΠΉ Π±Π°Π·Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ°Π²ΠΈΡΡ Π»ΠΎΠΊΠΈ. Π₯ΠΎΡΠΎΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ - Π½ΠΎΠ²Π°Ρ Π·Π°ΠΏΠΈΡΡ Π² Π±Π»ΠΎΠ³Π΅ ΠΏΠΎΠ΄ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ.
- ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΡΡΡ cache, Π΅Π³ΠΎ ΡΡΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ ΠΈΡΡΡΠΊ.
- ΠΡΡΠ°Π΅ΠΌΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ user_cache_lock.
- ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ:
- ΠΆΠ΄ΡΠΌ ΡΠ½ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ;
- ΠΠ΅ Π΄ΠΎΠΆΠ΄Π°Π»ΠΈΡΡ
- Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΊΡΡΠ°;
- ΠΠΎΠΆΠ΄Π°Π»ΠΈΡΡ
- Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ° Π·Π°Π½ΠΎΠ²ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΊΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ).
- Π£Π΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ:
- ΡΡΡΠΎΠΈΠΌ ΠΊΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎΡΠ»Π΅ Π°Π²Π°ΡΠΈΠΈ ΠΊΠ΅Ρ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡΠΎΠ²Π°Π½. Π Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ ΠΊΠ΅ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ ΠΏΠΈΡΠ°Π½ΠΈΡ. ΠΠΎΠ΄Π½ΡΡΡΡΡ Ρ Π½Π΅ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΌ ΠΊΠ΅ΡΠΎΠΌ ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΠ±ΡΠΈΠΉ ΡΠ΅ΡΠ΅ΠΏΡ:
- ΠΠ°ΡΠ°Π½Π΅Π΅ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ ΠΏΡΠΎΠ³ΡΠ΅Π²Π° ΠΊΠ΅ΡΠ΅ΠΉ
- ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉΡΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠ»Π°Π²Π½ΠΎ
- ΠΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π΅ No1
-
ΠΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
- Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ TTL
- ΠΠΎΡΠ»Π΅ ΡΡΡΠ°ΡΠ΅Π²Π°Π½ΠΈΠ΅, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
- ΠΠ°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½Ρ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ TTL.
- ΠΡΠΈ ΠΌΠ°Π»ΠΎΠΌ TTL Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΎΠΊΠΈΠΉ cache miss.
-
ΠΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎ ΡΠΎΠ±ΡΡΠΈΡ
- Π£Π΄Π°Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠ΅ΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² Π±Π°Π·Π΅
- ΠΠΏΠ°ΡΠ½ΠΎ ΠΈΠ·-Π·Π° ΡΠΈΡΠΊΠ° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ.
-
ΠΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ
- ΠΠ΅Π½ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π² Π±Π°Π·Π΅
- Π ΠΊΠ»ΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π²Π΅ΡΡΠΈΡ
- ΠΠ΅ΡΡΠΈΡ Ρ ΡΠ°Π½ΠΈΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ
- Π‘ΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΡΡΡ Π°ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ
- ΠΠ»ΡΡ - Π²ΡΡΠΎΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ.
ΠΠ΅ΡΡΠΈΠΈ ΡΡΠ³ΠΎΠ²:
tag1 -> 25
tag2 -> 63
ΠΡΡ Π²ΡΠ±ΠΎΡΠΊΠΈ:
[
ΡΡΠΎΠΊ Π³ΠΎΠ΄Π½ΠΎΡΡΠΈ: 2008-11-07 21:00
Π΄Π°Π½Π½ΡΠ΅ ΠΊΡΡΠ°: [
...
]
ΡΡΠ³ΠΈ: [
tag1: 25
tag2: 63
]
]
- ΠΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ Π½Π° Π΄ΠΎΠ»Π³ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ
- ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅ΡΠΎΠ²
- Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅, Π±ΡΡ Π³Π°Π»ΡΠ΅ΡΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ
- ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ²
- ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
- ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ IPC, shared memory
- ΡΠ»ΠΎΠΆΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
- ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- Rabbitmq
- Kafka
- NATS
- Redis ( pub/sub, streams)
- ΠΠ°ΡΠ°Π½ΡΠΈΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- at least once delivery
- at most once delivery
- exactly once
- ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ)
- ΠΠ΅ΡΠΊΠ°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
AMQP (Advanced Message Queuing Protocol) ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π±ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ (ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΌ ΠΠ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ).
- ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ:
- ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΡΡΠΎΠΊΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΡΠΎΠΊΠ΅Ρ β ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ ΠΌΠΎΠ΄Π΅Π»Ρ AMQP, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ Ρ.ΠΏ.
- Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (message) β ΡΡΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ).
- ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ (consumer) β ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ.
- ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ (producer)β ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΠΌΠ΅Π½.
- Π³Π°ΡΠ°Π½ΡΠΈΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- at least once delivery
- at most once delivery
- ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (FIFO)
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π½Π° Π΄ΠΈΡΠΊ
- ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ
- ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»-Π²Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ
- ΠΠ΅ΡΠΊΠ°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- Producer, consumer, message - (ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ°Π½Π΅Π΅)
- Queue: ΠΡΡΠ΅Ρ ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
- Connection: TCP ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ
- Channel: ΠΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΡΠ΅ΡΠ΅Π΄Ρ β ΡΡΠΎ Π²ΡΠ΅ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΠΊΠ°Π½Π°Π»Π΅.
- Exchange: ΠΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΠ°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΏΠ°.
- Binding: Π‘Π²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- Routing key: ΠΠ»ΡΡ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠΎΡΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈ ΡΠ΅ΡΠ°Π΅Ρ Π² ΠΊΠ°ΠΊΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
- Users: ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡ ΠΊ Π±ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ.
- Vhost, virtual host: Π‘ΠΏΠΎΡΠΎΠ± ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ RabbitMQ.
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π΅ Π½Π° ΠΏΡΡΠΌΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ ΡΠ»Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π½ΡΠΆΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ½Π΄ΠΈΠ½Π³Π° ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠΎΡΡΠΈΠ½Π³Π°.
- ΠΠΎΡΡΠ°Π²ΡΠΈΠΊ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² exchange: direct, fanout, topics, headers Exchange. Π’ΠΈΠΏΡ
- ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π±Π΅ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ, ΠΊΠ»ΡΡ ΡΠΎΡΡΠΈΠ½Π³Π°, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π½Π° ΡΠΈΠΏ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ
- Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ.
- ΠΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
ΠΠ»ΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΊΡ ΠΎΠ±ΠΌΠ΅Π½Π°, ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π² ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ β Π½Π°Π±ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΠΈΠ΄Π° ΠΊΠ»ΡΡ- Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ.
-
direct β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΏΠ°Π²ΡΠΈΠ΅ Π² ΡΡΡ ΡΠΎΡΠΊΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π±ΡΠ΄ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΎΡΠΊΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΡΡΠΎΠ³ΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ.
-
fanout β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅Π΅ Π² ΡΠΎΡΠΊΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π±Π΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠ»ΡΡΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
-
topic β ΠΊΠ»ΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠΌ, ΠΈ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°: * β ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΡΠ»ΠΎΠ²ΠΎ, # β ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ². Π‘Π»ΠΎΠ²Π° ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΡΠΎΡΠΊΠΎΠΉ. ΠΡΠΈΠΌΠ΅Ρ: routingKey = "*.database"
-
headers β ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ
- auto_delete β Π΅ΡΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΡΡΠ°Ρ ΠΈ ΠΊ Π½Π΅ΠΉ Π½Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ
- durable β ΡΡΡΠΎΠΉΡΠΈΠ²Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ΅ΡΡΡΡΡΡ ΠΏΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠ΅ rabbitMQ (ΠΈΠ»ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅), ΠΏΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΎΡΠ΄Π°ΡΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
- exclusive β ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ
- passive β ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠΉ, ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡ ΡΡΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π°, Ρ.Π΅. Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅Π΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ, ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½ΡΠΆΠ΅Π½ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
- internal - ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΌΠ΅ΠΆΠ΄Ρ exchanges
- Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ /var/lib/rabbitmq/.erlang.cookie
- rabbitmqctl stop_app
- rabbitmqctl join_cluster --ram rabbit@master
- rabbitmqctl start_app
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ!
- ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π΅ΡΠΊΠ°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ
- # rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
- ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π΅ΡΠΊΠ°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ
ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ RabbitMQ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 40%
ΠΎΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΎ Π²ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ.
ΠΡΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π΄ΠΎ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ
ΡΠ°Π±ΠΎΡΡ RabbitMQ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ. ΠΠΎΡΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ
ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ:
rabbitmqctl set_vm_memory_high_watermark 0.5
ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠΌΠ°Π½Π΅Π½ΡΠ½ΠΎ Π² /etc/rabbitmq/rabbitmq.config
[{rabbit, [{vm_memory_high_watermark, 0.5}]}].
- Kafka β ΡΡΠΎ
- ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ
- ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ
- ΠΆΡΡΠ½Π°Π» ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (commit log).
- ΠΠ°ΡΠ°Π½ΡΠΈΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ
- Π Π΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΏΠ»ΠΈΠΊ
- Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ(offset) ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ
- Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΡΡΠ΅ΡΠ°
- Ρ
ΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΈ Π·Π°ΠΏΠΈΡΠΈ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅ΡΠΆΠΈΡ Π²
-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π·Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ O(1)
- ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Π½Π° Π΄ΠΈΡΠΊ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΡΡ Π΄ΠΈΡΠΊΠ°
- API Π΄Π»Ρ producers/consumers
- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° KSQL
- Consumer ΡΠ΅ΡΠ΅Π· pull Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΡΡΠ½Π°Π» ΠΎΡΠΈΡΠ°Π΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°
- ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΆΠ°ΡΠΈΡ ΠΆΡΡΠ½Π°Π»Π°
- ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π²ΠΈΠ³Π° ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΈΠ³ΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ zookeeper, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΎΠΏΠΈΠΊΠΈ kafka
- Record β ΠΠ°ΠΏΠΈΡΡ, ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΠΊΠ»ΡΡΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- Topic β ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΊΡΠ΄Π° ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΡΡ Π·Π°ΠΏΠΈΡΠΈ
- Producer β ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΠΏΠΈΠΊ
- Consumer β ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΈΡΠ°ΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΎΠΏΠΈΠΊΠ°
- Offset β ΠΏΠΎΠ·ΠΈΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ
- Partition β ΡΠ°ΡΠ΄ ΡΠΎΠΏΠΈΠΊΠ°
- Zookeeper β ΡΡΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ
ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π·Π°ΠΏΠΈΡΠΈ Π² Π½Π΅ΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.
ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΎΠ²
ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ (hearbeat, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ,
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Ρ.Π΄.).
- Offset Π³ΡΡΠΏΠΏ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΠΈ
- ACL β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° /Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
- ΠΠ²ΠΎΡΡ β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ
- Partition Leaders ΠΈ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ
- ΠΠ ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°ΡΡΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΠΊΠ°Π·Π°ΡΡ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ
- Π Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΡΠ°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ±ΠΎΠΉ ΠΠ
- ΠΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡΡ ΡΠ°Π·ΡΡΠ² ΡΠ΅ΡΠΈ
- ΠΠ»ΠΈΠ΅Π½ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·ΠΎΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°
- ΠΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ β ΡΠΏΠΎΡΠΎΠ± Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΠΎ ΡΡΡΠΈ, Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ Π² Π½Π΅ΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π°: Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ (Ρ ΡΠΈΠΊΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ), ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ (Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡΠΊΠ°ΡΠΎΠΌ). ΠΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ 1970-Ρ , Ρ ΡΠ΅Ρ ΠΏΠΎΡ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ. Π NoSQL ΠΎΡ Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΠΎΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ.
- Atomicity: ΠΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "Π²ΡΠ΅ ΠΈΠ»ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ". ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π»ΠΈΠ±ΠΎ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ, Π»ΠΈΠ±ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ . ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π½Π΅ ΠΎΠΏΠ°ΡΠ°ΡΡΡ ΡΡΠΎ ΡΠ°ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΆΠ΅ Π±ΡΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°.
- Consistency: ΠΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ: ( ΠΠ΅Π±ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ
ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΊΡΠ΅Π΄ΠΈΡΠΎΠΌ, Π¦Π΅Π½Π° ΠΏΡΠΎΠ΄Π°Π½Π½ΡΡ
Π±ΠΈΠ»Π΅ΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΡΡΡΠΊΠ΅ Π·Π° ΡΠ΅Π°Π½Ρ.)
- Π ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ constaints Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ.
- ΠΠΎ ΡΡΡΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ - Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π±Π°Π·Ρ.
- Isolation: ΠΠ·ΠΎΠ»ΡΡΠΈΡ - ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ. Π ΠΏΠΎΠ»Π½ΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π΅Π½Ρ SERIALIZABLE.
- Durability: ΠΠΎΠ΄ ΡΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ - Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈ ΠΎΡΠ΄Π°ΡΠ΅ ΠΎΡΠ²Π΅ΡΠ° Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½Ρ Π² ΡΠ½Π΅ΡΠ³ΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (fsync). ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΈΡΠΊΠΈ ΡΠ±ΠΎΡΡ. ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°ΡΡ (ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ) Π³Π°ΡΠ°Π½ΡΠΈΠΈ.
ΠΠ½ΠΎΠ³ΠΈΠ΅ NoSQL Π±Π°Π·Ρ, Ρ ΠΎΡΡ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ»Ρ memcached ΡΡΠΎ:
- inc
- dec
- Π§ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡΡ (ΠΎΡΠΊΠ°ΡΠΈΡΡΡ).
- ΠΏΡΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ ΡΠ΅ΡΡΡΡΡΡ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ;
Π‘ΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠ°Π½Π΅Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΠΌΠΈ.
- Π‘ΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ Π²ΡΠ±ΠΎΡΠΊΠ° Π΄Π°Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ.
ΠΠΎΠ΄ Β«ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉΒ» ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ Π‘Π£ΠΠ (ΡΠΎ Π΅ΡΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠ΅ΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ) Π·Π°ΡΠΈΡΡ ΠΎΡ Π²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²ΠΈΠ΄ΠΎΠ² Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ , Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. Π‘ΡΠ°Π½Π΄Π°ΡΡ SQL-92 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΊΠ°Π»Ρ ΠΈΠ· ΡΠ΅ΡΡΡΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ: Read uncommitted, Read committed, Repeatable read, Serializable. ΠΠ΅ΡΠ²ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΡΠ»Π°Π±ΡΠΌ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ β ΡΠ°ΠΌΡΠΌ ΡΠΈΠ»ΡΠ½ΡΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅.
ΠΠΈΠ·ΡΠΈΠΉ (ΠΏΠ΅ΡΠ²ΡΠΉ) ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ. ΠΠ½ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΏΡΡΠ°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΡΠΎΠΊΡ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠΎ Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΡΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΈ Π΄Π°Π½Π½ΡΡ , ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡ Π½Π΅ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΡ Π‘Π£ΠΠ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Microsoft SQL Server, PostgreSQL ΠΈ Oracle, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΡΠΎΠ²Π΅Π½Ρ. ΠΠ° ΡΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π·Π°ΡΠΈΡΠ° ΠΎΡ ΡΠ΅ΡΠ½ΠΎΠ²ΠΎΠ³ΠΎ, Β«Π³ΡΡΠ·Π½ΠΎΠ³ΠΎΒ» ΡΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄ΡΡΠ³Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΠΈ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ. Π ΠΈΡΠΎΠ³Π΅ ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ .
- ΠΠΎΠΊΡΡΠ²Π°Π΅Ρ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ
- dirty reads
- dirty writes
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ:
- ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΡΡΠΎΠΊ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ
- Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠ°ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π£ΡΠΎΠ²Π΅Π½Ρ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΈΡΠ°ΡΡΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Β«Π½Π΅ Π²ΠΈΠ΄ΠΈΡΒ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π΅Ρ ΡΠ°Π½Π΅Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ. ΠΡΠΈ ΡΡΠΎΠΌ Π½ΠΈΠΊΠ°ΠΊΠ°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠΈΡΠ°Π΅ΠΌΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠ΅ΠΉ, ΠΏΠΎΠΊΠ° ΡΠ° Π½Π΅ ΠΎΠΊΠΎΠ½ΡΠ΅Π½Π°.
- ΠΏΠΎΠΊΡΡΠ²Π°Π΅Ρ
- unrepeatable reads
- ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
- ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ, Π° Π·Π°ΠΏΠΈΡΡ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΡΠ΅Π½ΠΈΠ΅)
- MVCC
- Π Π½Π°ΡΠ°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ (Π½ΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΡΡ ). ΠΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ ΡΡΠΈΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ.
- ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ ΠΏΡΠ΅ΡΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ, ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ.
- ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ (ΡΠΎ Π΅ΡΡΡ Π½Π°ΡΠ°Π²ΡΠΈΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ), ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π±ΡΠ»ΠΈ Π»ΠΈ ΠΎΠ½ΠΈ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ.
- Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΈΠ΄Π½Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π‘Π°ΠΌΡΠΉ Π²ΡΡΠΎΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ; ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΡΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°, ΠΊΠ°ΠΆΠ΄Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. Π’ΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΡ Β«ΡΠ°Π½ΡΠΎΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡΒ».
- ΠΏΠΎΠΊΡΡΠ²Π°Π΅Ρ
- ΡΠ°Π½ΡΠΎΠΌΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅
- ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
- ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
- Π΄Π²ΡΡ ΡΠ°Π·Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° (2-Phase Lock)
- ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ
- ΠΡΠΈΠΌΠ΅Ρ - tarantool, redis.
- Π₯ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ In-Memory Π±Π°Π· Π΄Π°Π½Π½ΡΡ . ΠΡΠ°ΠΉΠ½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΡΠ΄ΠΈΠ½Π³ (Π½ΠΎ ΠΊΡΠΎΡΡ-ΡΠ°ΡΠ΄ Π·Π°ΠΏΡΠΎΡΡ Π½Π°Π΄ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ).
- ΠΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. OLAP - Π²ΡΠ½ΠΎΡΠΈΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ MVCC.
- Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ
- ΠΠ·Π±Π΅Π³Π°Π΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠ΅ΡΠ΅ΠΉ
- ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π΄Π΅Π½Π΅Π³
- ΠΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ lua application server
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ²
- ΠΠ½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ
- Π’ΡΠΆΠ΅Π»ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ
- space - ΡΠ°Π±Π»ΠΈΡΠ°
- tuple - ΡΡΡΠΎΠΊΠ° ΡΠ°Π±Π»ΠΈΡΡ
- box.schema.space.create('myspace', {if_not_exists=true})
box.space.myspace:create_index(
'primary', {
type="TREE",
unique=true,
parts={
1, 'unsigned', 2, 'string'
},
if_not_exists=true
})
- type - ΡΠΈΠΏ ΠΈΠ½Π΄Π΅ΠΊΡΠ°: TREE, HASH, RTREE, BITMAP
- unique - ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
- parts - ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ. ΠΠ°ΠΆΠ½ΠΎ - ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
> box.space.myspace:insert({"test", 3, 6})
---
- error: 'Tuple field 1 type does not
match one required by operation: expected unsigned'
...
> box.space.myspace:insert({1, 'qwerty', 6})
---
- [1, 'qwerty', 6]
...
> box.space.myspace:insert({1, 10, 6})
---
- error: Duplicate key exists in unique index
'primary' in space 'myspace'
...
> box.space.myspace:insert({2, 10, 6})
---
- [2, 10, 6]
...
> box.space.myspace:insert({3, 10, 6, 98})
---
- [3, 10, 6, 98]
...
- Π ΠΊΠΎΡΡΠ΅ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ²
- Π ΠΊΠΎΡΡΠ΅ΠΆ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
- Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π² Π½Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΡ ΠΏΠΎΠ»ΡΡ ΠΌΠΎΠ³ΡΡ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ.
> box.space.myspace:update({2}, {{'+', 3, 1}})
---
- [2, 10, 7]
...
> box.space.myspace:update({2}, {{'+', 3, 1}})
---
- [2, 10, 8]
...
> box.space.myspace:update({2}, {{'+', 3, 10}})
---
- [2, 10, 18]
...
> box.space.myspace:update({2}, {{'-', 3, 3}})
---
- [2, 10, 15]
...
> box.space.myspace:update({2}, {{'=', 3, 148}})
---
- [2, 10, 148]
...
- ΠΠ°ΠΆΠ½ΠΎ: ΠΌΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
box.space.myspace:create_index('tindex', {type="TREE", parts={3, 'unsigned'}, unique=false})
box.space.myspace:create_index('hindex', {type="HASH", parts={1, 'unsigned'}})
box.space.myspace:select({}) box.space.myspace.index.tindex:select({}) box.space.myspace.index.tindex:select({148})
box.space.myspace.index.tindex:select({148}, {iterator='GT'}) box.space.myspace.index.tindex:select({148}, {iterator='GE'})
box.space.myspace.index.hindex:select({3}, {iterator='GE'})
- replace
- delete
- upsert
function myproc(id)
local tup = box.space.myspace.index.tindex:select({id}, {iterator='GE'})
return tup[2]
end
- ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ΡΠ°ΡΠ°Π½ΡΡΠ» ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ΅Π½.
- Π’Π°ΡΠ°Π½ΡΡΠ» ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌ ΠΏΡΠΈ:
- ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ
- ΠΠ»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²Π°Ρ
- select Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
- ΠΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ»Π³ΠΈΡ
ΡΠΈΠΊΠ»ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ
fiber.yield()
- ΠΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ»Π³ΠΈΡ
ΡΠΈΠΊΠ»ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ
- ΠΠ°ΡΠ°Π»ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ - box.begin()
- ΠΡΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ - box.rollback()
- ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ - box.commit() ΠΠ°ΠΆΠ½ΠΎ: Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠΊΠ°ΡΡΠ²Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
ΠΠ·ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ ΠΠΎΡΡΠ°@Mail.ru