ืฉืืื ืืืืื! ืื ื ืืคืชื ืขืืจืคื ืืืชื ืฉืืจืืชื ืืืงืจื ื-Java + Spring. ืื ื ืขืืื ืืืื ืืฆืืืชื ืคืืชืื ืืืืฆืจ ืืคื ืืืืื ืืืื ืงืืฃ.
ืืฆืืืช ืฉืื ื, ืขืืื ืืขืชืื ืงืจืืืืช ืฉืืืช ืืืคืืืืืืฆืื ืฉื ืฉืืืืชืืช ื-DBMS. ืืชื ืชืืื ืจืืฆื ืืืืืช ืงืฆืช ืืืชืจ ืืืืจ, ืืื ืืชื ืื ืชืืื ืืืื ืืืกืชืืจ ืขื ืืื ืืงืกืื ืฉื ืื ื ืืงืคืืื - ืืชื ืฆืจืื ืืืคืฉ ืืื ืืจืืื ืืขืงืืคืช ืืืขืื. ืืืืื ืืื ืืืฉืืืืืื ืืืื ืืจืืื ืืืื ืืจื ื ืืืืคืืฉ ืืืจ ืืืคืืืืืืฆืืืช ืกืืืจืืช ืืขืืืื ืขื ืืกืื ื ืชืื ืื, ืืฆืืชื
ืืจืฆืื ื ืืชืจืื ืขืืืจืื ืืืืจ ืงืฆืจ ืืืช ืืจืงืืก. ืืคืฉืจ ืืงืจืื ืืื ืืืืื ืืกืืืืช ืื ืืคืกื ืืืืงืฉ ืืืฉืื ืชืฉืืืช ืื ืืืขืื ืืืฉื ื, โโืื ืขืืืื ืจืืืื ืืืช, ืฉื ืืืฆืืข ืคืขืืืช ืืืืคืกื ืืคื ืชืงื SQL.
ืืืงืืืืช ืืกืืืืื ืืืกืืฃ ืืช ืืืืืจ ืืืกืืจืื ืืืขืจืืช. ืืชืืืืก ืืื ืืืงืืืืช ืืืื ื"ืืขืจื". ืืืืชืจ ืืืืจืืช
ืืงืืื ืงืื ื
ืื ื ืืืฉื ืฉืื ืฉืื ืจืืื ืืืืขืื ืืื ืืขืืืชืืช ืืืืืืช ืืขืืืื ืขื ืืืืจืช ืขืืืืื ืืืืฆืขืืช ืืืคืกื. ืืืืขืชื ืฉื ืืชื ืืืืืืฃ ืืืชื ืื ืืงืืืช ืืขืืฆืื ืืขืื ืืืชืจ?
ืื, ืืืืช ืืืคืชื offset ืืืืจืช ืืืกื ืื ืชืื ืื ืืืื ืขื n ืืจืฉืืืืช ืืจืืฉืื ืืช ืืืงืฉื. ืขื ืืืช, ืืกื ืื ืชืื ืื ืขืืืื ืฆืจืื ืืงืจืื ืืช n ืืจืฉืืืืช ืืจืืฉืื ืืช ืืืื ืืืืืกืง, ืืกืืจ ืื ืชืื (ืฉืืื ืื: ืืื ืืืื ืื ืฆืืื), ืืจืง ืืืืจ ืืื ื ืืชื ืืืื ืืืืืืจ ืจืฉืืืืช ื-n+1 ืืืืื. ืืืืจ ืืืขื ืืื ืืืืชืจ ืืื ืฉืืืขืื ืืื ืื ืืืืฉืื ืืกืคืฆืืคื ื-DBMS, ืืื ืืืืืจื ืืืงืืจืืช ืืคื ืืชืงื:
...ืืฉืืจืืช ืืืืื ืืช ืชืืืื ืืคื ื ืืืืืจ ืืื ืืืืื ืขื ืืื ืืคืืช ืืกืคืจ ืืฉืืจืืช ืฉืฆืืื ื- ืืืืชืืื...
-SQL:2016, ืืืง 2, 4.15.3 ืืืืืืช ื ืืืจืืช (ืืขืจื: ืืจืืข ืืชืงื ืื ืคืืฅ ืืืืชืจ)
ื ืงืืืช ืืืคืชื ืืื ืืื ืฉืืืืคืกื ืืืงื ืคืจืืืจ ืืืื - ืืกืคืจ ืืจืฉืืืืช ืฉืขืืืื ืืืื, ืืืื. ืืขืงืืืช ืืืืจื ืื, ื-DBMS ืืืื ืจืง ืืืืืจ ืืช ืื ืืจืฉืืืืช ืืืืืจ ืืื ืืืฉืืื ืืช ืืืืืชืจืืช. ืืจืืจ ืฉืืืืืจื ืืื ืฉื ืงืืืื ืืืืฆืช ืืืชื ื ืืขืฉืืช ืขืืืื ื ืืกืคืช. ืืื ืืคืืื ืื ืืฉื ื ืื ืื SQL ืื NoSQL.
ืจืง ืขืื ืงืฆืช ืืื
ืืืขืืืช ืืงืืืื ืื ืืกืชืืืืืช ืฉื, ืืื ื ืืกืืื. ืื ืืื ืงืจืืืช ืฉื ื ืขืืืื ื ืชืื ืื ืืืืืกืง, ืคืขืืื ื ืืกืคืช ืชืื ืืก ืจืฉืืื ืืืฉื, ืื ืืงืจื ืืืงืจื ืื?
ืืืฉืจ ืืฉืชืืฉืื ื-offset ืืืืืื ืขื ืจืฉืืืืช ืืืคืื ืงืืืืื, ืืืฆื ืฉื ืืืกืคืช ืจืฉืืื ืืืฉื ืืื ืงืจืืื ืฉื ืขืืืืื ืฉืื ืื, ืกืืืจ ืืื ืื ืฉืชืงืืื ืืคืืืืืืช (ืฉืืื ืื: ืืืืจ ืืคืฉืจื ืืืฉืจ ืื ื ืงืืจืืื ืขืืื ืืืจ ืขืืื ืืืืฆืขืืช ืืกืืจ ืืคื ืืื ื, ืื ืืืืฆืข ืืคืื ืฉืื ื ืืื ืขืฉืื ืืงืื ืขืจื ืืืฉ).
ืืืืืจ ืืชืืจ ืืืืจืืจ ืืฆื ืื. ืืืกืืก ืงืืจื ืืช 10 ืืจืฉืืืืช ืืจืืฉืื ืืช, ืืืืืจ ืืื ืืืื ืก ืจืฉืืื ืืืฉื, ืฉืืงืื ืืช ืื ืจืฉืืืืช ืืงืจืืื ื-1. ืืื ืืืกืืก ืืืงื ืขืืื ืืืฉ ื-10 ืืจืฉืืืืช ืืืืืช ืืืชืืื ืื ืื-11, ืืคื ืฉืฆืจืื, ืืื ืื- 10, ืืฉืืคื ืืช ืืจืฉืืื ืืื. ืงืืืืืช ืืจืืืืช ื ืืกืคืืช ืืงืฉืืจืืช ืืฉืืืืฉ ืืืืืื ืื, ืื ืืื ืื ืคืืฅ ืืืืชืจ.
ืืคื ืฉืืืจ ืืืืื ื, ืื ืืืืืจ ืืืขืืืช ืฉื DBMS ืกืคืฆืืคื ืื ืืืืฉืืืื ืฉืืื. ืืืขืื ืืื ืืืืืจืช ืขืืืื ืืคื ืชืงื SQL. ืื ื ืืืืจืื ื-DBMS ืืืื ืขืืื ืืืืื ืื ืขื ืืื ืจืฉืืืืช ืืืื. ืืกื ืื ืชืื ืื ืคืฉืื ืื ืืกืืื ืืืืขื ืืงืฉื ืืื, ืืืืืื ืฉืืฉ ืืขื ืืื ืืืืข ืืื.
ืืืื ืื ืืืืืืจ ืฉืื ืืืืืจ ืืืขืื ืืืืืช ืืคืชื ืกืคืฆืืคืืช, ืืื ืืกืื ืืืงื ืฉื ืืฉืืืืชื. ืืฉื ื ืขืื ืืื ืชืืืืจืื ืืืื ืืืืคืืื ืืืขืืืชื ืฉืืื:
- ืืืืช ืืืคืชื ืืืคืกื ืืื ืืคื ืฉืืืืืจ ืงืืื ืืื.
- ืื ืืื ืฉื ืฉืชื ืืืืืช ืืคืชื ืืืืื [ืืืกื] (ืืืจืืช ืฉืืืืื ืขืฆืื ืื ืื ืื ืืจืืขื).
- ืกืื ืื ืืคื ืืืืืืช ื ืืืืื, ืืืชืืกืก ืขื ืืกืคืืจ ืฉืืจืืช (ืืืืืื, row_number(), rownum ืืื').
ืื ืืืืืืืื ืืืื ืคืฉืื ืืืืจืื ืื ืขื ืืื ืฉืืจืืช ืืืื, ืืื ืืืืข ื ืืกืฃ ืื ืืงืฉืจ.
ืืืืฉื ืืืืจ ืื, ืืืืช ืืืคืชื offset ืืฉืืฉืช ืืกืืืื ืฉื ืื ืืืคืฉืจืืืืช ืืืื.
ืืืื ืืื OFFSET
ืขืืฉืื ืืืื ื ืืืืื ืืื ืืขืืื ืฉืื ื ืืื ื ืจืื ืืื ืื ืืืขืืืช ืืืื. ืืกืชืืจ ืฉืืืืื ืืื ืงืืืื ืื ืื ืื ืื ืงืฉืื: ืขื ืืืืจื ืืคืฉืจ ืืืืืจ ืจืง ืืช ืืฉืืจืืช ืฉืขืืืื ืื ืจืืื ื (ืฉืืื ืื: ืืืืืจ ืืืื ืฉืื ืืื ืืขืืื ืืงืืื), ืชืื ืฉืืืืฉ ืืชื ืื ืืืคื.
ืืืงืจื ืื, ืื ื ืืชืืืืื ืืืขืืืื ืฉืืืืืจืืช ืืืืฆืขืืช ืขื ืกื ืืกืืืจ (ืกืืจ ืืฉื ืืืื ืขื ืืื). ืืืืืื ืฉืืฉ ืื ื ืกื ืืกืืืจ, ืื ื ืืืืืื ืืืฉืชืืฉ ืืืกื ื ืคืฉืื ืืืื ืืื ืืงืื ืจืง ืืช ืื ืชืื ืื ืฉื ืืฆืืื ืืืืืจื ืืจืฉืืื ืืืืจืื ื ืฉื ืืขืืื ืืงืืื:
SELECT ...
FROM ...
WHERE ...
AND id < ?last_seen_id
ORDER BY id DESC
FETCH FIRST 10 ROWS ONLY
ืื ืื ืืขืืงืจืื ืฉื ืืืืฉื ืืื. ืืืืื, ืืืืจืื ื ืขืฉืื ืืืชืจ ืืืฃ ืืืฉืจ ืืืื ืืคื ืขืืืืืช ืจืืืช, ืืื ืืจืขืืื ืขืืืื ืืื. ืืฉืื ืืฆืืื ืฉืขืืฆืื ืื ืืฉืื ืืจืืื
ืืืฉื ืื ื ืงืจืืช ืฉืืืช ืืืคืืฉ ืื ืขืืืื ืขืจืืช ืืคืชืืืช. ืื ืคืืชืจ ืืช ืืขืืืช ืืชืืฆืื ืืฆืคื (ืฉืืื ืื: ืืืฆื ืขื ืืชืืื ืืื ืงืจืืืช ืขืืืืื, ืฉืชืืืจ ืงืืื ืืื) ืืืืืื, ืื ืฉืืืื ื ืืืืืื, ืื ืขืืื ืืืจ ืืืฆืื ืืืชืจ ืืืืืคืกื ืืงืืืกื. ืืืฆืืืืช ืืืื ื ืืขืืืื ืฉืืื ืขืืืื ืืืงืฉืืช ืืื ื ืืื ืืืืก ืืืกืคืจ ืืืืื ืืืืืงืฉืช (ืืขืจื: ืื ืืจืฆืื ืื ืืืืื ืขืื ืขื ืขืืืืชื ืฉื ืืืฉืืช ืฉืื ืืช ืืขืืืื, ืชืืืื
ืืืช ืืืืืฉืืช
ืื ืขื ืืืืื?
ืขืืืื ืขื ืืงืฉืื ืืจืื ืืื ื ืืชืืื ืืืื ืืืขืืจ ืชืืืื ืืื ืกืืจืืื ืืืืช ืืฉืืื ืื. ืจืื ืืื ืืคืืชืื, ืืจืืืช ืืกืืจืืช ืฉืื ืืช, ืื ืืืคืฉืจืื ืืืืืจ ืืื ืืืืืง ืืชืืฆืข ืืขืืืื.
ืืืฆื ืืืืืจ ืื ืืื ืืขืืืื ืฉืืฉืืื ืืืชืืืจืช ืืืจืฉืช ืชืืืื ืืงืฆื ืืงืฆื ืืืื ืืืืืืืช ืืื ื ืขืฉื ืฉืืืืฉ - ืื-DBMS ืืขื ืืืืฆืืข ืืงืฉืช AJAX ืืืคืืคื ืขื ืืืืื ืืื ืกืืคืืช. ืืืงืื ืืฆืืื ืจืง ืืช ืืกืคืจ ืืขืืื, ืืขืช ืขืืื ืืฆืืื ืงืืืฆืช ืืคืชืืืช ืขืืืจ ืื ืืขืืืืื ืืืช ืืืช.
ืขื ืืืช, ืืกืคืจ ืืืกืืจืืช ืืชืืืืืช ืืขืืืื ืืืคืชืืืช ืืืื ืืืื ืืืืจืื. ืื ื ืื ืฉืืฉ ืื ื ืืจืืข:
jOOQ ืขืืืจ Java;order_query ืขืืืจ ืจืืื;chunkator ะธืื'ื ืื Infinite Scroll Pagining ืขืืืจ ื'ื ืื;SQL Alchemy sqlakeyset ืขืืืจ Python;ืืชืืื-ืืืื - API ืฉื ืงืจืืืจืืื ืื ืขืืืจ ืืืฉืืื JPA;DBIx::Class::Wrapper ืขืืืจ ืคืจื;Massive.js , ืืืคื ืขืืืจ Node.jsืชืืขืื ืขืจืืช ืืคืชืืืช .
(ืืขืจื: ืืืง ืืืงืืฉืืจืื ืืืกืจื ืืฉื ืืขืืืื ืฉืืืื ืืชืจืืื ืืืง ืืืกืคืจืืืช ืื ืขืืืื ื ืืื 2017-2018. ืื ืืชื ืืขืื ืืื, ืืชื ืืืื ืืืกืชืื ืืืงืืจ ืืืงืืจื.)
ืืจืืข ืื ืืฉ ืฆืืจื ืืขืืจืชืื. ืื ืืชื ืืคืชื ืื ืชืืื ืืืกืืจืช ืฉืขืืฉื ืฉืืืืฉ ืืืฉืื ืืขืืืื, ืื ืื ื ืืืงืฉ, ืื ื ืืคืฆืืจ, ืื ื ืืคืฆืืจ ืืื ืืกืคืง ืชืืืื ืืงืืจืืช ืืขืืืื ืขื ืืงืฉืื. ืื ืืฉ ืื ืฉืืืืช ืื ืฉืืชื ืฆืจืื ืขืืจื, ืื ื ืืฉืื ืืขืืืจ (
ืื ืืชื ืืฉืชืืฉืื ืืคืชืจืื ืืช ืืืื ืื ืฉืืืขืชืื ืจืืืืื ืืงืื ืชืืืื ืืขืืืื ืืคื ืืคืชืืืช, ืฆืจื ืืงืฉื ืื ืืคืืื ืืฆืืขื ืคืชืจืื ืืืื, ืืืืืช ืืืคืฉืจ. ืืชื ืืืื ืื ืงืืฉืืจ ืืืืืจ ืื.
ืืกืงื ื
ืืกืืื ืืื ืฉืืืฉื ืื ืคืฉืืื ืืฉืืืืฉืืช ืืื ืขืืืื ืืคื ืืคืชืืืช ืืื ื ื ืคืืฆื ืืื ืื ืฉืืื ืงืฉื ืืืืฉืื ืืื ืืช ืื ืืืจืฉืช ืืืืฅ ืจื. ืืกืืื ืืขืืงืจืืช ืืื ืฉืจืืื ืจืืืืื ืืจืืืช ืืืขืืื ืขื ืืืคืกื โ ืืืฉื ืื ืืืืชืืช ืขื ืืื ืืชืงื ืขืฆืื.
ืืชืืฆืื ืืื, ืืขื ืื ืฉืื ืืืฉืืื ืขื ืฉืื ืื ืืืืฉื ืืขืืืื, ืืืฉื ืื, ืชืืืื ืืื ืกืืจืืื ืืืืช ืืืกืืจืืช ืืกืคืจืืืช ืืชืคืชืืช ืืฆืืจื ืืจืืขื. ืืื, ืื ืืจืขืืื ืืืืืจื ืฉื ืขืืืื ืืื ืงืืืื ืงืจืืืื ืืืืื, ืขืืจื ืืืคืืฅ ืืืชื!
ืืงืืจ:
ืืืืจ: ืืจืงืืก ืืืื ื ื
ืืงืืจ: www.habr.com