เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบšเบปเบ”โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เบšเบฒเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹ เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก SQL เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบฅเป‰เบฒเบ™เบ„เบปเบ™เบ•เปเปˆเบกเบทเป‰, เปเบฅเบฐเบกเบตเบซเบผเบฒเบเบฎเป‰เบญเบเป€เบŠเบตเบšเป€เบงเบต PostgreSQL เบ—เบตเปˆเบ–เบทเบเบเบงเบ”เบชเบญเบš.

เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เปเบฒเบกเบฐเบ”เบฒเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เปเบ™เบงเปƒเบ”?


เปƒเบœเบชเบปเบ™เปƒเบˆ? เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบซเบฒเบชเบฐเป€เบžเบฒเบฐ เปเบฅเบฐเป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ•เปˆเบฒเบ‡เป† เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก SQL เปเบฅเบฐเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ DBA เบ›เบปเบเบเบฐเบ•เบดเปƒเบ™ PostgreSQL - เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ เบญเปˆเบฒเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)
เบ‚เป‰เบญเบเบŠเบทเปˆ Kirill Borovikov, เบ‚เป‰เบญเบเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™ เบšเปเบฅเบดเบชเบฑเบ” Tensor. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเบ„เบงเบฒเบกเบŠเปˆเบฝเบงเบŠเบฒเบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบšเปเบฅเบดเบชเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบกเบทเป‰เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบ™เบงเปƒเบ”, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบšเปเปˆ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ "เปเบเบ" เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ”เบฝเบง, เปเบ•เปˆเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบฒเบเบฅเป‰เบฒเบ™, เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡ เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹ เบšเบฑเบ™เบซเบฒเปƒเบซเบเปˆเบ™เบตเป‰.

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, Tensor เบชเปเบฒเบฅเบฑเบšเบฅเป‰เบฒเบ™เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™ VLSI เปเบกเปˆเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบฑเบ‡เบ„เบปเบกเบ‚เบญเบ‡เบšเปเบฅเบดเบชเบฑเบ”, เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบงเบดเบ”เบตเป‚เบญ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒเป€เบญเบเบฐเบชเบฒเบ™เบžเบฒเบเปƒเบ™เปเบฅเบฐเบžเบฒเบเบ™เบญเบ, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบšเบฑเบ™เบŠเบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบŠเบตเปเบฅเบฐเบชเบฒเบ‡, ... เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบŠเบฑเปˆเบ™ "เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบกเบตเบซเบผเบฒเบเบเปˆเบงเบฒ 100 เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป‚เบ„เบ‡เบเบฒเบ™เบžเบฒเบเปƒเบ™.

เป€เบžเบทเปˆเบญโ€‹เปƒเบซเป‰โ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เปเบฅเบฐโ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบต 10 เบชเบนเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เปƒเบ™โ€‹เบ—เบปเปˆเบงโ€‹เบ›เบฐโ€‹เป€เบ—เบ”โ€‹, เบกเบตโ€‹เบซเบผเบฒเบโ€‹เปƒเบ™โ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹ เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ 1000 เบ„เบปเบ™.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš PostgreSQL เบ•เบฑเป‰เบ‡เปเบ•เปˆเบ›เบต 2008 เปเบฅเบฐเป„เบ”เป‰เบชเบฐเบชเบปเบกเบˆเปเบฒเบ™เบงเบ™เบซเบผเบงเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ›เบธเบ‡เปเบ•เปˆเบ‡ - เบ‚เปเป‰เบกเบนเบ™เบฅเบนเบเบ„เป‰เบฒ, เบชเบฐเบ–เบดเบ•เบด, เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ, เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบฅเบฐเบšเบปเบšเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ - เบซเบผเบฒเบเบเบงเปˆเบฒ 400TB. เบกเบตเบ›เบฐเบกเบฒเบ™ 250 เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบขเปˆเบฒเบ‡เบ”เบฝเบง, เปเบฅเบฐเปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบกเบตเบ›เบฐเบกเบฒเบ™ 1000 เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒ.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

SQL เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ›เบฐเบเบฒเบ”. เบ—เปˆเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบšเปเปˆเปเบกเปˆเบ™ "เบงเบดเบ—เบตเบเบฒเบ™" เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ„เบงเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆ "เบชเบดเปˆเบ‡เบ—เบตเปˆ" เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบฅเบธ. DBMS เบฎเบนเป‰เบ”เบตเบเบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก - เบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปƒเบ”เบ—เบตเปˆเบˆเบฐเบšเบฑเบ‡เบ„เบฑเบš, เบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบœเปˆเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบต, เบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบšเปเปˆ ...

เบšเบฒเบ‡ DBMSs เบเบญเบกเบฎเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ: "เบšเปเปˆ, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เปเบ–เบงเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, "เปเบ•เปˆ PostgreSQL เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบชเบฐเบ•เบดเบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบŠเบฑเป‰เบ™เบ™เปเบฒ: "เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบเปˆเบงเบฒเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบŠเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡."

เปเบ•เปˆ, เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ PostgreSQL เบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ "เบžเบฒเบเบ™เบญเบ" เบ„เบงเบšเบ„เบธเบกเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡, เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™ เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบขเบนเปˆเปƒเบ™เบฅเบฒเบงเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบกเบตเบšเบฑเบ™เบซเบฒ.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบšเบฑเบ™เบซเบฒเบ„เบฅเบฒเบชเบชเบดเบเบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ [เป€เบ–เบดเบ‡ DBA] เบกเบฑเบเบˆเบฐเบกเบฒเบžเป‰เบญเบกเบเบฑเบš? โ€œเบ™เบตเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹, เปเบฅเบฐโ€‹ เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบŠเป‰เบฒเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบซเป‰เบญเบ, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™ ... เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡!โ€

เป€เบซเบ”เบœเบปเบ™เปเบกเปˆเบ™เป€เบเบทเบญเบšเบชเบฐเป€เบซเบกเบตเบ„เบทเบเบฑเบ™:

  • เบชเบนเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš
    เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ: "เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเปƒเบซเป‰เบฅเบฒเบง 10 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™ SQL เป‚เบ”เบเบœเปˆเบฒเบ™ JOIN ... " - เปเบฅเบฐเบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบฅเบฒเบงเบˆเบฐเบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš "untied" เปเบฅเบฐเบฅเบฒเบงเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ. เปเบ•เปˆเบชเบดเปˆเบ‡เบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™, เปเบฅเบฐเบฅเบฐเบšเบปเบšเปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง (10 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™เบซเบ™เบถเปˆเบ‡ FROM) เบชเบฐเป€เบซเบกเบตเป€เบฎเบฑเบ”เปƒเบซเป‰เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. [เบšเบปเบ”เบ„เบงเบฒเบก]
  • เบชเบฐเบ–เบดเบ•เบดเบฅเป‰เบฒเบชเบฐเป„เบซเบก
    เบˆเบธเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบซเบผเบฒเบเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบชเปเบฒเบฅเบฑเบš PostgreSQL, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™ "เป€เบ—" เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบฎเป‰เบญเบ‡เบ‚เป, เปเบฅเบฐเบกเบฑเบ™ "sexcanits" เปเบ—เบฑเบšเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบทเป‰เบงเบฒเบ™เบ™เบตเป‰เบกเบต 10 เบšเบฑเบ™เบ—เบถเบเปƒเบ™เบ™เบฑเป‰เบ™, เปเบฅเบฐเปƒเบ™เบกเบทเป‰เบ™เบตเป‰เบกเบต 10 เบฅเป‰เบฒเบ™เบ„เบปเบ™, เปเบ•เปˆ PostgreSQL เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบฎเบนเป‰เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบšเบญเบเบกเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™. [เบšเบปเบ”เบ„เบงเบฒเบก]
  • "เบชเบฝเบš" เบเปˆเบฝเบงเบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™
    เบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบฅเบฐเป‚เบซเบผเบ”เบซเบผเบฒเบเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญเบ—เบตเปˆเบšเปเปˆเบกเบตเปเบœเปˆเบ™, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบซเบผเบทเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบžเบฝเบ‡เบžเป. เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ—เบฑเบ‡เปเบปเบ”... เบšเบฒเบ‡เบšเปˆเบญเบ™เบกเบตเป€เบžเบ”เบฒเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป‚เบ”เบ”เป„เบ”เป‰.
  • เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡
    เบ™เบตเป‰เปเบกเปˆเบ™เบˆเบธเบ”เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบ, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ”เบฑเบ”เปเบเป‰เบ•เปˆเบฒเบ‡เป† (INSERT, UPDATE, DELETE) - เบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เปƒเบซเบเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เป„เบ”เป‰เบฎเบฑเบšเปเบœเบ™เบเบฒเบ™

...เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เบžเบงเบเป€เบฎเบปเบฒ เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบœเบ™เบเบฒเบ™! เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบœเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบชเปเบฒเบฅเบฑเบš PostgreSQL เปเบกเปˆเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบ™เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™ algorithm เบ—เบตเปˆ, เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป‚เบ”เบเบœเบนเป‰เบงเบฒเบ‡เปเบœเบ™, เบžเบปเบšเบงเปˆเบฒเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”.

เปเบ•เปˆเบฅเบฐ node เบ•เบปเป‰เบ™เป„เบกเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™: เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบผเบทเบ”เบฑเบ”เบชเบฐเบ™เบต, เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆ bitmap, เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบชเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก, เบ•เบฑเบ”เบเบฑเบ™, เบซเบผเบทเบšเปเปˆเบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เป€เบฅเบทเบญเบ. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบเปˆเบฒเบ‡เบœเปˆเบฒเบ™เบ‚เปเป‰เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ™เบตเป‰.

เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเปเบœเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก, เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™ EXPLAIN. เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบเบฑเบšเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™ - EXPLAIN (ANALYZE, BUFFERS) SELECT ....

เบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเบ”เบต: เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เปเบฅเปˆเบ™เบกเบฑเบ™, เบกเบฑเบ™เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™ "เบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰", เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เบšเบฑเบ™เบซเบฒเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบซเบผเบ”เบชเบนเบ‡เบ—เบตเปˆเบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡, เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒ: "เป‚เบญเป‰! เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเป‰เบฒัั เบฎเป‰เบญเบ‡เบ‚เป." เป€เบ„เบดเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡, เบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ - เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰เบˆเบฒเบเบšเบฑเบ™เบ—เบถเบ, เป€เบญเบปเบฒเบกเบฑเบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบชเบฐเบ–เบดเบ•เบดเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ—เปˆเบฒเบ™เปเบฅเปˆเบ™เบกเบฑเบ™เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ - เปเบฅเบฐเบกเบฑเบ™เปเบฅเปˆเบ™เป„เบง! เปเบฅเบฐเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ เบกเบฑเบ™เปเบกเปˆเบ™ เบŠเป‰เบฒเป†.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ„เบปเบ™เบชเบฐเบซเบฅเบฒเบ”เบ‚เบฝเบ™ auto_explain เป‚เบกเบ”เบนเบ™. เบกเบฑเบ™เบกเบตเบขเบนเปˆเปƒเบ™เป€เบเบทเบญเบšเบ—เบธเบเบเบฒเบ™เปเบˆเบเบขเบฒเบ PostgreSQL เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เปƒเบŠเป‰เป„เบ”เป‰เปƒเบ™เป„เบŸเบฅเปŒ config.

เบ–เป‰เบฒเบกเบฑเบ™เบฎเบนเป‰เบงเปˆเบฒเบšเบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปเบฅเปˆเบ™เบ”เบปเบ™เบเบงเปˆเบฒเบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบšเบญเบเบกเบฑเบ™, เบกเบฑเบ™เบเปเปˆเป€เบฎเบฑเบ”เป„เบ”เป‰ "เบžเบฒเบšเบฅเบงเบก" เบ‚เบญเบ‡เปเบœเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰เปเบฅเบฐเบ‚เบฝเบ™เบžเบงเบเบกเบฑเบ™เบฎเปˆเบงเบกเบเบฑเบ™เปƒเบ™เบšเบฑเบ™เบ—เบถเบ.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ”เบตเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ›เบซเบฒเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ ... [ text footcloth ]. เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบซเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™, เบ™เบญเบเบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒ 11ms เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”.

เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ”เบต - เปเบ•เปˆเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบˆเบดเบ‡. เบ™เบญเบเบˆเบฒเบเป€เบงเบฅเบฒเบ—เบปเปˆเบงเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบเปเปˆเบšเปเปˆเป€เบซเบฑเบ™เบซเบเบฑเบ‡เป€เบฅเบตเบ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เป€เบšเบดเปˆเบ‡ "เบฅเบนเบเปเบเบฐ" เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เปเบฒเบกเบฐเบ”เบฒเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบ•เบฒ.

เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบฐเบ”เบงเบ, เบกเบตเบšเบฑเบ™เบซเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เบซเบผเบฒเบ:

  • node เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™ เบœเบปเบ™เบฅเบงเบกเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ—เบฑเบ‡เปเบปเบ” เบžเบฒเบเปƒเบ•เป‰เบžเบฃเบฐเบญเบปเบ‡. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป€เบงเบฅเบฒเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เปƒเบ™ Index Scan เบ™เบตเป‰เบ–เป‰เบฒเบกเบตเบšเบฒเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบ–เบทเบเบงเบฒเบ‡เป„เบงเป‰เบžเบฒเบเปƒเบ•เป‰เบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบต "เป€เบ”เบฑเบเบ™เป‰เบญเบ" เปเบฅเบฐเบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, CTEs เบžเบฒเบเปƒเบ™ - เปเบฅเบฐเบฅเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰ "เบขเบนเปˆเปƒเบ™เปƒเบˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ".
  • เบˆเบธเบ”เบ—เบตเบชเบญเบ‡: เป€เบงเบฅเบฒเบ—เบตเปˆเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™ node เปเบกเปˆเบ™ เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ” node เบ”เบฝเบง. เบ–เป‰เบฒ node เบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, loops เบœเปˆเบฒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบเบ„เบฑเป‰เบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ loops-cycles เบ‚เบญเบ‡ node เบ™เบตเป‰-เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปƒเบ™เปเบœเบ™เบเบฒเบ™. โ€‹เปเบ•เปˆโ€‹เป€เบงเบฅเบฒโ€‹เบ›เบฐเบ•เบดเบšเบฑเบ”โ€‹เปœเป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ‚เบญเบ‡โ€‹เบ›เบฐโ€‹เบกเบฐโ€‹เบ™เบนเบ™โ€‹เป€เบญเบ‡โ€‹เบเบฑเบ‡โ€‹เบ„เบทโ€‹เป€เบเบปเปˆเบฒโ€‹เปƒเบ™โ€‹เปเบœเบ™เบเบฒเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบ‚เปเป‰เบ™เบตเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”, เบ—เปˆเบฒเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบนเบ™เบชเบดเปˆเบ‡ เปœเบถเปˆเบ‡ เปเบฅเบฐเบญเบตเบเบขเปˆเบฒเบ‡ เปœเบถเปˆเบ‡ - เบญเบตเบเป€เบ—เบทเปˆเบญ เปœเบถเปˆเบ‡, "เบขเบนเปˆเปƒเบ™เบซเบปเบงเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ."

เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒ "เปƒเบœเปเบกเปˆเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญเบ—เบตเปˆเบชเบธเบ”?" เป€เบเบทเบญเบšเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบญเบ‡เบเปเปˆเบ‚เบฝเบ™เปƒเบ™ "เบ„เบนเปˆเบกเบท" เบงเปˆเบฒ "เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบœเบ™เบเบฒเบ™เปเบกเปˆเบ™เบชเบดเบฅเบฐเบ›เบฐเบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰, เบ›เบฐเบชเบปเบšเบเบฒเบ™ ... ".

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ 1000 เบ„เบปเบ™, เปเบฅเบฐเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เปˆเบฒเบเบ—เบญเบ”เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ™เบตเป‰เปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป„เบ”เป‰. เบ‚เป‰เบญเบ, เป€เบˆเบปเป‰เบฒ, เบฅเบฒเบงเบฎเบนเป‰, เปเบ•เปˆเบšเบฒเบ‡เบ„เบปเบ™เบ—เบตเปˆเบ™เบฑเป‰เบ™เบšเปเปˆเบฎเบนเป‰. เบšเบฒเบ‡เบ—เบตเบฅเบฒเบงเบญเบฒเบ”เบˆเบฐเบฎเบฝเบ™เบฎเบนเป‰, เบซเบผเบทเบญเบฒเบ”เบˆเบฐเบšเปเปˆ, เปเบ•เปˆเบฅเบฒเบงเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ - เปเบฅเบฐเบฅเบฒเบงเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ™เบตเป‰เบˆเบฒเบเปƒเบช?

เบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เปเบœเบ™เบเบฒเบ™. [เบšเบปเบ”เบ„เบงเบฒเบก]

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฒเบญเบดเบ” "เบœเปˆเบฒเบ™เบ•เบฐเบซเบผเบฒเบ”" - เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบขเบนเปˆ.

