Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° OrioleDB Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΡΠΎ API, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° Π΄ΠΎΡΡΡΠΏ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡΡΠ° Π΄ΠΎ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π² PostgreSQL (Table/Index Access Method (AM) API), ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡ Π° Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅. ΠΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° ΡΠ°ΠΊΠΎΠ²Π° API Π² PostgreSQL 12, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ²Π° API ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΉ-ΡΡΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ½ΠΈ Π΄Π²ΠΈΠΆΠ΅ΡΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° PostgreSQL ΡΠ°:
- ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° MVCC, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π° Π±Π°Π·Π° Π½Π° ΠΆΡΡΠ½Π°Π»Π° UNDO.
- ΠΠ½Π΄Π΅ΠΊΡΠ½ΠΎ-ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡΡ Π½Π΅ Π΅ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠΊΠΎΡΡΠ²Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡΡΠ°, Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°.
ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π² API Table/Index AM Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° MVCC, ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ OrioleDB, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΎ Ρ ΡΠ΅Π» Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° PostgreSQL. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ Π·Π° ΠΏΡΠ»Π½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π½Π° OrioleDB Ρ PostgreSQL ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π° Π½Π° PostgreSQL, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ API Table AM.
API Table AM Π½Π΅ Π½Π°Π»Π°Π³Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π°ΡΠΈΠ½Π° Π½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° MVCC. ΠΡΠ΅ ΠΏΠ°ΠΊ, API Table AM ΠΈ API Index AM ΠΏΡΠ°Π²ΡΡ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Π²ΡΠ΅ΠΊΠΈ TID (Tuple/row Identifier) ΠΈΠ»ΠΈ ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ° ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ, ΠΈΠ»ΠΈ Π½Π΅ ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ° ΠΈΠ·ΠΎΠ±ΡΠΎ. ΠΠΎΡΠΈ Π°ΠΊΠΎ Index AM ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ TID (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, GIN), Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.

