ΠΡΠ»ΠΈΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ! ΠΡΠ±ΠΎΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ (SQL) ΠΈ NoSQL (MongoDB, Cassandra ΠΈ Ρ.Π΄.) β ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠΏΡΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ°, Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π» NoSQL (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±Π°Π·Ρ Π²ΡΠΎΠ΄Π΅ MongoDB), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅Π±Ρ ΡΠΆΠ΅ Π»Π΅ΠΆΠ°Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON. ΠΠΎ Π΄Π»Ρ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ NoSQL ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π΅Ρ PostgreSQL ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ.
ΠΠ°Π²Π°ΠΉ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ PostgreSQL Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ β Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Ρ.
1. Π‘ΡΡΡ NoSQL β Π΄Π΅Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π° Π½Π°ΠΌ Π½ΡΠΆΠ½Π° Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ
Π NoSQL (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, MongoDB) ΠΈΠ΄Π΅Π°Π»ΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° β ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π²ΡΡ Π² ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ βΠ΄ΠΎΠΊΡΠΌΠ΅Π½Ρβ (JSON), ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π·Π° ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π΄ΠΈΡΠΊΡ.
Π ΡΠ°ΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ Ρ
ΠΎΠ΄ (turn) Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π²ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ (rnbqkbnr/...). ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π° Π² Π±Π°Π·Π΅ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΡΠ°Π·.
ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΌΡ Π² NoSQL ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ Π²ΡΠ½Π΅ΡΡΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ βΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡβ (ΡΠ΄Π΅Π»Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ ΡΠ°Π±Π»ΠΈΡΡ positions), Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ (Joins) Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. NoSQL Π±Π°Π·Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ
ΠΎ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΌΠ΅ΡΡ Π΄Π΅Π»Π°ΡΡ Joins.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Postgres: ΠΠ½ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ Π΄Π»Ρ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡ Ρ ΡΠ°Π½ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ Ρ ΠΎΠ΄ΠΎΠ² ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π½Π΅Ρ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠΌΡ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΌΡ ID, ΠΈ Π±Π°Π·Π° ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΈΡ Π·Π° ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ.
2. Π‘Π»ΠΎΠΆΠ½Π°Ρ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° ΠΈ ΠΠ³ΡΠ΅Π³Π°ΡΠΈΠΈ (SQL ΠΏΠΎΠ±Π΅ΠΆΠ΄Π°Π΅Ρ)
Π’Π²ΠΎΡ Π³Π»Π°Π²Π½Π°Ρ ΡΠ΅Π»Ρ β Π²ΡΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ°. ΠΡΠ΅Π΄ΡΡΠ°Π²Ρ Π·Π°ΠΏΡΠΎΡ: βΠΠ°ΠΉΡΠΈ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ±Π΅Π΄ Π±Π΅Π»ΡΡ ΠΈΠ· ΠΏΠΎΠ·ΠΈΡΠΈΠΈ X, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΡΠ΅ΠΉΡΠΈΠ½Π³ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π±ΡΠ» Π±ΠΎΠ»ΡΡΠ΅ 2000, ΠΈ Π²ΡΠΊΠΈΠ½ΡΡΡΠ΅ ΠΊΡΠ±ΠΈΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°Π»ΠΈ ΠΊΠΎΠ½Ρβ.
Π PostgreSQL ΡΡΠΎ ΠΏΠΈΡΠ΅ΡΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ:
SELECT COUNT(*) FILTER (WHERE result = 1) / COUNT(*)
FROM turns JOIN games ON turns.game_id = games.id
WHERE position_id = 123 AND dice_sorted LIKE '%N%' AND games.white_rating > 2000;Π MongoDB Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Aggregation Pipeline β ΡΡΠΎ ΠΌΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°. Π Π΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ Π°Π»Π³Π΅Π±ΡΠ° SQL Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΏΡΠ΅Π²Π·ΠΎΠΉΠ΄Π΅Π½Π½ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ (OLAP).
3. PostgreSQL ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ NoSQL (JSONB)
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Postgres ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ βΠ»ΡΡΡΠ΅ΠΉ NoSQL Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
β. Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° metadata JSONB.
ΠΡΠ»ΠΈ Ρ ΠΏΠ°ΡΡΠΈΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ Π·ΠΎΠ»ΠΎΡΠ°, ID ΡΡΡΠ½ΠΈΡΠ°, Π°Π²Π°ΡΠ°ΡΠΊΠ° ΠΎΠΏΠΏΠΎΠ½Π΅Π½ΡΠ°), Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΡ
Π΅ΠΌΡ ΡΠ°Π±Π»ΠΈΡ (ΠΊΠ°ΠΊ Π² ΡΡΠ°ΡΠΎΠΌ SQL). ΠΡ ΠΏΡΠΎΡΡΠΎ ΠΊΠΈΠ΄Π°Π΅ΠΌ ΡΡΠΎ Π² JSONB. Π Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Postgres ΡΠΌΠ΅Π΅Ρ ΡΡΡΠΎΠΈΡΡ ΡΠ²Π΅ΡΡ
Π±ΡΡΡΡΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΏΡΡΠΌΠΎ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ Π²Π½ΡΡΡΠΈ JSON! ΠΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΌ Π»ΡΡΡΠ΅Π΅ ΠΈΠ· Π΄Π²ΡΡ
ΠΌΠΈΡΠΎΠ².
4. Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΠ½Π΄Π΅ΠΊΡΡ
Π NoSQL Π±Π°Π·Π°Ρ ΡΠ°ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π²ΡΠ±ΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². Π PostgreSQL ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ:
HashΠΈΠ½Π΄Π΅ΠΊΡΡ (ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° FEN-ΡΡΡΠΎΠΊΠΈ).- ΠΠ°ΡΡΠΈΠ²Ρ
VARCHAR[]Ρ GIN-ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π»ΠΈ Ρ ΠΎΠ΄ βe2e4β Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΡΠ³ΡΠ°Π½Π½ΡΡ Ρ ΠΎΠ΄ΠΎΠ² Π·Π° Π΄ΠΎΠ»Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ).
ΠΡΠΎΠ³:
NoSQL ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΊΠΎΡΠ·ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ², Π»ΠΎΠ³ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π³Π΄Π΅ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠ»Π°Π²Π°Π΅Ρ, Π° Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΡΠ°ΡΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΠΎ ΡΠ°Ρ ΠΌΠ°ΡΠ½Π°Ρ ΠΏΠ°ΡΡΠΈΡ β ΡΡΠΎ ΡΡΡΠΎΠ³ΠΎ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°: ΠΈΠ³ΡΠΎΠΊΠΈ ΠΈΠ³ΡΠ°ΡΡ ΠΏΠ°ΡΡΠΈΠΈ, ΠΏΠ°ΡΡΠΈΠΈ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· Ρ ΠΎΠ΄ΠΎΠ², Ρ ΠΎΠ΄Ρ ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. Π PostgreSQL ΡΠΎΠ·Π΄Π°Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
ΠΡΠ»ΠΈ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°ΠΊΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ, ΡΠΎ Ρ Π½Π°Ρ Π½Π° ΡΡΠΊΠ°Ρ Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ, ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ !
ΠΠ°ΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³? Π₯ΠΎΡΠ΅ΡΡ Π»ΠΈ ΡΡ, ΡΡΠΎΠ±Ρ Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» SQL-ΡΠΊΡΠΈΠΏΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΈΡ ΡΠ°Π±Π»ΠΈΡ (ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ SQLAlchemy/Alembic), ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ°-ΠΈΠΌΠΏΠΎΡΡΠ΅ΡΠ° JSON?