เชเชเซ SQL เชฎเชพเช เชเซเช เชเชเชฟเชฒ เชเซเชธ เช เชจเซ เช เชคเซเชฏเชพเชงเซเชจเชฟเช เช เชฒเซเชเซเชฐเชฟเชงเชฎเซเชธ เชนเชถเซ เชจเชนเซเช. เชเซเชชเซเชเชจ เชเชฌเซเชตเชฟเชฏเชธเชจเชพ เชธเซเชคเชฐเซ, เชฌเชงเซเช เชเซเชฌ เช เชธเชฐเชณ เชนเชถเซ - เชเชพเชฒเซ เชคเซ เชเชฐเซเช เชเชตเซเชจเซเช เชฐเชเชฟเชธเซเชเซเชฐเซ เชเซเช เชฐเชนเซเชฏเชพ เชเซเช เชธเชฎเชฏ เชฆเซเชตเชพเชฐเชพ เชเซเชฐเชฎเชพเชเชเชฟเชค.
เชเชเชฒเซ เชเซ, เชกเซเชเชพเชฌเซเชเชฎเชพเช เชเช เชธเชพเชเชจ เชเซ 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