ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ! ΠΠ· ΡΡΠΌ Π±Π΅ΠΊΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΏΠΈΡΠ° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈ Π½Π° Java + Spring. Π Π°Π±ΠΎΡΡ Π² Π΅Π΄ΠΈΠ½ ΠΎΡ Π΅ΠΊΠΈΠΏΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Π’ΠΈΠ½ΡΠΊΠΎΡΡ.

Π Π½Π°ΡΠΈΡ Π΅ΠΊΠΈΠΏ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ Π²ΡΠΏΡΠΎΡΡΡ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² Π‘Π£ΠΠ. ΠΠΈΠ½Π°Π³ΠΈ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΈ, Π½ΠΎ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·ΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π½Π° Π΄ΠΎΠ±ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ β ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΡΡΠΈΠΌ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΡΡΡΠ΅Π½ΠΈΡ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π·Π° ΡΠ°Π·ΡΠΌΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΠ, ΠΎΡΠΊΡΠΈΡ , Π°Π²ΡΠΎΡ Π½Π° ΠΊΠ½ΠΈΠ³Π°ΡΠ° SQL Performance Explained. Π’ΠΎΠ²Π° Π΅ ΠΎΠ½Π·ΠΈ ΡΡΠ΄ΡΠΊ ΡΠΈΠΏ Π±Π»ΠΎΠ³, Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π΄Π° ΡΠ΅ΡΠ΅Ρ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ°ΡΠΈΠΈ Π΅Π΄Π½Π° ΡΠ»Π΅Π΄ Π΄ΡΡΠ³Π°.
ΠΡΠΊΠ°ΠΌ Π΄Π° ΠΏΡΠ΅Π²Π΅Π΄Π° Π·Π° Π²Π°Ρ Π΅Π΄Π½Π° ΠΌΠ°Π»ΠΊΠ° ΡΡΠ°ΡΠΈΡ Π½Π° ΠΠ°ΡΠΊΡΡ. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΅ΡΠ΅ Π² ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΠΌΠΈΡΡΠ» ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π»ΠΈ Π΄Π° ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ ΠΊΡΠΌ ΡΡΠ°Ρ, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π°ΠΊΡΡΠ°Π»Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° offset ΡΠΏΠΎΡΠ΅Π΄ SQL ΡΡΠ°Π½Π΄Π°ΡΡΠ°.
ΠΠ° Π½ΡΠΊΠΎΠΈ ΠΌΠ΅ΡΡΠ° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ ΠΈ Π±Π΅Π»Π΅ΠΆΠΊΠΈ ΠΎΡ Π°Π²ΡΠΎΡΠ°. ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΌΠ΅ΡΡΠ° ΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π°ΠΌ ΠΊΠ°ΡΠΎ βΠΏΡΠΈΠΌ.β Π·Π° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΡΡΠ½ΠΎΡΠ°.
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΈΡΠ»Ρ, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠ° Π·Π½Π°ΡΡ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½Π° ΠΈ Π±Π°Π²Π½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΈ ΡΡΠ΅Π· offset. ΠΠΎ Π·Π½Π°Π΅ΡΠ΅ Π»ΠΈ, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Ρ ΠΏΠΎ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ?
Π ΡΠ°ΠΊΠ°, ΠΊΠ»ΡΡΠΎΠ²ΠΎΡΠΎ ΡΠ»ΠΎΠ²ΠΎ offset ΡΠΊΠ°Π·Π²Π° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π° ΠΏΡΠΎΠΏΡΡΠ½Π΅ ΠΏΡΡΠ²ΠΈΡΠ΅ n Π·Π°ΠΏΠΈΡΠ° Π² Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° Π±Π°Π·Π°ΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ ΡΠ΅Π·ΠΈ ΠΏΡΡΠ²ΠΈ n Π·Π°ΠΏΠΈΡΠ° ΠΎΡ Π΄ΠΈΡΠΊΠ°, Π² Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ ΡΠ΅Π΄ (ΠΏΡΠΈΠΌ.: Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈ ΡΠΎΡΡΠΈΡΠ°Π½Π΅, Π°ΠΊΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ), ΠΈ ΡΠ°ΠΌΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΡΠ½Π΅ Π·Π°ΠΏΠΈΡΠΈΡΠ΅, Π·Π°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ n+1 ΠΈ Π½Π°ΡΠ°ΡΡΠΊ. ΠΠ°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ Π΅, ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π½Π΅ Π΅ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² Π‘Π£ΠΠ, Π° Π² ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°:
β¦the rows are first sorted according to the and then limited by dropping the number of rows specified in the from the beginningβ¦
-SQL:2016, Part 2, 4.15.3 Derived tables (ΠΏΡΠΈΠΌ.: Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π°ΠΉ-ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡ)
ΠΠ»ΡΡΠΎΠ²ΠΈΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΊ Π΅, ΡΠ΅ offset ΠΏΡΠΈΠ΅ΠΌΠ° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ β Π±ΡΠΎΡ Π½Π° Π·Π°ΠΏΠΈΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π°Ρ, ΠΈ ΡΠΎΠ²Π° Π΅ Π²ΡΠΈΡΠΊΠΎ. Π‘Π»Π΅Π΄Π²Π°ΠΉΠΊΠΈ ΡΠΎΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π‘Π£ΠΠ ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΠΎΡΡ Π²ΡΡΠ»ΠΈ Π½Π΅Π½ΡΠΆΠ½ΠΈΡΠ΅. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΅, ΡΠ΅ ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° offset-Π° ΠΊΠ°ΡΠ° Π΄Π° ΡΠ΅ Π²ΡΡΡΠΈ ΠΈΠ·Π»ΠΈΡΠ½Π° ΡΠ°Π±ΠΎΡΠ°. Π ΡΡΠΊ Π΄ΠΎΡΠΈ Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π°Π»ΠΈ Π΅ SQL ΠΈΠ»ΠΈ NoSQL.
ΠΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ Π±ΠΎΠ»ΠΊΠ°
ΠΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Ρ offset Π½Π΅ ΡΠ΅ ΠΈΠ·ΡΠ΅ΡΠΏΠ²Π°Ρ ΡΡΠΊ, ΠΈ Π΅ΡΠΎ Π·Π°ΡΠΎ. ΠΠΊΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π΄Π²Π΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π΄ΠΈΡΠΊΠ° Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π° Π΄ΡΡΠ³Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ Π½ΠΎΠ² Π·Π°ΠΏΠΈΡ, ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ?

ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° offset Π·Π° ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠΈ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ, Π² ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ Π½ΠΎΠ² Π·Π°ΠΏΠΈΡ Π±ΡΠ΄Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ, Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠΎΠ²Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° order by, ΠΈ Π½ΠΎΠ² Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅).
ΠΠ»ΡΡΡΡΠ°ΡΠΈΡΡΠ° ΡΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ. ΠΠ°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ΅ΡΠ΅ ΠΏΡΡΠ²ΠΈΡΠ΅ 10 Π·Π°ΠΏΠΈΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ Π½ΠΎΠ² Π·Π°ΠΏΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΌΠ΅ΡΡΠ²Ρ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠ΅Π½ΠΈ Π·Π°ΠΏΠΈΡΠΈ Ρ 1. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π±Π°Π·Π°ΡΠ° Π²Π·ΠΈΠΌΠ° Π½ΠΎΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ° Ρ 10 ΡΠ»Π΅Π΄Π²Π°ΡΠΈ Π·Π°ΠΏΠΈΡΠ° ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π½Π΅ ΠΎΡ 11-ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΡΡΡΠ±Π²Π°Π»ΠΎ, Π° ΠΎΡ 10-ΠΈΡ, Π΄ΡΠ±Π»ΠΈΡΠ°ΠΉΠΊΠΈ ΡΠΎΠ·ΠΈ Π·Π°ΠΏΠΈΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΈ Π΄ΡΡΠ³ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ²Π° ΠΈΠ·ΡΠ°Π·ΡΠ²Π°Π½Π΅, Π½ΠΎ ΡΠ°Π·ΠΈ Π΅ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½Π°ΡΠ°.
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΌΠ΅, ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π΅ ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π‘Π£ΠΠ ΠΈΠ»ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅ Π² Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΡΠ° Π½Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡΡΠ° ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ° SQL. ΠΠΈΠ΅ ΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½Π° Π‘Π£ΠΠ ΠΊΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ Π·Π°ΠΏΠΈΡΠΈ Π΄Π° ΠΏΡΠΎΠΏΡΡΠ½Π΅. ΠΠ°Π·Π°ΡΠ° ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΠ°ΠΊΠ°Π²Π° Π·Π°ΡΠ²ΠΊΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π΅ ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ°Π»ΠΊΠΎ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ ΡΠΌΠ΅ΡΡΠ½ΠΎ Π΄Π° ΡΡΠΎΡΠ½ΠΈΠΌ, ΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΊΠ»ΡΡΠΎΠ²Π° Π΄ΡΠΌΠ°, Π° ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠΌΠ° ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΠΏΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°:
- ΠΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° offset, ΠΊΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎΡ Π΄Π²Π΅ ΠΊΠ»ΡΡΠΎΠ²ΠΈ Π΄ΡΠΌΠΈ limit [offset] (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ°ΠΌΠ°ΡΠ° limit Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π»ΠΎΡΠ°).
- Π€ΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ Π΄ΠΎΠ»Π½ΠΈ Π³ΡΠ°Π½ΠΈΡΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ°ΡΠΈΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, row_number(), rownum ΠΈ Ρ.Π½.).
ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°Π·Π²Π°Ρ ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π°Ρ, Π±Π΅Π· Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° offset ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ.
ΠΠΈΠ²ΠΎΡ Π±Π΅Π· OFFSET
Π ΡΠ΅Π³Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°ΡΠΈΡΡ ΡΠ²ΡΡ Π±Π΅Π· ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. ΠΠΊΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ ΠΆΠΈΠ²ΠΎΡΡΡ Π±Π΅Π· offset Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΠ»ΠΎΠΆΠ΅Π½: Ρ ΡΠ΅Π»Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΠΎΠ½Π΅Π·ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: Ρ.Π΅. ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°), Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π² where.
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π°ΠΌΠ΅ Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π²ΡΡΡ Ρ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ (ΡΡΠ°ΡΠΈΡΡ Π΄ΠΎΠ±ΡΡ order by). Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ ΡΠΈΠ»ΡΡΡ, Π·Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΡΠ°ΠΌΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΠ»Π΅Π΄ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π·Π°ΠΏΠΈΡ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°:
SELECT ...
FROM ...
WHERE ...
AND id < ?last_seen_id
ORDER BY id DESC
FETCH FIRST 10 ROWS ONLYΠ ΡΠΎΠ²Π° Π΅ ΡΠ΅Π»ΠΈΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½Π° ΡΠ°ΠΊΡΠ² ΠΏΠΎΠ΄Ρ ΠΎΠ΄. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΏΡΠΈ ΡΠΎΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΡΠ°Π²Π° ΠΏΠΎ-Π²Π΅ΡΠ΅Π»ΠΎ, Π½ΠΎ ΠΈΠ΄Π΅ΡΡΠ° ΡΠΈ ΠΎΡΡΠ°Π²Π° ΡΡΡΠ°ΡΠ°. ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ -ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ΅ Π½Π°ΡΠΈΡΠ° seek method ΠΈΠ»ΠΈ keyset pagination. Π’ΠΎΠΉ ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΠ»Π°Π²Π°ΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ (Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° Ρ Π·Π°ΠΏΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅, ΠΎΠΏΠΈΡΠ°Π½Π° ΠΏΠΎ-Π³ΠΎΡΠ΅) ΠΈ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΈ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ ΠΎΡ ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠΈΡ offset. Π‘ΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΡΠΎΠ²Π°, ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π½Π΅ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»Π½ΠΎ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π·Π°ΡΠ²Π΅Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° (Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ ΠΊΡΠΌ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ . Π’Π°ΠΌ ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ).
ΠΠ΄ΠΈΠ½ ΠΎΡ ΡΠ»Π°ΠΉΠ΄ΠΎΠ²Π΅ΡΠ΅ , ΡΠ΅ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½Π΅ Π΅ Π²ΡΠ΅ΠΌΠΎΠ³ΡΡΠ° β ΡΡ ΠΈΠΌΠ° ΡΠ²ΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΉ-Π·Π½Π°ΡΠΈΠΌΠΎΡΠΎ Π΅, ΡΠ΅ Π½ΡΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ). ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π² Π΅ΠΏΠΎΡ Π°ΡΠ° Π½Π° Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΎΡΠΎ ΡΠΊΡΠΎΠ»ΠΈΡΠ°Π½Π΅ (Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°) ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³ΠΎΠ»ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π£ΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π·Π° ΠΊΠ»ΠΈΠΊΠ²Π°Π½Π΅ β Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π»ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° UI (Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΌΠ½Π΅Π½ΠΈΠ΅ Π½Π° Π°Π²ΡΠΎΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°).
Π ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠ°Π²Π° Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅?
ΠΠ°Π³ΠΈΠ½Π°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΡΠ΅ΡΡΠΎ Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΠΏΠΎΡΠ°Π΄ΠΈ Π»ΠΈΠΏΡΠ° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ, Π½Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΈΠ·Π±ΠΎΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡΡΠ°.
Π‘ΠΈΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π° ΠΎΡ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠ»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β ΠΎΡ Π‘Π£ΠΠ Π΄ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° AJAX-Π·Π°ΡΠ²ΠΊΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΡΠΈ Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΎ ΡΠΊΡΠΎΠ»ΠΈΡΠ°Π½Π΅. ΠΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠΊΠ°Π·Π²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, ΡΠ΅Π³Π° ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π½Π°Π²Π΅Π΄Π½ΡΠΆ.
ΠΠ±Π°ΡΠ΅ Π±ΡΠΎΡΡ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π΅, ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°. ΠΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°:
- Π·Π° Java;
- Π·Π° Ruby;
- ΠΈ Π·Π° Django;
- Π·Π° Python;
- β ΠΊΡΠΈΡΠ΅ΡΠΈΠΉ API Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ JPA;
- Π·Π° Perl;
- , ΠΌΠ°ΠΏΠ΅Ρ Π΄Π»Ρ Node.js .
(ΠΡΠΈΠΌ.: Π½ΡΠΊΠΎΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ Π±ΡΡ Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π° Π½ΡΠΊΠΎΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ Π±ΡΡ Π° ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½ΠΈ ΠΎΡ 2017β2018 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠΊΠΎ Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ Ρ ΠΏΡΡΠ²ΠΎΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°.)
Π’ΠΎΡΠ½ΠΎ Π² ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π²Π°ΡΠ°ΡΠ° ΠΏΠΎΠΌΠΎΡ. ΠΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ, ΠΌΠΎΠ»Ρ, ΠΏΡΠΈΠ·ΠΎΠ²Π°Π²Π°ΠΌ Π²ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ² native ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π΅. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π²ΡΠΏΡΠΎΡΠΈ ΠΈΠ»ΠΈ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΠΎΠΌΠΎΡ, ΡΠ΅ ΡΠ΅ ΡΠ°Π΄Π²Π°ΠΌ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π° (, , ) (ΠΏΡΠΈΠΌ.: ΠΎΡ Π»ΠΈΡΠ½ΠΈΡ ΠΌΠΈ ΠΎΠΏΠΈΡ Π² ΠΎΠ±ΡΡΠ²Π°Π½Π΅ΡΠΎ Ρ ΠΠ°ΡΠΊΡΡ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ ΡΠΎΠΉ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ Π΅Π½ΡΡΡΠΈΠ°Π·ΠΈΡΠ°Π½ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ°).
ΠΠΊΠΎ ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΈΡΠ»ΠΈΡΠ΅, ΡΠ΅ Π·Π°ΡΠ»ΡΠΆΠ°Π²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅, β ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΠΊΠ²Π΅ΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΡΠΏΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π² Π»ΠΈΠ½ΠΊΠ°.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΡΠΈΠ½Π°ΡΠ°, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΡΡΠΎ ΡΠ°ΠΊΡΠ² ΠΏΡΠΎΡΡ ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊΠ°ΡΠΎ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π½Π΅ Π΅ ΡΠΈΡΠΎΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½, Π½Π΅ Π΅, Π·Π°ΡΠΎΡΠΎ Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π½ΡΠΊΠ°ΠΊΠ²ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΠΈΠ»ΠΈΡ. ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π΅, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠ° ΡΠ²ΠΈΠΊΠ½Π°Π»ΠΈ Π΄Π° Π²ΠΈΠΆΠ΄Π°Ρ ΠΈ ΡΠ°Π±ΠΎΡΡΡ Ρ offset β ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΅ Π½Π°Π»ΠΎΠΆΠ΅Π½ ΠΎΡ ΡΠ°ΠΌΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ.
Π ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠΎΠ²Π°, ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ Π·Π°ΠΌΠΈΡΠ»ΡΡ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊΡΠΌ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡΡΠ°, Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»Π½Π°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ²Π΅ΡΠ΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΡΠ»Π°Π±ΠΎ. ΠΠ°ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π²ΠΈ Π΅ Π±Π»ΠΈΠ·ΠΊΠ° ΠΈΠ΄Π΅ΡΡΠ° ΠΈ ΡΠ΅Π»ΡΠ° Π½Π° Π±Π΅Π·ΠΎΡΡΠ΅ΡΠ½Π°ΡΠ° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ, β ΠΏΠΎΠΌΠΎΠ³Π½Π΅ΡΠ΅ Π΄Π° Ρ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΠΈΠΌ!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
ΠΠ²ΡΠΎΡ: Markus Winand
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