เปเบ•เปˆเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚ "เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”" เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบญเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบผเบฒเบเบซเบผเบทเบซเบ™เป‰เบญเบ - เปเบ—เป‰เป†, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡: เบญเบฐเบ—เบดเบšเบฒเบ.depesz.com เป‚เบ”เบ Hubert Lubaczewski. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเปˆเบญเบ‡ "เบญเบฒเบซเบฒเบ™" เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เปเบœเบ™เบเบฒเบ™, เบกเบฑเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบงเบดเป€เบ„เบฒเบฐ:

  • เป€เบงเบฅเบฒเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เบญเบ‡ node
  • เป€เบงเบฅเบฒเบ—เบฑเบ‡เปเบปเบ”เบชเบณเบฅเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ—เบฑเบ‡เปเบปเบ”
  • เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบฒเบ”โ€‹เบ„เบฐโ€‹เป€เบ™โ€‹เบ—เบฒเบ‡โ€‹เบชเบฐโ€‹เบ–เบดโ€‹เบ•เบดโ€‹
  • เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡ node เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡

เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เบตเป‰เบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบฎเบงเบšเบฎเบงเบกเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เบ—เปˆเบฒเบ™เป„เบ”เป‰เบ–เบดเป‰เบกเปเบœเบ™เบเบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปƒเบชเปˆเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™เปเบฅเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ: "Hey, Vasya, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™."

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบ•เปˆเบเบฑเบ‡เบกเบตเบšเบฑเบ™เบซเบฒเบ™เป‰เบญเบเป†.

เบ›เบฐเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”, เบˆเปเบฒเบ™เบงเบ™เบซเบผเบงเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡ "copy-paste". เป€เบˆเบปเป‰เบฒโ€‹เป€เบญเบปเบฒโ€‹เป„เบกเป‰โ€‹เบ—เปˆเบญเบ™โ€‹เบญเบฑเบ™โ€‹เปœเบถเปˆเบ‡โ€‹เบ•เบดเบ”โ€‹เปƒเบชเปˆโ€‹เปƒเบ™โ€‹เบ™เบฑเป‰เบ™, เปเบฅเบฐโ€‹เบญเบตเบโ€‹เป€เบ—เบทเปˆเบญโ€‹เปœเบถเปˆเบ‡.

เบญเบฑเบ™โ€‹เบ—เบตโ€‹เบชเบญเบ‡โ€‹, เบšเปเปˆเบกเบตเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ›เบฐเบฅเบดเบกเบฒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™ โ€” buffers เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ” EXPLAIN (ANALYZE, BUFFERS), เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบซเบฑเบ™เบกเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบฅเบฒเบงเบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ–เบญเบ”เบžเบงเบเบกเบฑเบ™, เป€เบ‚เบปเป‰เบฒเปƒเบˆเบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเปเบฅเบฐเบฎเบนเป‰เบงเปˆเบฒเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เปเบšเปˆเบ‡เปเบœเปˆเบ™เบ”เบดเบ”เปเบฅเบฐเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบ.

เบˆเบธเบ”เบฅเบปเบšเบ—เบตเบชเบฒเบกเปเบกเปˆเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญเบซเบผเบฒเบเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰. เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบซเบผเบฒเบ, เบกเบฑเบ™เบ”เบตเบ–เป‰เบฒเบ—เบธเบเป†เบซเบปเบเป€เบ”เบทเบญเบ™, เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ Perl.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™ "เป€เบ™เบทเป‰เบญเป€เบžเบ‡", เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเบฒเป„เบชเบขเบนเปˆเบเบฑเบšเบชเบดเปˆเบ‡เบ™เบตเป‰, เปเบ•เปˆเบกเบตเบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบซเบฑเบ™เบซเบ™เบตเบˆเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เบตเป‰เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡ Common Table Expression (CTE) เปเบฅเบฐ nodes dynamic เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™ InitPlan/SubPlan.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบŠเบทเปˆเบญเบงเปˆเบฒเบฎเบนเบšเบ™เบตเป‰, เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ node เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ”. เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบ - เป€เบงเบฅเบฒเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡ CTE เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบซเบฑเบเบญเบญเบเบˆเบฒเบ node CTE Scan. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบฎเบนเป‰เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบงเปˆเบฒเป€เบงเบฅเบฒเบชเบฐเปเบเบ™ CTE เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡ - hurray! เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบธเบเบ„เบปเบ™เป€เบงเบปเป‰เบฒเบงเปˆเบฒ: "เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ‚เบฝเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เบกเบฑเบ™เบˆเบฐเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”!"

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบญเบปเบฒ stack เบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบงเบฑเบš: เบซเบผเบฑเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Node.js + Express, เปƒเบŠเป‰ Bootstrap เปเบฅเบฐ D3.js เบชเปเบฒเบฅเบฑเบšเปเบœเบ™เบงเบฒเบ”เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก. เปเบฅเบฐเบ„เบงเบฒเบกเบ„เบฒเบ”เบซเบงเบฑเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบชเปˆเบงเบ™ - เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ•เบปเบงเปเบšเบšเบ—เปเบฒเบญเบดเบ”เปƒเบ™ 2 เบญเบฒเบ—เบดเบ”:

  • เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเปเบœเบ™เบเบณเบ™เบปเบ”เป€เบญเบ‡
    เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเปเบœเบ™เบเบฒเบ™เปƒเบ”เป†เบˆเบฒเบเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบ PostgreSQL.
  • เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡ dynamic nodes - CTE Scan, InitPlan, SubPlan
  • เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เปเบˆเบเบขเบฒเบ buffers - เบšเปˆเบญเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบญเปˆเบฒเบ™เบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฒเบเปเบ„เบ”เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฒเบเปเบœเปˆเบ™
  • เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™
    เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰ "เบ‚เบธเบ”" เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบ, เปเบ•เปˆเป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡ "เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญเบ—เบตเปˆเบชเบธเบ”" เบ—เบฑเบ™เบ—เบตเปƒเบ™เบฎเบนเบš.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰, เบกเบตเบเบฒเบ™เป€เบ™เบฑเป‰เบ™เปƒเบชเปˆ syntax เบฅเบงเบก. เปเบ•เปˆเป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เปเบœเบ™เบเบฒเบ™, เปเบ•เปˆเบกเบตเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฑเป‰เบ™เบเบงเปˆเบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปเบเบเบ•เบปเบงเป€เบฅเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเป‰เบงเปเบฅเบฐเบ–เบดเป‰เบกเป„เบงเป‰เบŠเป‰เบฒเบเปเบฅเบฐเบ‚เบงเบฒ, เปเบฅเบฐเปƒเบ™เบเบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป„เบงเป‰เบžเบฝเบ‡เปเบ•เปˆเป€เบชเบฑเป‰เบ™เบ—เปเบฒเบญเบดเบ”, เบ›เบฐเป€เบžเบ”เปƒเบ”เปเบ”เปˆเบ‚เบญเบ‡ node: CTE Scan, เบเบฒเบ™เบœเบฐเบฅเบดเบ” CTE เบซเบผเบท Seq Scan เบ•เบฒเบกเบญเบฒเบเบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡.

เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ•เบปเบงโ€‹เปเบ—เบ™โ€‹เบซเบเปเป‰โ€‹เบ—เบตเปˆโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบญเบตเป‰เบ™โ€‹เบงเปˆเบฒโ€‹ เปเบšเบšเปเบœเบ™.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบกเปˆเบ™เบซเบเบฑเบ‡เบญเบตเบเปเบ”เปˆเบ—เบตเปˆเบˆเบฐเบชเบฐเบ”เบงเบ? เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบชเปˆเบงเบ™เปเบšเปˆเบ‡เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ‚เปเป‰เปƒเบ” - เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆ โ€œเบ•เบดเบ”เบกเบฑเบ™โ€ เป„เบ›เบ‚เป‰เบฒเบ‡เป†. pie chart.

