ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! Π― Π±ΡΠΊΡΠ½Π΄-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΏΠΈΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ Π½Π° Java + Spring. Π Π°Π±ΠΎΡΠ°Ρ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π’ΠΈΠ½ΡΠΊΠΎΡΡ.
Π£ Π½Π°Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠ°ΡΡΠΎ Π²ΡΡΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π‘Π£ΠΠ. ΠΡΠ΅Π³Π΄Π° Ρ
ΠΎΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΡΡΡΡ-ΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΠΎ Π²ΡΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ β ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΊΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°ΠΊΠΈΡ
ΡΠΊΠΈΡΠ°Π½ΠΈΠΉ ΠΏΠΎ ΡΠ΅ΡΠΈ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
ΡΠ°Π·ΡΠΌΠ½ΡΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΠ Ρ Π½Π°ΡΠ΅Π»
Π₯ΠΎΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π΄Π»Ρ Π²Π°Ρ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΡΠ°ΡΡΡ ΠΠ°ΡΠΊΡΡΠ°. ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΠΏΡΠΈΠ²Π»Π΅ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ ΡΡΠ°ΡΠΎΠΉ, Π½ΠΎ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ offset ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ SQL.
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ΅ΡΡΠ°Ρ Ρ Π±ΡΠ΄Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ Π°Π²ΡΠΎΡΠ° ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ ΠΈ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡΠΌΠΈ. ΠΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ° Ρ Π±ΡΠ΄Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΊΠ°ΠΊ Β«ΠΏΡΠΈΠΌ.Β» Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ½ΠΎΡΡΠΈ
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΌΠ°Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π½Π°ΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ΠΈ ΡΠΎΡΠΌΠΎΠ·Π½ΠΎΠΉ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»Π΅ΠΊΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· offset. Π Π·Π½Π°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ, ΡΡΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ?
ΠΡΠ°ΠΊ, ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ offset ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π±Π°Π·Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ n Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Π·Π°ΠΏΡΠΎΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Π±Π°Π·Π° Π²ΡΠ΅ Π΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ n Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ Π΄ΠΈΡΠΊΠ°, ΠΏΡΠΈΡΠ΅ΠΌ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ (ΠΏΡΠΈΠΌ.: ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π·Π°Π΄Π°Π½Π°), ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ Π·Π°ΠΏΠΈΡΠΈ Π½Π°ΡΠΈΠ½Π°Ρ Ρ n+1 ΠΈ Π΄Π°Π»Π΅Π΅. Π‘Π°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Π‘Π£ΠΠ, Π½ΠΎ Π² ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ:
…the rows are first sorted according to the <order by clause> and then limited by dropping the number of rows specified in the <result offset clause> from the beginningβ¦
-SQL:2016, Part 2, 4.15.3 Derived tables (ΠΏΡΠΈΠΌ.: cΠ΅ΠΉΡΠ°Ρ ΡΠ°ΠΌΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ)
ΠΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΏΡΠ½ΠΊΡ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ 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. Π‘ΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ Π½ΠΎΠΌΠ΅ΡΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ (ΠΏΡΠΈΠΌ.: Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ·Π½Π°ΡΡ ΠΏΡΠΎ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π½ΡΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π°ΠΉΠ΄ΠΎΠ²
Π ΡΡΠΎ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ?
ΠΠ°Π³ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΠΊΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ, Π½Π΅ Π΄Π°ΡΡ Π²ΡΠ±ΠΎΡΠ°, ΠΊΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ.
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΡΡΡΠ³ΡΠ±Π»ΡΠ΅Ρ ΡΠΎ, ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ β Π½Π°ΡΠΈΠ½Π°Ρ ΠΎΡ Π‘Π£ΠΠ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ AJAX-Π·Π°ΠΏΡΠΎΡΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΡΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΠΊΡΠΎΠ»Π»ΠΈΠ½Π³Π΅. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡ ΡΡΠ°Π·Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΠΊΠ»ΡΡΠ°Ρ , ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ°ΡΡΠ΅Ρ. ΠΠΎΡ ΡΡΠΎ Π΅ΡΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ:
jOOQ Π΄Π»Ρ Java;order_query Π΄Π»Ρ Ruby;chunkator ΠΈDjango Infinite Scroll Pagination Π΄Π»Ρ Django;SQL Alchemy sqlakeyset Π΄Π»Ρ Python;blaze-persistence β criteria API Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ JPA;DBIx::Class::Wrapper Π΄Π»Ρ Perl;Massive.js , ΠΌΠ°ΠΏΠ΅Ρ Π΄Π»Ρ Node.jsKeyset Documentation .
(ΠΡΠΈΠΌ.: Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π±ΡΠ»ΠΈ ΡΠ±ΡΠ°Π½Ρ Π²Π²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»ΠΈΡΡ Ρ 2017β2018 Π³ΠΎΠ΄Π°. ΠΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΈΡΡΠΎΡΠ½ΠΈΠΊ.)
ΠΠ°ΠΊ ΡΠ°Π· Π½Π° ΡΡΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ΅ ΠΈ Π½ΡΠΆΠ½Π° Π²Π°ΡΠ° ΠΏΠΎΠΌΠΎΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ
ΠΎΡΡ ΠΊΠ°ΠΊ-ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ, ΡΠΎ Ρ ΠΏΡΠΎΡΡ, Ρ ΠΏΡΠΈΠ·ΡΠ²Π°Ρ, Ρ ΠΌΠΎΠ»Ρ Π²Π°Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΄Π»Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ Π½Π° ΠΊΠ»ΡΡΠ°Ρ
. ΠΡΠ»ΠΈ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡΡ, Π±ΡΠ΄Ρ ΡΠ°Π΄Ρ ΠΏΠΎΠΌΠΎΡΡ (
ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, Π΄ΠΎΡΡΠΎΠΉΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ, β ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΠΊΠ²Π΅ΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π² ΡΡΡΠ»ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ ΡΡΠ°ΡΡΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠ°ΠΊ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ, ΠΌΠ°Π»ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½, Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΠΈΠ»ΠΈΠΉ. ΠΠ»Π°Π²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ offset β ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄ΠΈΠΊΡΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ.
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ ΠΎ ΡΠΌΠ΅Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ, Π° ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ»Π°Π±ΠΎ. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π±Π»ΠΈΠ·ΠΊΠ° ΠΈΠ΄Π΅Ρ ΠΈ ΡΠ΅Π»Ρ Π±Π΅Π·ΠΎΡΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ, β ΠΏΠΎΠΌΠΎΠ³ΠΈΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡ Π΅Π΅!
ΠΡΡΠΎΡΠ½ΠΈΠΊ:
ΠΠ²ΡΠΎΡ: Markus Winand
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com