ΠΠ½Π΅Ρ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π² SQL. ΠΡΠΈΡΠΊΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ, Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Captain Obvious - Π½Π΅ΠΊΠ° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ° ΡΠΎΡΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅.
Π’ΠΎΠ΅ΡΡ ΠΈΠΌΠ° Π·Π½Π°ΠΊ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ events
, ΠΈ ΡΡ ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ ts
- ΡΠΎΡΠ½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π² ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ΅Π·ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ Π½Π°ΡΠΈΠ½:
CREATE TABLE events(
id
serial
PRIMARY KEY
, ts
timestamp
, data
json
);
CREATE INDEX ON events(ts DESC);
Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΡΠ·ΠΈΠ½Π° Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΠΌ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ Π½ΠΈ ΡΡΡΠ±Π²Π° Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠΎΡΠΌΠ° Π½Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
#0. βΠΠ· ΡΡΠΌ ΠΏΠΎΠ³ΡΠΎΠΌΠ½ΠΈΠΊΡΡ Π½Π° ΠΌΠ°ΠΉΠΊΠ° ΠΌΠΈβ
cur.execute("SELECT * FROM events;")
rows = cur.fetchall();
rows.sort(key=lambda row: row.ts, reverse=True);
limit = 26
print(rows[offset:offset+limit]);
ΠΠΎΡΡΠΈ Π½Π΅ Π΅ ΡΠ΅Π³Π° - ΡΡΠ΄ΠΊΠΎ Π΅, Π½ΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ° Π² Π΄ΠΈΠ²Π°ΡΠ° ΠΏΡΠΈΡΠΎΠ΄Π°. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ»Π΅Π΄ ΡΠ°Π±ΠΎΡΠ° Ρ ORM ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ βΠ΄ΠΈΡΠ΅ΠΊΡΠ½Π°β ΡΠ°Π±ΠΎΡΠ° Ρ SQL.
ΠΠΎ Π½Π΅ΠΊΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
#1. ΠΠΠΠΠ‘Π’ΠΠΠΠ
SELECT
...
FROM
events
ORDER BY
ts DESC
LIMIT 26 OFFSET $1; -- 26 - Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, $1 - Π½Π°ΡΠ°Π»ΠΎ ΡΡΡΠ°Π½ΠΈΡΡ
ΠΡΠΊΡΠ΄Π΅ ΠΈΠ΄Π²Π° ΡΠΈΡΠ»ΠΎΡΠΎ 26? Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΈΡΡ Π±ΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π·Π° Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ Π΅ΠΊΡΠ°Π½. ΠΠΎ-ΡΠΎΡΠ½ΠΎ, 25 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Π·Π°ΠΏΠΈΡΠ°, ΠΏΠ»ΡΡ 1, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠΈ, ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ ΠΎΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π² ΠΈΠ·Π²Π°Π΄ΠΊΠ°ΡΠ° ΠΈ ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π½Π°ΠΏΡΠ΅Π΄.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ°Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ βΠ·Π°ΡΠΈΡΠ°β Π² ΡΡΠ»ΠΎΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½Π° ΠΏΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠΎ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π·Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ Π½Π° PostgreSQL Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π·ΡΠΈΡΠ° Π½Π° Π·Π½Π°Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π·Π°ΠΏΠΈΡΠΈ - ΠΈ Π»Π΅ΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ Π½Π΅Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΏΠ»Π°Π½.
Π Π΄ΠΎΠΊΠ°ΡΠΎ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄ΡΡ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΈΠ·ΡΠ°Π»Π½ΠΈ βΡΡΡΠ°Π½ΠΈΡΠΈβ, Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π·Π°Π±Π΅Π»ΡΠ·Π²Π° Π½ΠΈΡΠΎ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅. Π’ΠΎΡΠ½ΠΎ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π² ΠΊΠΎΠΉΡΠΎ, Π² Π±ΠΎΡΠ±Π°ΡΠ° Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ, UI/UX ΡΠ΅ΡΠ°Π²Π° Π΄Π° ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° βΠ±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΎ ΠΏΡΠ΅Π²ΡΡΡΠ°Π½Π΅β - ΡΠΎΠ΅ΡΡ Π²ΡΠΈΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° ΡΠ΅ ΠΈΠ·ΡΠ΅ΡΡΠ°Π²Π°Ρ Π² Π΅Π΄ΠΈΠ½ ΡΠΏΠΈΡΡΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π²ΡΡΡΠ° Π½Π°Π³ΠΎΡΠ΅ ΠΈ Π½Π°Π΄ΠΎΠ»Ρ.
Π ΡΠ°ΠΊΠ°, ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅, Π²ΠΈΠ΅ ΡΡΠ΅ Ρ
Π²Π°Π½Π°ΡΠΈ Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ°. ΠΠ°ΡΠΎ, Π·Π°ΡΠΎΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡ (ts)
, Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π²Π°ΡΠ΅ΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅?
Π’ΠΎΡΠ½ΠΎ Π·Π°ΡΠΎΡΠΎ Π½Π΅ ΡΠΈ Π³ΠΎ Π²Π·Π΅Π» ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ts
Π½Π΅ Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΊΠ»ΡΡ Π² ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°. ΠΡΡΡΠ½ΠΎΡΡ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π΅ ΡΠ° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈ, ΠΊΠ°ΡΠΎ Π²ΡΡΠΊΠΎ βΠ²ΡΠ΅ΠΌΠ΅β Π² ΡΠ΅Π°Π»Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ - ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Π·Π°ΠΏΠΈΡ Π² Π΄Π²Π΅ ΡΡΡΠ΅Π΄Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π»Π΅ΡΠ½ΠΎ βΡΠΊΠ°ΡΠ°β ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΊΡΠ°Π΅Π½ ΡΠ΅Π΄ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ°ΡΠ° ΠΊΠ»ΡΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ.
ΠΡΡΡΠ½ΠΎΡΡ ΡΡΠΊ ΡΠ΅ ΠΊΡΠΈΠ΅ ΠΈ Π²ΡΠΎΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ - Π½ΡΠΊΠΎΠΈ Π·Π°ΠΏΠΈΡΠΈ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠΎ! Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° βΠ΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΠ΅β Π·Π°ΠΏΠΈΡΠΈ Π·Π°Π΅Ρ
Π° ΠΌΡΡΡΠΎΡΠΎ Π½Π° Π½ΡΠΊΠΎΠΉ Π΄ΡΡΠ³. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΈ ΡΠ½ΠΈΠΌΠΊΠΈ
Π Π°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°
Π₯ΠΈΡΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ°Π·Π±ΠΈΡΠ°, ΡΠ΅ ΠΊΠ»ΡΡΡΡ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈ Π½Π°ΠΉ-Π»Π΅ΡΠ½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΅ Π΄Π° Π³ΠΎ ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ ΠΏΠΎΠ»Π΅, Π·Π° ΠΊΠΎΠ΅ΡΠΎ PK Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½:
CREATE UNIQUE INDEX ON events(ts DESC, id DESC);
Π Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ:
SELECT
...
ORDER BY
ts DESC, id DESC
LIMIT 26 OFFSET $1;
#2. ΠΡΠ΅Π²ΠΊΠ»ΡΡΠ΅ΡΠ΅ ΠΊΡΠΌ βΠΊΡΡΡΠΎΡΠΈβ
ΠΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ DBA ΠΈΠ΄Π²Π° ΠΏΡΠΈ Π²Π°Ρ ΠΈ Π΅ βΠ΄ΠΎΠ²ΠΎΠ»Π΅Π½β ΠΎΡ Π²Π°ΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ
SELECT
...
WHERE
(ts, id) < ($1, $2) -- ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π³Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ORDER BY
ts DESC, id DESC
LIMIT 26;
Π’ΠΈ Π²ΡΠ·Π΄ΡΡ Π½Π° Ρ ΠΎΠ±Π»Π΅ΠΊΡΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ Π΄ΠΎΠΉΠ΄Π΅...
#3. ΠΠ½Π΄Π΅ΠΊΡΠΈ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅
ΠΠ°ΡΠΎΡΠΎ Π΅Π΄ΠΈΠ½ Π΄Π΅Π½ Π²Π°ΡΠΈΡΡ DBA ΠΏΡΠΎΡΠ΅ΡΠ΅ (ts DESC)
.
ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Ρ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ βΡΠΊΠ°ΡΠ°Π½Π΅β Π½Π° Π·Π°ΠΏΠΈΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ°Π½ΠΈΡΠΈ?.. Π Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ - ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Ρ Π½Π΅ΡΠΈΠΊΡΠΈΡΠ°Π½ Π±ΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ!
ΠΡΠΎΠ±ΡΠ΅ ΠΊΠΎΠΉ Π½ΠΈ Π·Π°Π±ΡΠ°Π½ΡΠ²Π° Π΄Π° ΡΠ΅ΡΠ΅ΠΌ Π½Π΅ βΡΠΎΡΠ½ΠΎ 26β, Π° βΠ½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 26β? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ Π±Π»ΠΎΠΊ Π΄Π° ΠΈΠΌΠ° Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ts
- ΡΠΎΠ³Π°Π²Π° Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ "ΡΠΊΠ°ΡΠ°Π½Π΅" Π½Π° Π·Π°ΠΏΠΈΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π»ΠΎΠΊΠΎΠ²Π΅!
ΠΡΠΎ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΡΠΎΠ²Π°:
SELECT
...
WHERE
ts < $1 AND
ts >= coalesce((
SELECT
ts
FROM
events
WHERE
ts < $1
ORDER BY
ts DESC
LIMIT 1 OFFSET 25
), '-infinity')
ORDER BY
ts DESC;
ΠΠ°ΠΊΠ²ΠΎ ΡΡΠ°Π²Π° ΡΡΠΊ?
- Π‘ΡΡΠΏΠ²Π°ΠΌΠ΅ 25 Π·Π°ΠΏΠΈΡΠ° βΠ½Π°Π΄ΠΎΠ»Ρβ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ βΠ³ΡΠ°Π½ΠΈΡΠ½Π°ΡΠ°β ΡΡΠΎΠΉΠ½ΠΎΡΡ
ts
. - ΠΠΊΠΎ ΡΠ°ΠΌ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ, Π·Π°ΠΌΠ΅Π½Π΅ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° NULL Ρ
-infinity
. - ΠΠ·Π²Π°ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ΅Π»ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ
ts
ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ $1, ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° βΠΏΠΎΡΠ»Π΅Π΄Π½Π°β ΠΈΠ·ΠΎΠ±ΡΠ°Π·Π΅Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ). - ΠΠΊΠΎ ΡΠ΅ Π²ΡΡΠ½Π΅ Π±Π»ΠΎΠΊ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 26 Π·Π°ΠΏΠΈΡΠ°, ΡΠΎΠΉ Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ.
ΠΠ»ΠΈ ΡΡΡΠ°ΡΠ° ΡΠ½ΠΈΠΌΠΊΠ°:
ΠΠ°ΡΠΎΡΠΎ ΡΠ΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΈΠ·Π²Π°Π΄ΠΊΠ°ΡΠ° Π½ΡΠΌΠ° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ βΠ½Π°ΡΠ°Π»ΠΎβ, ΡΠΎΠ³Π°Π²Π° Π½ΠΈΡΠΎ Π½Π΅ Π½ΠΈ ΠΏΡΠ΅ΡΠΈ Π΄Π° βΡΠ°Π·ΡΠΈΡΠΈΠΌβ ΡΠ°Π·ΠΈ Π·Π°ΡΠ²ΠΊΠ° Π² ΠΎΠ±ΡΠ°ΡΠ½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ βΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ°β Π² Π΄Π²Π΅ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ - ΠΈ Π½Π°Π΄ΠΎΠ»Ρ, ΠΈ Π½Π°Π³ΠΎΡΠ΅.
Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°
- ΠΠ°, Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π΄Π²Π° ΠΏΡΡΠΈ, Π½ΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ βΡΠΈΡΡΠΎ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡβ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ ΡΠ°ΠΌΠΎ Π΄ΠΎ ΠΊΡΠΌ Π΅Π΄Π½ΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ.
- Π‘ΡΠ²ΡΠ΅ΠΌ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΅, ΡΠ΅ ΡΠ°Π·ΠΈ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ΅Π½Π½ΠΎΡΡΠΈ
ts
ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΡΠ°ΠΌΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΈ Π½Π΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΡΡΡ . ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ ΡΠΈΠΏΠΈΡΠ΅Π½ ΡΠ»ΡΡΠ°ΠΉ Π΅ βΠΌΠΈΠ»ΠΈΠΎΠ½ Π·Π°ΠΏΠΈΡΠ° Π½Π° 00:00:00.000β, Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°. ΠΡΠΊΠ°ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠΏΡΡΠΊΠ°ΡΠ΅ ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ. ΠΠΎ Π°ΠΊΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com