เบžเบงเบเป€เบฎเบปเบฒเบŠเบตเป‰เปƒเบชเปˆ node เปเบฅเบฐเป€เบšเบดเปˆเบ‡ - เบกเบฑเบ™ turns เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ Seq Scan เป„เบ”เป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบ™เป‰เบญเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบชเปˆเบงเบ™เบชเบตเปˆเบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ 3/4 เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบ CTE Scan. เบ•เบปเบเปƒเบˆ! เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบเบ™เป‰เบญเบเป†เบเปˆเบฝเบงเบเบฑเบš "เบญเบฑเบ”เบ•เบฒเบเบฒเบ™เป„เบŸ" เบ‚เบญเบ‡ CTE Scan เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡เปƒเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบžเบงเบเบกเบฑเบ™เบšเปเปˆเป„เบงเบซเบผเบฒเบ - เบžเบงเบเบกเบฑเบ™เบ•เปเปˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบชเบฐเปเบเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ›เบปเบเบเบฐเบ•เบด. [เบšเบปเบ”เบ„เบงเบฒเบก] [เบšเบปเบ”เบ„เบงเบฒเบก]

เปเบ•เปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบœเบ™เบงเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบตเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ, เบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เบซเบผเบฒเบ, เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบŠเบตเป‰เป„เบ›เบซเบฒเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบฑเบ™เบ—เบตเปเบฅเบฐเป€เบšเบดเปˆเบ‡, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบผเบฒเบเบเบงเปˆเบฒเป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆ Seq Scan "เบเบดเบ™". เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบตเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบšเบฒเบ‡เบŠเบฐเบ™เบดเบ”เบžเบฒเบเปƒเบ™, เบšเบฑเบ™เบ—เบถเบเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบเบปเบเป€เบฅเบตเบเบ•เบฒเบกเบกเบฑเบ™ ... เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ–เบดเป‰เบกเบฎเบนเบšเบ™เบตเป‰เป„เบ›เบซเบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบเบเบปเบ‡เปเบฅเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ: "Vasya, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบšเปเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™! เบ„เบดเบ”เบญเบญเบ, เป€เบšเบดเปˆเบ‡ - เบกเบตเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”!"

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เบกเบตเบšเบฒเบ‡ "rakes" เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบก.

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเบฎเบญเบš. เป€เบงเบฅเบฒเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ node เบšเบธเบเบ„เบปเบ™เปƒเบ™เปเบœเบ™เบเบฒเบ™เปเบกเปˆเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡ 1 ฮผs. เปเบฅเบฐเป€เบกเบทเปˆเบญเบˆเปเบฒเบ™เบงเบ™เบฎเบญเบšเบงเบฝเบ™เบ‚เบญเบ‡ node เป€เบเบตเบ™, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, 1000 - เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” PostgreSQL เปเบšเปˆเบ‡เบญเบญเบ "เบžเบฒเบเปƒเบ™เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡", เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบ„เบดเบ”เป„เบฅเปˆเบ„เบทเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ” "เบšเบฒเบ‡เบšเปˆเบญเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ 0.95ms เปเบฅเบฐ 1.05ms". เป€เบกเบทเปˆเบญเบเบฒเบ™เบ™เบฑเบšเป€เบ›เบฑเบ™ microseconds, เบ™เบฑเป‰เบ™เบเปเปˆเบšเปเปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡, เปเบ•เปˆเป€เบกเบทเปˆเบญเบกเบฑเบ™เบฎเบญเบ” [milli] เบงเบดเบ™เบฒเบ—เบตเปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ "untying" เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป„เบ›เบซเบฒ nodes เบ‚เบญเบ‡ "เบœเบนเป‰เบ—เบตเปˆเบšเปเบฅเบดเป‚เบžเบเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”".

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบˆเบธเบ”เบ—เบตเบชเบญเบ‡, เบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เบซเบผเบฒเบ, เปเบกเปˆเบ™เบเบฒเบ™เปเบœเปˆเบเบฐเบˆเบฒเบเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (buffers เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™) เปƒเบ™เบšเบฑเบ™เบ”เบฒ nodes เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบชเบเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™ 2 เบญเบฒเบ—เบดเบ”เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ•เบปเป‰เบ™เปเบšเบšเบšเบงเบเบเบฑเบšเบญเบตเบ 4 เบญเบฒเบ—เบดเบ”.

เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบกเบตเบšเบฑเบ™เบซเบฒเบ›เบฐเป€เบžเบ”เบ™เบตเป‰ - เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ” CTE เปเบฅเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบญเปˆเบฒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบกเบฑเบ™. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, PostgreSQL เปเบกเปˆเบ™ "เบชเบฐเบซเบผเบฒเบ”" เปเบฅเบฐเบˆเบฐเบšเปเปˆเบญเปˆเบฒเบ™เบซเบเบฑเบ‡เป‚เบ”เบเบเบปเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบšเบฑเบ™เบ—เบถเบเบ—เปเบฒเบญเบดเบ”เบˆเบฒเบเบกเบฑเบ™, เปเบฅเบฐเป„เบ›เบซเบฒเบกเบฑเบ™เบซเบ™เบถเปˆเบ‡เบฎเป‰เบญเบเปเบฅเบฐเบ—เปเบฒเบญเบดเบ”เบˆเบฒเบ CTE เบ”เบฝเบงเบเบฑเบ™.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เปเบœเบ™เบเบฒเบ™เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆ - เบกเบฑเบ™เปเบ›เบ, เบžเบงเบเป€เบฎเบปเบฒเบกเบต 3 buffers (เบซเบ™เป‰เบฒเบ‚เปเป‰เบกเบนเบ™) "เบšเปเบฅเบดเป‚เบžเบ" เปƒเบ™ Seq Scan, 1 เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™ CTE Scan, เปเบฅเบฐเบญเบตเบ 2 เบญเบฑเบ™เปƒเบ™ CTE Scan เบ—เบตเบชเบญเบ‡. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบซเบผเบธเบšเบ—เบธเบเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰ 6, เปเบ•เปˆเบˆเบฒเบเป€เบกเบฑเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบญเปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆ 3! CTE Scan เบšเปเปˆเป„เบ”เป‰เบญเปˆเบฒเบ™เบซเบเบฑเบ‡เบˆเบฒเบเบ—เบธเบเบšเปˆเบญเบ™, เปเบ•เปˆเป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบœเบดเบ”เบžเบฒเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰!

เปƒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เป€เบ›เบฑเบ™โ€‹เบˆเบดเบ‡, เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ” 3 เบซเบ™เป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบˆเบฒเบ Seq Scan, เบ„เบฑเป‰เบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ” 1 เบ‚เปโ€‹เปƒเบซเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบเบ™ CTE เบ„เบฑเป‰เบ‡โ€‹เบ—เบต 1, เปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ„เบฑเป‰เบ‡โ€‹เบ—เบต 2, เปเบฅเบฐ 2 เบซเบผเบฒเบโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒ. 3 เปœเป‰เบฒเบ–เบทเบเบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบšเปเปˆเปเบกเปˆเบ™ 6.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบฅเบฐเบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰เป„เบ”เป‰เบ™เปเบฒเบžเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบœเบ™เบเบฒเบ™เบšเปเปˆเปเบกเปˆเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบญเบตเบเบ•เปเปˆเป„เบ›, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบŸ acyclic. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเปเบœเบ™เบงเบฒเบ”เปเบšเบšเบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆ "เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฒเบˆเบฒเบเบšเปˆเบญเบ™เบ—เปเบฒเบญเบดเบ”." เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡ CTE เบˆเบฒเบ pg_class, เปเบฅเบฐเป„เบ”เป‰เบฎเป‰เบญเบ‡เบ‚เปเป€เบญเบปเบฒเบกเบฑเบ™เบชเบญเบ‡เบ„เบฑเป‰เบ‡, เปเบฅเบฐเป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบชเบฒเบ‚เบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบญเบปเบฒเบกเบฑเบ™เบ„เบฑเป‰เบ‡เบ—เบต 2. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบเบฒเบ™เบญเปˆเบฒเบ™เบฅเบฒเบเบเบฒเบ™เบ—เบต 101 เปเบกเปˆเบ™เบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบเบเปˆเบงเบฒเบžเบฝเบ‡เปเบ•เปˆเบญเปˆเบฒเบ™เบฅเบฒเบเบเบฒเบ™เบ—เบต 1 เบˆเบฒเบเปเบ—เบฑเบšเป€เบฅเบฑเบ”.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบžเบงเบเป€เบฎเบปเบฒ exhaled เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ. เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป€เบงเบปเป‰เบฒโ€‹เบงเปˆเบฒ: โ€œเบšเบฑเบ”โ€‹เบ™เบตเป‰, Neo, เป€เบˆเบปเป‰เบฒโ€‹เบฎเบนเป‰ kung Fu! เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™เบซเบ™เป‰เบฒเบˆเปเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ”เบฝเบงเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบกเบฑเบ™เป„เบ”เป‰." [เบšเบปเบ”เบ„เบงเบฒเบก]

เบšเบฑเบ™เบ—เบถเบเบฅเบงเบก

เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ 1000 เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบซเบฒเบเปƒเบˆเป€เบญเบปเบฒเบเบฒเบ™เบšเบฑเบ™เป€เบ—เบปเบฒเบ—เบธเบ. เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฒเบเบฎเป‰เบญเบเป€เบŠเบตเบšเป€เบงเบต "เบชเบนเป‰เบฎเบปเบš", เปเบฅเบฐ "เบ„เบฑเบ”เบฅเบญเบ" เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เบšเปเปˆเบชเบฐเบ”เบงเบเบ—เบฑเบ‡เบซเบกเบปเบ”. เบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบเบฑเบšเบกเบฑเบ™เป€เบญเบ‡.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบกเบตเป‚เบกเบ”เบนเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบเปเบฒเบชเบฐเบ–เบดเบ•เบด, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ - เบ™เบตเป‰. เป‚เบกเบ”เบนเบ™ pg_stat_statements. เปเบ•เปˆเบฅเบฒเบงเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบฑเบ™เบกเบญเบš เปเบฒเบ เปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ”เบฝเบงเบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบžเบฒเบเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™ QueryIds เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ—เปเบฒเบญเบดเบ”เป€เบฎเบฑเบ” SET search_path = '01'; SELECT * FROM user LIMIT 1;เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ SET search_path = '02'; เปเบฅเบฐเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบฝเบงเบเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบชเบฐเบ–เบดเบ•เบดเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบ™เบตเป‰เบˆเบฐเบกเบตเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบเปเบฒเบชเบฐเบ–เบดเบ•เบดเบ—เบปเปˆเบงเป„เบ›เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡ profile เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เป‚เบ„เบ‡เบเบฒเบ™.

เบˆเบธเบ”เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฒเบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เปเบกเปˆเบ™ เบ‚เบฒเบ”เปเบœเบ™เบเบฒเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบšเปเปˆเบกเบตเปเบœเบ™เบเบฒเบ™, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบŠเป‰เบฒเบฅเบปเบ‡, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เปเบฅเบฐโ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบ - เบ‚เบฒเบ” "เบ„เบงเบฒเบกเบˆเบดเบ‡". เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก - เบšเปเปˆเบกเบต, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบฐเบ–เบดเบ•เบดเบฅเบงเบก. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบšเบ™เบตเป‰, เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบซเบผเบฒเบ.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ•เปเปˆเบชเบนเป‰เบเบฑเบšเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ‚เบฝเบ™ เบœเบนเป‰เป€เบเบฑเบš.

เบ•เบปเบงเป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบกเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ SSH, เบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบ›เบญเบ”เป„เบžเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเปƒเบŠเป‰เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™, เปเบฅเบฐ tail -F "เบเบถเบ”" เบเบฑเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ™เบตเป‰ เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš "เบšเปˆเบญเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ„เบงเบฒเบก" เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”, เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเป‰เบฒเบ‡. เบเบฒเบ™เป‚เบซเบผเบ”เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบซเบ™เป‰เบญเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบงเบดเป€เบ„เบฒเบฐเบซเบเบฑเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบฐเบ—เป‰เบญเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™.

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฝเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปƒเบ™ Node.js เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบชเบทเบšเบ•เปเปˆเบ‚เบฝเบ™เบ•เบปเบงเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบกเบฑเบ™. เปเบฅเบฐเป€เบ—เบเป‚เบ™เป‚เบฅเบเบตเบ™เบตเป‰เป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบชเบฐเบ”เบงเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ JavaScript เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบตเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญ, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบšเบฑเบ™เบ—เบถเบ. เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™ Node.js เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป€เบ›เบฑเบ™เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก backend เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ‡เปˆเบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปเบฅเบฐเปเบ™เปˆเบ™เบญเบ™เบเบฑเบšเบชเบฒเบเบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป†.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒ "เบเบทเบ”" เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบญเบ‡เบขเปˆเบฒเบ‡: เบ—เปเบฒเบญเบดเบ” "เบŸเบฑเบ‡" เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐเป€เบญเบปเบฒเบกเบฑเบ™เป„เบ›เบซเบฒเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡, เปเบฅเบฐเบ—เบตเบชเบญเบ‡เป€เบžเบทเปˆเบญเบ–เบฒเบกเบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบ›เบฑเบ™เป„เบฅเบเบฐ. "เปเบ•เปˆเบšเบฑเบ™เบ—เบถเบเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบ—เบตเปˆเบกเบต oid 123 เบ–เบทเบเบšเบฅเบฑเบญเบ," เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบซเบเบฑเบ‡เบเบฑเบšเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบฅเบฐเบกเบฑเบ™เบเปเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบ–เบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, "OID = 123 เปเบกเปˆเบ™เบซเบเบฑเบ‡?" เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ–เบฒเบกเป€เบ›เบฑเบ™เป„เบฅเบเบฐเป†เบเปˆเบฝเบงเบเบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

"เบกเบตเบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡, เบกเบตเบŠเบฐเบ™เบดเบ”เบ‚เบญเบ‡เป€เบœเบดเป‰เบ‡เบ„เป‰เบฒเบเบ„เบทเบŠเป‰เบฒเบ‡!.." เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฐเบšเบปเบšเบ™เบตเป‰เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒ 10 เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบšเบฒเบ‡เบšเบฑเบ™เบซเบฒเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš. เปเบ•เปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป„เบ•เบกเบฒเบ”เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบซเบ™เบถเปˆเบ‡เบฎเป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒ - เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบฅเบฐเบšเบปเบšเป€เบฎเบฑเบ”เบงเบฝเบ, เบ—เบธเบเบ„เบปเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™, เบ—เบธเบเบ„เบปเบ™เบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบ.

เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ™เบตเป‰โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹, เบเบฒเบ™โ€‹เป„เบซเบผโ€‹เบ‚เบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เปเบกเปˆเบ™โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เปƒเบซเบเปˆโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เป„เบซเบงโ€‹. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒ, เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš, เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เปƒเบŠเป‰ PostgreSQL เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™. เปเบฅเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป„เบงเบ—เบตเปˆเบˆเบฐ "เบ–เบญเบ" เบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™เบเบงเปˆเบฒเบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ COPY เบเบฑเบ‡โ€‹เป€เบ—เบทเปˆเบญ.

เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆ "เบ–เบญเบ" เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเปเบกเปˆเบ™เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบ—เป‰เป†. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ›เบฐเบกเบฒเบ™ 50k เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปƒเบ™เบซเบ™เบถเปˆเบ‡เบฎเป‰เบญเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบชเป‰เบฒเบ‡เบšเบฑเบ™เบ—เบถเบ 100-150GB เบ•เปเปˆเบกเบทเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡ "เบ•เบฑเบ”" เบžเบทเป‰เบ™เบ–เบฒเบ™.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ” เบเบฒเบ™โ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹เป‚เบ”เบโ€‹เบกเบทเป‰โ€‹, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ, เป‚เบ”เบเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบšเปเปˆเบกเบตเปƒเบœเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบกเบทเป‰. เบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบ™เบงเปƒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเปƒเบ™เบกเบทเป‰เบงเบฒเบ™เบ™เบตเป‰, เบ–เป‰เบฒเบ„เบทเบ™เบ™เบตเป‰เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเบญเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบซเบกเปˆ - เปเบฅเบฐเบชเบฐเบ–เบดเบ•เบดเปƒเบซเบกเปˆเบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเป‰เบง.

เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰ (เบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบš) เบซเบผเบฒเบ, เป„เบงเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เป‚เบ”เบเปƒเบŠเป‰ COPY. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆ COPYเป€เบžเบฒเบฐเบงเปˆเบฒเบฅเบฒเบงเป„เบงเบเบงเปˆเบฒ INSERT, เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เป„เบง.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบˆเบธเบ”เบ—เบตเบชเบฒเบก - เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡ เบ›เบฐเบ–เบดเป‰เบก triggers, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เปเบฅเบฐเบเบฐเปเบˆเบ•เปˆเบฒเบ‡เบ›เบฐเป€เบ—เบ”. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบŠเบทเปˆเบชเบฑเบ”เปƒเบ™เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เปƒเบ”เป†. เป€เบžเบฒเบฐเบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเบ„เบนเปˆเบ‚เบญเบ‡ FKs, เปเบฅเบฐเบ—เปˆเบฒเบ™เป€เบงเบปเป‰เบฒเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบงเปˆเบฒ "เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เป‚เบ”เบ FK, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฑเบšเบเบธเปˆเบกเบšเบฑเบ™เบ—เบถเบ," เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เปƒเบชเปˆเบกเบฑเบ™, PostgreSQL เบšเปเปˆโ€‹เบกเบตโ€‹เบซเบเบฑเบ‡โ€‹เป€เบซเบผเบทเบญโ€‹เปเบ•เปˆโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบญเบปเบฒโ€‹เบกเบฑเบ™โ€‹เปเบฅเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบกเบฑเบ™โ€‹เบŠเบทเปˆโ€‹เบชเบฑเบ”โ€‹ SELECT 1 FROM master_fk1_table WHERE ... เบเบฑเบšเบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบกเปƒเบชเปˆ - เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบšเบฑเบ™เบ—เบถเบเบ™เบตเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰ "เบ—เปเบฒเบฅเบฒเบ" เบฅเบฐเบซเบฑเบ”เบ•เปˆเบฒเบ‡เบ›เบฐเป€เบ—เบ”เบ”เป‰เบงเบเบเบฒเบ™เปƒเบชเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบšเบฑเบ™เบ—เบถเบเบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบฅเบฐเบ”เบฑเบ”เบชเบฐเบ™เบตเบ‚เบญเบ‡เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฑเบ™เบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡. เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เบตเป‰เป€เบฅเบตเบ - เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบซเป‰เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบฅเบฐเป„เบงเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบˆเบฐเป„เบงเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เป‚เบซเบผเบ”เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ FK - เบฅเบปเบ‡!

เบˆเบธเบ”เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบฅเบฐ hashing. เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ - เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เบชเบฐเบ”เบงเบเปƒเบ™เบ—เบฑเบ™เบ—เบต, เป€เบกเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบกเบฒเบฎเบญเบ”, เป€เบฎเบฑเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป€เบกเบฑเบ”. "เบšเบงเบเบซเบ™เบถเปˆเบ‡" เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบเบฐเบ•เบธเป‰เบ™. เบ”เบต, เบกเบฑเบ™เบชเบฐเบ”เบงเบ, เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบ”เบตเบ„เบทเบเบฑเบ™ - เป€เบˆเบปเป‰เบฒเปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบเบซเบ™เบถเปˆเบ‡, เปเบ•เปˆเบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบญเปˆเบฒเบ™เปเบฅเบฐเบ‚เบฝเบ™เบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบญเบทเปˆเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบญเปˆเบฒเบ™เปเบฅเบฐเบ‚เบฝเบ™, เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เป€เบฎเบฑเบ”เบกเบฑเบ™เบ—เบธเบเบ„เบฑเป‰เบ‡.

เบ•เบญเบ™เบ™เบตเป‰เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ™เบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเป„เบ”เป‰เบœเปˆเบฒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบชเบฐเป€เบžเบฒเบฐ: +1, +1, +1, ..., +1. เปเบฅเบฐเบ—เปˆเบฒเบ™, เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เบตเป‰ - เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบฑเบ‡เบซเบกเบปเบ” เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเปƒเบ™เบ•เบปเบงเป€เบเบฑเบš เปเบฅเบฐเบชเบปเปˆเบ‡เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบซเบ™เบถเปˆเบ‡เป„เบ› +10.

เปเบกเปˆเบ™เปเบฅเป‰เบง, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบšเบฒเบ‡เบšเบฑเบ™เบซเบฒ, เบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เปเบšเบšเบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐ "เปเบ•เบเปเบเบ", เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เป€เบเบทเบญเบšเบšเปเปˆเป€เบ›เบฑเบ™เบˆเบดเบ‡ - เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ›เบปเบเบเบฐเบ•เบด, เบกเบฑเบ™เบกเบตเบซเบกเปเป‰เป„เบŸเปƒเบ™เบ•เบปเบงเบ„เบงเบšเบ„เบธเบก, เบ—เปˆเบฒเบ™เบกเบตเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ, เบšเบฑเบ™เบ—เบถเบเปƒเบ™. เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ ... เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบšเปเปˆเปเบกเปˆเบ™เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒ. เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบเบฒเบ™เปเบฅเปˆเบ™ triggers / FK เปเบกเปˆเบ™เบšเปเปˆเบ„เบธเป‰เบกเบ„เปˆเบฒเบเบฑเบšเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบกเบฑเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš hashing. เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบšเบดเบ™เป„เบ›เบซเบฒเบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบˆเบฒเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบ‚เบฝเบ™เบกเบฑเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเบญเบเบกเบฑเบ™เบเบฑเบšเบ—เบธเบเป†เบ„เบปเบ™. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบตเบˆเบปเบ™เบเปˆเบงเบฒ, เปƒเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ, เบ„เบปเบ™เบ—เบตเบชเบญเบ‡เบกเบฒเบซเบฒเบ—เปˆเบฒเบ™เบœเบนเป‰เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™ - เปเบฅเบฐเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเบเบฑเบ”, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบ”เบต. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบญเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ ID เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ (เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™), เบกเบฑเบ™เบเปเปˆเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเป€เบฅเบตเบ”เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ MD5 เบˆเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบก - เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เปเบœเบ™, เปเบกเปˆเปเบšเบš, ... เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เป„เบฅเปˆเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ”เป‰เบฒเบ™เบœเบนเป‰เบฅเบงเบšเบฅเบงเบก, เปเบฅเบฐ "เบ–เบญเบ" ID เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡ MD5 เปเบฅเบฐเบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบเบฑเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบ•เปˆเป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ”เบฑเบ”เปเบ›เบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡.

เป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปเบ™เบงเปƒเบ”? เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”, เบžเบงเบเป€เบฎเบปเบฒเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบซเบผเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เบฑเบ”เบฅเบญเบเบกเบฑเบ™ - เบ—เปเบฒเบญเบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบตเบชเบญเบ‡, เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบตเบชเบฒเบก ... เบกเบฑเบ™เบšเปเปˆเบชเบฐเบ”เบงเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเบ‚เบฝเบ™เบซเบ™เบถเปˆเบ‡เบ™เป‰เปเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบชเบฒเบกเบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบ•เบฒเบกเบฅเบณเบ”เบฑเบš. เบšเปเปˆเบžเปเปƒเบˆ. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป„เบงเบ‚เบถเป‰เบ™เบšเป? เบชเบฒโ€‹เบกเบฒเบ”!

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบ—เปเบฒเบฅเบฒเบเบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™. เบกเบฑเบ™ turns เปƒเบซเป‰ เป€เบซเบฑเบ™ เบงเปˆเบฒ เบžเบงเบ เป€เบฎเบปเบฒ เบกเบต เบ„เบงเบฒเบก เบœเบดเบ” เบžเบฒเบ” , เบเบฒเบ™ เบฎเป‰เบญเบ‡ เบ‚เป , เปเบกเปˆ เปเบšเบš , เบ•เบฑเบ™ , ... เบšเบดเบ™ เปƒเบ™ เบเบฐ เบ—เบนเป‰ เปเบเบ เบ•เปˆเบฒเบ‡ เบซเบฒเบ - เปเบฅเบฐ เบžเบงเบ เป€เบฎเบปเบฒ เบ‚เบฝเบ™ เบกเบฑเบ™ เบ—เบฑเบ‡ เบซเบกเบปเบ” เปƒเบ™ เบ‚เบฐ เบซเบ™เบฒเบ™ . เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰ เบฎเบฑเบเบชเบฒเบŠเปˆเบญเบ‡เบ—เบฒเบ‡ COPY เป€เบ›เบตเบ”เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบ•เปˆเบฅเบฐเบ„เบปเบ™.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบขเบนเปˆเบ—เบตเปˆเบœเบนเป‰เป€เบเบฑเบš เบกเบตเบเบฐเปเบชเบขเบนเปˆเบชเบฐเป€เปเบต, เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™. เปเบ•เปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบซเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰, เปเบฅเบฐเบšเบฒเบ‡เบ„เบปเบ™เบšเปเปˆเป„เบ”เป‰เบ•เบดเบ”เบขเบนเปˆเบฅเปเบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบ–เบทเบเบ‚เบฝเบ™, เบชเบณเป€เบ™เบปเบฒเบ•เป‰เบญเบ‡เบ–เบทเบเบฅเบปเบšเบเบงเบ™เปƒเบ™เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเปƒเบ”เปœเบถเปˆเบ‡. เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบ›เบฐเบกเบฒเบ™ 100ms - เบžเบงเบเป€เบฎเบปเบฒเบ›เบดเบ”เบกเบฑเบ™เปเบฅเบฐเบ—เบฑเบ™เบ—เบตเป€เบ›เบตเบ”เบกเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฝเบงเบเบฑเบ™. เปเบฅเบฐเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เป„เบซเบผเบขเปˆเบฒเบ‡เบžเบฝเบ‡เบžเปเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบšเบฒเบ‡เบˆเบธเบ”เบชเบนเบ‡เบชเบธเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบเปเปˆเบฅเบงเบกเป€เบ–เบดเบ‡เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเป€เบซเบฑเบ™เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเป‚เบ›เป„เบŸเบเบฒเบ™เป‚เบซเบผเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปƒเบ”เป†, เป€เบกเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ›เบฑเบ™เบŠเบธเบ”, เปเบกเปˆเบ™เบŠเบปเปˆเบง. เบ„เบงเบฒเบกเบŠเบปเปˆเบงเบฎเป‰เบฒเบเบ„เบฅเบฒเบชเบชเบดเบเปเบกเปˆเบ™ INSERT ... VALUES เปเบฅเบฐเบญเบตเบ 1000 เบšเบฑเบ™เบ—เบถเบ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปƒเบ™เบˆเบธเบ”เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบกเบตเบˆเบธเบ”เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เปƒเบ™เบชเบทเปˆ, เปเบฅเบฐเบ—เบธเบเบ„เบปเบ™เบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบฅเบปเบ‡เปƒเบ™เปเบœเปˆเบ™เบˆเบฐเบฅเปเบ–เป‰เบฒ.

เป€เบžเบทเปˆเบญเบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบดเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบฅเบงเบšเบฅเบงเบกเบชเบดเปˆเบ‡เปƒเบ”, เบšเปเปˆ buffer เป€เบฅเบตเบ. เปเบฅเบฐเบ–เป‰เบฒ buffering เบเบฑเบš disk เป€เบเบตเบ”เบ‚เบถเป‰เบ™ (เป‚เบŠเบเบ”เบต, Stream API เปƒเบ™ Node.js เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบŠเบญเบเบซเบฒ) - เป€เบฅเบทเปˆเบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ™เบตเป‰. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบฑเบ™เบšเปเปˆเป€เบชเบเบ„เปˆเบฒเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ‚เบฝเบ™เบกเบฑเบ™เบˆเบฒเบเบ„เบดเบงเบ—เบตเปˆเบชเบฐเบชเบปเบก. เปเบฅเบฐเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เบšเปเปˆเบซเบงเปˆเบฒเบ‡, เป€เบญเบปเบฒเบญเบฑเบ™เบ•เปเปˆเป„เบ›เบ—เบตเปˆเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเบˆเบฒเบเบชเบฐเบฅเบญเบเบ™เป‰เปเบฒเปเบฅเบฐเบ‚เบฝเบ™เปƒเบชเปˆเบกเบฑเบ™.

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเปเบ™เบฐเบ™เปเบฒเบงเบดเบ—เบตเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ›เบฐเบกเบฒเบ™ 4K write ops, เปเบฅเบฐเบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบธเบ”เบฅเบปเบ‡เบเบฒเบ™เป‚เบซเบผเบ” 4 เป€เบ—เบปเปˆเบฒ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบญเบตเบ 6 เป€เบ—เบปเปˆเบฒเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ•เบดเบ”เบ•เบฒเบกเปƒเบซเบกเปˆ - เป€เบ–เบดเบ‡ 100MB/s. เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบเบชเปเบฒเบฅเบฑเบš 3 เป€เบ”เบทเบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปƒเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบ›เบฐเบกเบฒเบ™ 10-15TB, เบซเบงเบฑเบ‡เบงเปˆเบฒเปƒเบ™เบชเบฒเบกเป€เบ”เบทเบญเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฐเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเปƒเบ”เป†.

เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเบฑเบ™เบซเบฒ

เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบ”เบต, เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡, เปเบ•เปˆเบšเปเปˆเบžเบฝเบ‡เบžเป - เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบฅเป‰เบฒเบ™เบ‚เบญเบ‡เปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ•เปเปˆเบกเบทเป‰.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบ•เปˆเบซเบผเบฒเบเบฅเป‰เบฒเบ™เบ„เบปเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เป„เบ”เป‰, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ” เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” "เบ™เป‰เบญเบเบเบงเปˆเบฒ". เปเบฅเบฐ, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบˆเบฑเบ”เบฅเบฐเบšเบฝเบš "เบ™เป‰เบญเบ" เบ™เบตเป‰เปเบ™เบงเปƒเบ”.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบชเบฒเบกเบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™:

  • เบœเบนเป‰เบ—เบตเปˆ เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰
    เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบˆเบฒเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ”เบ—เบตเปˆเบกเบฑเบ™ "เบกเบฒเบฎเบญเบ”": เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบงเบฑเบš, backend, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เบซเบผเบทเบชเบดเปˆเบ‡เบญเบทเปˆเบ™.
  • เบšเปˆเบญเบ™เบ—เบตเปˆ เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™
    เบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบชเบฐเป€เบžเบฒเบฐเปƒเบ”? เป€เบžเบฒเบฐเบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบฒเบเบญเบฑเบ™เบžเบฒเบเปƒเบ•เป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡ "เป‚เบ‡เปˆ" (เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ "disk เป€เบ™เบปเปˆเบฒเป€เบ›เบทเปˆเบญเบ", "เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบฎเบปเปˆเบง", เบšเบฒเบ‡เบšเบฑเบ™เบซเบฒเบญเบทเปˆเบ™เป†), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบเป‰เป„เบ‚เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ.
  • เบงเบดเบ—เบตเบเบฒเบ™ เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบญเบญเบเบ”เป‰เบงเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบ—เบฒเบ‡ เปœเบถเปˆเบ‡

เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆ "เปƒเบœ" เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ - เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบก: SET application_name = '{bl-host}:{bl-method}'; โ€” เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบปเปˆเบ‡โ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฒเบšโ€‹เบ•เบฒเบกโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™โ€‹เบ—เบธโ€‹เบฅเบฐโ€‹เบเบดเบ”โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เปเบกเปˆเบ™โ€‹เบกเบฒโ€‹, เปเบฅเบฐโ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบซเบผเบทโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบตเปˆโ€‹เบฅเบดโ€‹เป€เบฅเบตเปˆเบกโ€‹เบกเบฑเบ™โ€‹.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบœเปˆเบฒเบ™ "เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡" เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบกเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบซเบฒเบšเบฑเบ™เบ—เบถเบ - เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›. log_line_prefix = ' %m [%p:%v] [%d] %r %a'. เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบชเบปเบ™เปƒเบˆ, เบšเบฒเบ‡เบ—เบต เป€เบšเบดเปˆเบ‡เปƒเบ™เบ„เบนเปˆเบกเบทเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”. เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบ:

  • ะฒั€ะตะผั
  • เบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ เปเบฅเบฐเบ—เบธเบฅเบฐเบเบณ
  • เบŠเบทเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™
  • IP เบ‚เบญเบ‡เบšเบธเบเบ„เบปเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰
  • เปเบฅเบฐเบŠเบทเปˆเบงเบดเบ—เบตเบเบฒเบ™

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบซเบ™เบถเปˆเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบกเบฑเบ™เบšเปเปˆเป€เบฅเบทเป‰เบญเบเป†เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบซเบ™เบถเปˆเบ‡ screws เป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™. เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบ„เบทเบเบฑเบ™, เป€เบšเบดเปˆเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ”เบ™เบถเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบฑเบ” "เบซเบ™เบถเปˆเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ - เบกเบทเป‰เบซเบ™เบถเปˆเบ‡" เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปƒเบ”เป†.

เบชเปˆเบงเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™ "เบ•เบปเบงเบขเปˆเบฒเบ‡" - เบฎเบนเบšเปเบšเบšเบซเบเปเป‰เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปเบœเบ™เบเบฒเบ™, เบเบฒเบ™เป€เบเบฑเบšเบเบนเป‰เบ‚เบญเบ‡เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบ•เบปเบงเป€เบฅเบเบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบฒเบ™เบ•เบฑเบ”เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบซเบผเบทเบงเบดเบ—เบตเบเบฒเบ™, เปเบฅเบฐเบเบฒเบ™เบ•เบฑเบ”เบ—เบตเบชเบฒเบกเปเบกเปˆเบ™ node เปเบœเบ™เบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบšเบฑเบ™เบซเบฒ.

เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบเป‰เบฒเบเบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบฐเป€เบžเบฒเบฐเป„เบ›เบซเบฒเปเบกเปˆเปเบšเบš, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบชเบญเบ‡เบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™:

  • เบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบซเบผเบฒเบเปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ
    เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เปเปˆเป„เบ›เบญเบตเบเปเบฅเป‰เบงเป‚เบ”เบเบซเบฅเบฒเบเบžเบฑเบ™เบ„เปเบฒเบ–เบฒเบกเบซเบผเบทเปเบœเบ™เบเบฒเบ™, เปเบ•เปˆเป‚เบ”เบเบซเบฅเบฒเบเบชเบดเบšเปเบกเปˆเปเบšเบš.
  • เป€เบชเบฑเป‰เบ™เป€เบงเบฅเบฒ
    เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป‚เบ”เบเบเบฒเบ™เบชเบฐเบซเบผเบธเบš "เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡" เบžเบฒเบเปƒเบ™เบšเบฒเบ‡เบชเปˆเบงเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบฎเบนเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบกเบทเป‰. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบฎเบนเบšเปเบšเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡, เปเบ•เปˆเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบกเบทเป‰, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ” - เปƒเบœเป€เบ›เบฑเบ™เบชเบฒเป€เบซเบ”เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡, เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบšเปเปˆเบ„เบงเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบ, เป€เบซเบฑเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ”เบฝเบง

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบเบฑเบ”เบˆเบฒเบเปเบœเบ™เบเบฒเบ™: เบฎเบนเบšเปเบšเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”, เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบชเบฐเป€เบฅเปˆเบ, เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบญเปˆเบฒเบ™เบˆเบฒเบเปเบœเปˆเบ™, เปเบฅเบฐเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ ...

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบกเบฒเบฎเบญเบ”เบซเบ™เป‰เบฒเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเปเบฒเบฅเบฑเบšเป€เบˆเบปเป‰เบฒเบžเบฒเบš, เป€เบšเบดเปˆเบ‡ - เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบฅเบตเปˆเบกเบญเปˆเบฒเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เปเบœเปˆเบ™. เปเบœเปˆเบ™เปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบกเบฑเบ™เป„เบ”เป‰ - เปƒเบœเบญเปˆเบฒเบ™เบˆเบฒเบเบกเบฑเบ™?

เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเบ–เบฑเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเปเบฅเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบซเบเบฑเบ‡เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ - เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบซเบผเบทเปเบœเปˆเบ™, เบซเบผเบทเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ” ... เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบฎเบฝเบ‡เบกเบฑเบ™, เป€เบšเบดเปˆเบ‡ "เป€เบ—เบดเบ‡", เปเบเป‰เป„เบ‚เบกเบฑเบ™เปเบฅเบฐ. เป€เบ›เบตเบ”เบ•เบปเบงเป€เบงเบตเบŠเบฑเบ™เปƒเปเปˆเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.
[เบงเบดโ€‹เบ”เบตโ€‹เป‚เบญโ€‹เบšเบฑเบ™โ€‹เบเบฒเบโ€‹]

เปเบฅเบฐเบ—เบฑเบ™เบ—เบตเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเปเบกเปˆเปเบšเบšเบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป€เบŠเบฑเปˆเบ™: SELECT * FROM users WHERE login = 'Vasya'. Frontend, backend, processing... เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบปเบ‡เป„เบชเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบˆเบฐเบญเปˆเบฒเบ™เบœเบนเป‰เปƒเบŠเป‰เบ–เป‰เบฒเบฅเบฒเบงเบšเปเปˆเบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบฅเบฒเบง.

เบงเบดเบ—เบตเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ—เบฑเบ™เบ—เบตเบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบซเบเบฑเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, frontend เปเบกเปˆเบ™เบ™เบตเป‰, เบ™เบตเป‰, เบ™เบตเป‰, เปเบฅเบฐเบ™เบตเป‰เบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡ (เป„เบฅเบเบฐเป€เบงเบฅเบฒเบŠเปˆเบงเบ). เปเบฅเบฐเบ„เปเบฒเบ–เบฒเบกเบเปเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ—เบฑเบ™เบ—เบต: เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบงเบฝเบเบ‚เบญเบ‡ frontend เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡ ...

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ‚เบฒเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก เบชเบฐโ€‹เบ–เบดโ€‹เบ•เบดโ€‹เป‚เบ”เบโ€‹เบ‚เปเป‰โ€‹เปเบœเบ™โ€‹เบเบฒเบ™โ€‹. เบžเบงเบเป€เบฎเบปเบฒเปเบเบเบญเบญเบเบˆเบฒเบเปเบœเบ™เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบ”เบฒเบ‚เปเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เบญเปˆเบฒเบ™ / เบ‚เบฝเบ™เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเบ”เบฑเบ”เบชเบฐเบ™เบตเบซเบผเบทเบšเปเปˆ). เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบกเบตเบžเบฝเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบšเบฎเบนเบšเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ - เป‚เบ™เบ”เบ™เบตเป‰เป€เบญเบปเบฒเบกเบฒเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบเบšเบฑเบ™เบ—เบถเบ?, เปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เบ„เบปเบ™เบ—เบตเปˆเบ–เบทเบเบเบปเบเป€เบฅเบตเบ (เปเบ–เบงเบ—เบตเปˆเบ–เบทเบเบฅเบปเบšเบญเบญเบเป‚เบ”เบเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡).

เบ—เปˆเบฒเบ™เบšเปเปˆเบกเบตเบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเปƒเบ™เปเบœเปˆเบ™, เบ—เปˆเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบกเบฑเบ™, เบกเบฑเบ™เบšเบดเบ™เบœเปˆเบฒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบต, เบ•เบปเบเบขเบนเปˆเปƒเบ™ Seq Scan ... เบ—เปˆเบฒเบ™เป„เบ”เป‰เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบšเบฑเบ™เบ—เบถเบเบเบปเบเป€เบงเบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ 100M เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ•เปเปˆเบกเบทเป‰? เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบกเป‰เบงเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเบšเป?

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เป‚เบ”เบเป„เบ”เป‰เบงเบดเป€เบ„เบฒเบฐเบ—เบธเบเปเบœเบ™เบเบฒเบ™ node เป‚เบ”เบ node, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบตเบšเบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ›เบปเบเบเบฐเบ•เบดเปƒเบ™เปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบชเบซเบผเบฒเบ. เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเบ”เบตเบ—เบตเปˆเบˆเบฐเบšเบญเบเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบงเปˆเบฒ: "เป€เบžเบทเปˆเบญเบ™, เบ—เบตเปˆเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบ—เปเบฒเบญเบดเบ”เบญเปˆเบฒเบ™เป‚เบ”เบเบ”เบฑเบ”เบชเบฐเบ™เบต, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฑเบ”เบฅเบฝเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบฑเบ”เบญเบญเบ" - เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบกเบตเบšเบฑเบ™เบ—เบถเบเบซเบ™เบถเปˆเบ‡.

เบ—เบธเบเป†เบ„เบปเบ™เบ—เบตเปˆเบ‚เบฝเบ™เปเบšเบšเบชเบญเบšเบ–เบฒเบกเบญเบฒเบ”เบˆเบฐเบžเบปเบšเบฎเบนเบšเปเบšเบšเบ™เบตเป‰: "เปƒเบซเป‰เบ‚เป‰เบญเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบธเบ”เบ—เป‰เบฒเบเบชเปเบฒเบฅเบฑเบš Vasya, เบงเบฑเบ™เบ—เบตเบ‚เบญเบ‡เบกเบฑเบ™." เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบกเบตเบ”เบฑเบ”เบชเบฐเบ™เบตเบ•เบฒเบกเบงเบฑเบ™เบ—เบต, เบซเบผเบทเบšเปเปˆเบกเบตเบงเบฑเบ™เบ—เบตเบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐ. เบเป‰เบฒเบงเปƒเบชเปˆ "rake" เบ”เบฝเบงเบเบฑเบ™.

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ "rake" - เบชเบฐเบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบšเปเปˆเบšเบญเบเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบงเปˆเบฒเบฅเบฒเบงเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เปเบœเบ™เบเบฒเบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบžเป‰เบญเบกเบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบšเบญเบเบฅเบฒเบงเบ—เบฑเบ™เบ—เบตเบงเปˆเบฒ: "เป€เบˆเบปเป‰เบฒเบกเบตเบšเบฑเบ™เบซเบฒเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเปเบเป‰เป„เบ‚เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰เปเบฅเบฐเบ—เบฒเบ‡เบ™เบฑเป‰เบ™."

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบˆเปเบฒเบ™เบงเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบต.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก PostgreSQL. Kirill Borovikov (เป€เบ—เบ™เป€เบŠเบต)

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™