Π’ΠΎΠ·ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π±Π΅ΡΠ΅ ΠΊΡΠΈΡΠΈΠΊΡΠ²Π°Π½ Π·Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΡΠΎΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ (βwrite amplificationβ) β Π°ΠΊΠΎ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π΅Π΄ΠΈΠ½ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡΠ°Π½ Π°ΡΡΠΈΠ±ΡΡ, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π²ΡΠ΅ΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°. ΠΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° ΠΆΡΡΠ½Π°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ UNDO ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π΄ΡΡΠ³ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π±Π΅Π· βΡΡΠΈΠ»Π²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠ°β (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ WARM), Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΈ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’Π°Π±Π»ΠΈΡΠ° AM, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° UNDO, Π½Π΅ Π½Π°ΡΡΡΠ°Π΅Ρ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ HOT (Heap-Only Tuples), Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΠΎΠΊ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ UNDO ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΡΡ ΠΆΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎ ΠΌΠ½Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠΎΠ², ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ°Π²Π΄Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π’Π°Π±Π»ΠΈΡΡ AM.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ API:
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ΅Π΄Π° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° βΠ²ΡΠΈΡΠΊΠΎ ΠΈΠ»ΠΈ Π½ΠΈΡΠΎβ.
- ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ Π² API Index AM Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΌΠ°ΡΡΠΎΠ²ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ambulkdelete ΠΈ amvacuumcleanup. ΠΠΎΠΏΡΡΠΊΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ API ΠΏΡΠΈΠ²Π΅Π»Π° Π±Ρ ΠΊ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΡΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, API Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ TID, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡ Π²ΡΠ΅.
- ΠΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΡΠ°Ρ ΠΊΡΠΌ ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ Π½Π° Π±Π»ΠΎΠΊΠ° (32 Π±ΠΈΡΠ°) ΠΈ Π½ΠΎΠΌΠ΅Ρ Π½Π°offset (16 Π±ΠΈΡΠ°). Π ΡΠ°ΠΌΠΎ 11 Π±ΠΈΡΠ° Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π·Π° offset ΠΌΠΎΠ³Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π΄Π°Ρ ΠΎΡ TID ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° MVCC ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠΎΠ²Π°Ρ (payload) Π·Π°Π΅Π΄Π½ΠΎ Ρ TID. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² OrioleDB Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π±ΠΈΡΠ° Π·Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ βdelete-markingβ ΠΈΠ»ΠΈ ΡΡΠ»Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅:
ΠΠΎΠ΄Ρ ΠΎΠ΄ 1: API Index AM ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ MVCC.
ΠΠΎΠΊΠ°ΡΠΎ Table AM ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° MVCC, Index AM ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° MVCC, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠΎΠ²Π°Ρ (payload) Π·Π°Π΅Π΄Π½ΠΎ Ρ TID, ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΡΠΎΡΠΊΠΎΠ²ΠΎ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ ΠΈ Π΄ΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΡΠΎΡΠΊΠΎΠ²Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (Π°ΠΊΠΎ TID Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠΎΠ²Π°Ρ β ΠΌΠΎΠΆΠ΅). ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠΈ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π΄Π° ΡΠΎΡΠ°Ρ ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ TID, ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π½Π° API, ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ ΠΏΡΠΈ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΡΡΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΡ ΠΎΡ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅.
ΠΠΎΠ΄Ρ ΠΎΠ΄ 2: ΠΠ½Π΄Π΅ΠΊΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ MVCC.
ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΡΠ° Π±ΠΈ Π±ΠΈΠ»Π° Π΄Π° ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠΈ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ MVCC. Π’ΠΎΠ΅ΡΡ βexecutorβ (ΠΈΠ»ΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Table AM) ΠΏΡΠΎΡΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ insert() ΠΈ delete() Π² Index AM, Π΄ΠΎΠΊΠ°ΡΠΎ Index AM ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° MVCC. Π’ΠΎΠ²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π±ΠΈ ΠΎΠΏΡΠΎΡΡΠΈΠ»ΠΎ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ°ΠΌΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ (index-only). ΠΠΎΡΠΈ ΡΠ΅Π»ΠΈΡΡ Table AM Π² ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ Π±ΠΈ ΠΌΠΎΠ³ΡΠ» Π΄Π° ΡΡΠ°Π½Π΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΡΠ»ΠΎΠΉ, ΡΡ Ρ ΡΠ°Π½ΡΠ²Π°Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
ΠΠ° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ. Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ 2 ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΎΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ 11 ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡ "A" Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ "B". ΠΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° "A" Π΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ xmax == 11, Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° "B" Π΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ xmin == 11. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΊΠ°Π½ΠΈΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡ 2 ΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΠΌΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠΈ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ MVCC Π±Π΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ° (heap). Π‘ΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ 2 ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΡΠΏΡΠΈΠ½Π°.

ΠΡΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² API ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅, Π΅Π΄Π²Π° Π»ΠΈ ΡΠ΅ ΡΡΠΏΠ΅Π΅ΠΌ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° Π°Π΄Π°ΠΏΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ-ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π° Π΅Π΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ B-tree, ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ B-tree Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° MVCC Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π½Π° Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π΄ΡΠ»ΠΆΠΈΠ½Π°.

Π’Π°ΠΊΠ° ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠ°Π·Π³Π»Π΅Π΄Π° Π½Π΅ ΡΠ°ΠΌΠΎ API Table AM, Π½ΠΎ ΠΈ API Index AM, ΠΊΠΎΠΉΡΠΎ Π²ΡΡΠ½ΠΎ Π΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π» ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Π½Π° PostgreSQL ΠΏΡΠ΅Π· Π³ΠΎΠ΄ΠΈΠ½ΠΈΡΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° Index AM Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ»ΠΎΠΉ ΠΈ ΡΠ»ΠΎΠΉ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Π’Π°Π·ΠΈ ΠΏΡΠ΅ΠΎΡΠΌΠΈΡΠ»Π΅Π½Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° PostgreSQL Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
