ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· SQLite 3.45, Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΠΉ Π‘Π£ΠΠ, ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΠΎΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΠ΄ SQLite ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ (public domain), Ρ.Π΅. ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΈ Π±Π΅Π·Π²ΠΎΠ·ΠΌΠ΅Π·Π΄Π½ΠΎ Π² Π»ΡΠ±ΡΡ ΡΠ΅Π»ΡΡ . Π€ΠΈΠ½Π°Π½ΡΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² SQLite ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠΎΡΡΠΈΡΠΌ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΎΠ΄ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ Bentley, Bloomberg, Expensify ΠΈ Navigation Data Standard.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
- ΠΡΠ΅ SQL-ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ JSON ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π½Π° Π½ΠΎΠ²ΡΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°Π·Π±ΠΎΡΠ° JSONB, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΠ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ JSON. ΠΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΎΡΠΌΠΈΡΡΡΡΠΈΡ JSON, ΡΠ΅ΠΏΠ΅ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ JSONB Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ. Π ΡΡΠ½ΠΊΡΠΈΡ json_valid() Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π±ΠΈΡΠΎΠ²ΡΡ ΠΌΠ°ΡΠΊΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ JSON (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ 0x04 ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ·Π½Π°Π½ Π±Π»ΠΎΠ± JSONB, ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ 0x01 ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ JSON Π² ΡΠΎΡΠΌΠ°ΡΠ΅ RFC-8259, Π° ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ 0x05 ΠΎΠ±Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°).
- Π Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ FTS5, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠΏΡΠΈΡ tokendata, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΎΡΡ.
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ SQLITE_DIRECT_OVERFLOW_READ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ overflow-ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ b-tree, ΡΠΈΡΠ°ΡΡΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° Π½Π°ΠΏΡΡΠΌΡΡ, ΠΌΠΈΠ½ΡΡ ΠΊΡΡ. ΠΠ»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ «-DSQLITE_DIRECT_OVERFLOW_READ=0».
- Π ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ (transitive constraint) ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ·Π½Π°Π½Ρ Π½ΠΈΠ·ΠΊΠΎΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ANALYZE.
- Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ UTF-8 Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Windows. ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ CLI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ² «.dump» ΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ «.dbconfig defensive off» ΠΈ «.dbconfig dqs_dll on».
- Π ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ SQL-ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SQLITE_RESULT_SUBTYPE, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ sqlite3_result_subtype() Π΄Π»Ρ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π² ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ
ΡΠ±ΠΎΡΠΊΠ°Ρ
SQLite Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ — WAL2 («PRAGMA journal_mode = wal2»), ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π²Π° wal-ΡΠ°ΠΉΠ»Π° ( «database-wal» ΠΈ «database-wal2») Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½ΡΡ
Π² ΠΠ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
Π΄Π°Π½Π½ΡΡ
Π² ΠΏΠ΅ΡΠ²ΡΠΉ wal-ΡΠ°ΠΉΠ». ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ wal-ΡΠ°ΠΉΠ» Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΠΏΠΈΡΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠ». ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠΎΡΠΎΠΉ wal-ΡΠ°ΠΉΠ», ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (checkpoint) ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΎΡΠΎΠΉ wal-ΡΠ°ΠΉΠ» Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ Ρ.ΠΏ., ΡΡΠΎ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½Π΅ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠΌ ΡΠ°Π·ΡΠ°ΡΡΠ°Π½ΠΈΠ΅ΠΌ wal-ΡΠ°ΠΉΠ»Π° Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ
, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ»Π³ΠΎ Π½Π΅ ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΡΠ΅Π½ΠΈΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru