Основи Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ - БравняванС Π½Π° PostgreSQL, Cassandra ΠΈ MongoDB

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ приятСли. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΌΠΈΠ½Π΅ΠΌ Π·Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° част Π½Π° майскитС ΠΏΡ€Π°Π·Π½ΠΈΡ†ΠΈ, сподСлямС с вас ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΊΠΎΠΉΡ‚ΠΎ смС ΠΏΡ€Π΅Π²Π΅Π»ΠΈ Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° стартиранСто Π½Π° Π½ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊ със скорост "Π Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π‘Π£Π‘Π”".

Основи Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ - БравняванС Π½Π° PostgreSQL, Cassandra ΠΈ MongoDB

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния ΠΏΡ€Π΅ΠΊΠ°Ρ€Π²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² сравняванС Π½Π° мноТСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π°Ρ‚ Ρ‚Π°Π·ΠΈ, която Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π·Π° тяхното ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. НуТдитС ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ опростСно ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ, производитСлност ΠΏΡ€ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅/запис, Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ ΠΈ толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π²Π° с катСгорията Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, SQL ΠΈΠ»ΠΈ NoSQL, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ всяка катСгория прСдоставя ясСн Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ компромиси. Високата производитСлност ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ниска латСнтност ΠΈ висока производитСлност ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ изискванС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΈ слСдоватСлно Π΅ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π² ΠΈΠ·Π²Π°Π΄ΠΊΠ°Ρ‚Π°.

Π¦Π΅Π»Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ статия Π΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прилоТСния Π΄Π° направят правилния ΠΈΠ·Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ SQL ΠΈ NoSQL Π² контСкста Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄Π½Π° SQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ PostgreSQL, ΠΈ Π΄Π²Π΅ NoSQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Cassandra ΠΈ MongoDB, Π·Π° Π΄Π° ΠΏΠΎΠΊΡ€ΠΈΠ΅ΠΌ основитС Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ създаванС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΏΠΎΠΏΡŠΠ»Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ, Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ. Π’ слСдващата статия ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ индСкси, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, JOIN, TTL Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° JSON.

Каква Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ SQL ΠΈ NoSQL?

SQL Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚Ρ‚Π° Π½Π° прилоТСнията Ρ‡Ρ€Π΅Π· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π½Π° ACID, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ тяхната способност Π΄Π° заявяват Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ JOIN ΠΏΠΎ Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π² допълнСниС към ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ тяхната ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Π°/Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π° възлова Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π» Π½Π° рСпликация Π³Π»Π°Π²Π΅Π½-ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ Π·Π° излишък, Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ SQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ липсват Π΄Π²Π΅ Π²Π°ΠΆΠ½ΠΈ характСристики - мащабируСмост Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ записванС (Ρ‚.Π΅. Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ раздСлянС ΠΌΠ΅ΠΆΠ΄Ρƒ мноТСство възли) ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π°/Π½ΡƒΠ»Π΅Π²Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ количСството ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° надвишава максималната производитСлност Π½Π° запис Π½Π° Π΅Π΄ΠΈΠ½ възСл. ОсвСн Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС Π²Π·Π΅ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ извСстна Π²Ρ€Π΅ΠΌΠ΅Π½Π½Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° устойчивост Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ (Π² нСсподСлСна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°). Π’ΡƒΠΊ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ послСднитС Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ всС ΠΎΡ‰Π΅ Π½Π΅ са ΠΎΡ‚Ρ€Π°Π·Π΅Π½ΠΈ Π² ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΎΡ‚ΠΎ ΠΊΠΎΠΏΠΈΠ΅. АктуализациитС Π±Π΅Π· ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ ΡΡŠΡ‰ΠΎ са Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° постиганС Π² SQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

NoSQL Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ са Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π°, Ρ‚.Π΅. Π² тях Π΄Π°Π½Π½ΠΈΡ‚Π΅ са Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ Π½Π° сСкции ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π² няколко възСла. Π’Π΅ изискват Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΡΡŠΡ‰ΠΎ трябва Π΄Π° сС ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ няколко ΠΏΡŠΡ‚ΠΈ, Π·Π° Π΄Π° сС ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈΡ‚Π΅ заявки, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅. ΠžΠ±Ρ‰Π°Ρ‚Π° Ρ†Π΅Π» Π΅ Π΄Π° сС постигнС висока производитСлност Ρ‡Ρ€Π΅Π· намаляванС Π½Π° броя Π½Π° сСгмСнтитС, Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ NoSQL изисква Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Ρ‚Π΅ заявкитС си, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ SQL изисква Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Ρ‚Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ.

NoSQL набляга Π½Π° постиганСто Π½Π° висока производитСлност Π² Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΈ Ρ‚ΠΎΠ²Π° Π΅ основната обосновка Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ компромиси ΠΏΡ€ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π·Π°Π³ΡƒΠ±Π° Π½Π° ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, JOIN ΠΈ послСдоватСлни Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΈ индСкси.

Има ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Π΅ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ NoSQL Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ осигуряват Π»ΠΈΠ½Π΅ΠΉΠ½Π° скалируСмост Π½Π° запис ΠΈ висока устойчивост Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π³ΠΈ ΠΏΡ€Π°Π²ΠΈ нСподходящи Π·Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ.

Π‘Π»Π΅Π΄Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π² NoSQL сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ SQL.

Основи Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ - БравняванС Π½Π° PostgreSQL, Cassandra ΠΈ MongoDB

SQL ΠΈ NoSQL: Π—Π°Ρ‰ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ Π΄Π²Π΅Ρ‚Π΅?

Π Π΅Π°Π»Π½ΠΈΡ‚Π΅ прилоТСния с голям Π±Ρ€ΠΎΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠ°Ρ‚ΠΎ Amazon.com, Netflix, Uber ΠΈ Airbnb, отговарят Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° слоТни Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅. НапримСр, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° Ρ‚ΡŠΡ€Π³ΠΎΠ²ΠΈΡ ΠΊΠ°Ρ‚ΠΎ Amazon.com трябва Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π»Π΅ΠΊΠΈ, силно чувствитСлни Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ информация Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ, Ρ„Π°ΠΊΡ‚ΡƒΡ€ΠΈ, Π·Π°Π΅Π΄Π½ΠΎ с Ρ‚Π΅ΠΆΠΊΠΈ, Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ чувствитСлни Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π·ΠΈΠ²ΠΈ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°. , потрСбитСлска активност , потрСбитСлски ΠΎΡ‚Π·ΠΈΠ²ΠΈ ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ. ЕстСствСно, Ρ‚Π΅Π·ΠΈ прилоТСния Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°Ρ‚ Π½Π° ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° SQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ с ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° NoSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’ ΠΌΠ΅ΠΆΠ΄ΡƒΡ€Π΅Π³ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΈ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ систСми NoSQL Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Π³Π΅ΠΎ-Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ кСш Π·Π° Π΄Π°Π½Π½ΠΈ, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π² Π΄ΠΎΠ²Π΅Ρ€Π΅Π½ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ, SQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° във всСки Π΅Π΄ΠΈΠ½ Ρ€Π΅Π³ΠΈΠΎΠ½.

Как YugaByte DB ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π° SQL ΠΈ NoSQL?

Π˜Π·Π³Ρ€Π°Π΄Π΅Π½ Π²ΡŠΡ€Ρ…Ρƒ Π»ΠΎΠ³-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ смСсСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³, ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° консСнсусна рСпликация ΠΈ ACID Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Π²Π΄ΡŠΡ…Π½ΠΎΠ²Π΅Π½ΠΈ ΠΎΡ‚ Google Spanner), YugaByte DB Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π² свСта Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, която Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с NoSQL (Cassandra & Redis). ) ΠΈ SQL (PostgreSQL). ΠšΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, YCQL, YugaByte DB API, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с Cassandra, добавя ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈΡ‚Π΅ Π·Π° ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с Π΅Π΄ΠΈΠ½ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΈ индСкси към NoSQL API, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ поставя Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π΅Ρ€Π°Ρ‚Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ NoSQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ допълнСниС, YCQL, YugaByte DB API, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с PostgreSQL, добавя ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈΡ‚Π΅ Π·Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° запис ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ ΠΎΡ‚ΠΊΠ°Π· към SQL API, прСдоставяйки Π½Π° свСта Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ SQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Въй ΠΊΠ°Ρ‚ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ YugaByte DB Π΅ ΠΏΡ€ΠΈΡΡŠΡ‰ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Π°, NoSQL API Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² контСкста Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ.

Основи Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ - БравняванС Π½Π° PostgreSQL, Cassandra ΠΈ MongoDB

ΠšΠ°ΠΊΡ‚ΠΎ бСшС посочСно ΠΏΠΎ-Ρ€Π°Π½ΠΎ Π² статията β€žΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° YSQL: Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ SQL API, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с PostgreSQL Π·Π° YugaByte DBβ€œ, ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ SQL ΠΈΠ»ΠΈ NoSQL Π² YugaByte DB зависи изцяло ΠΎΡ‚ характСристикитС Π½Π° основното Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅:

  • Ако основното Π²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ са ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ JOIN с мноТСство ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, Ρ‚ΠΎΠ³Π°Π²Π° ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅ YSQL, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·ΠΏΡ€ΡŠΡΠ½Π°Ρ‚ΠΈ Π² мноТСство възли, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎ-висока латСнтност ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎ-ниска пропускатСлна способност ΠΎΡ‚ NoSQL.
  • Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Π²Π°Ρ‚Π° NoSQL API, ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π° производитСлност Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° заявки, обслуТвани ΠΎΡ‚ Π΅Π΄ΠΈΠ½ възСл навСднъТ. YugaByte DB ΠΌΠΎΠΆΠ΅ Π΄Π° слуТи ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° Ρ€Π΅Π°Π»Π½ΠΈ слоТни прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° управляват мноТСство натоварвания Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Лабораторията Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² слСдващия Ρ€Π°Π·Π΄Π΅Π» Π΅ Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈΡ‚Π΅ с PostgreSQL ΠΈ Cassandra API Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ YugaByte DB, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π° Π»Π΅ΠΊΠΎΡ‚Π°Ρ‚Π° Π½Π° взаимодСйствиС с Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ API (Π½Π° Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΡ€Ρ‚Π°) Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΎΡ‚ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° напълно нСзависими ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ ΠΎΡ‚ Π΄Π²Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
Π’ слСдващитС Ρ€Π°Π·Π΄Π΅Π»ΠΈ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ лабораторията Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΈ някои ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Ρ‚ΠΈ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

Лаборатория Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ

ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ„ΠΎΠΊΡƒΡΡŠΡ‚ Π²ΡŠΡ€Ρ…Ρƒ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° Π΄Π°Π½Π½ΠΈ (вмСсто слоТнитС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ Π·Π° внСдряванС), Π½ΠΈΠ΅ Ρ‰Π΅ инсталирамС Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° машина ΠΈ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ взаимодСйствамС с тях, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΈΠΌ ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π° командния Ρ€Π΅Π΄.

Π‘ΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с PostgreSQL ΠΈ Cassandra, Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ YugaByte DB

mkdir ~/yugabyte && cd ~/yugabyte
wget https://downloads.yugabyte.com/yb-docker-ctl && chmod +x yb-docker-ctl
docker pull yugabytedb/yugabyte
./yb-docker-ctl create --enable_postgres

MongoDB

docker run --name my-mongo -d mongo:latest

Π”ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ командния Ρ€Π΅Π΄

НСка сС ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π½Π° командния Ρ€Π΅Π΄ Π·Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ API.

PostgreSQL

psql Π΅ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° командния Ρ€Π΅Π΄ Π·Π° взаимодСйствиС с PostgreSQL. Π—Π° ΠΏΠΎ-лСсно ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ YugaByte DB ΠΈΠ΄Π²Π° с psql Ρ‚ΠΎΡ‡Π½ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° bin.

docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

sqlsh Π΅ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° командния Ρ€Π΅Π΄ Π·Π° взаимодСйствиС с Cassandra ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· CQL (Cassandra Query Language). Π—Π° ΠΏΠΎ-лСсна ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, YugaByte DB ΠΈΠ΄Π²Π° с cqlsh Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° bin.
Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ CQL Π΅ Π²Π΄ΡŠΡ…Π½ΠΎΠ²Π΅Π½ ΠΎΡ‚ SQL ΠΈ ΠΈΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈ индСкси. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠ°Ρ‚ΠΎ NoSQL Π΅Π·ΠΈΠΊ, Ρ‚ΠΎΠΉ добавя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ограничСния, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΈ статии.

docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlsh

MongoDB

Монго Π΅ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° командния Ρ€Π΅Π΄ Π·Π° взаимодСйствиС с MongoDB. МоТС Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ Π² дирСкторията bin Π½Π° инсталацията Π½Π° MongoDB.

docker exec -it my-mongo bash 
cd bin
mongo

БъздаванС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° взаимодСйствамС с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ командния Ρ€Π΅Π΄. НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ, ΠΊΠ°Ρ‚ΠΎ създадСм Ρ‚Π°Π±Π»ΠΈΡ†Π°, която ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° информация Π·Π° пСсни, написани ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»ΠΈ. Π’Π΅Π·ΠΈ пСсни ΠΌΠΎΠΆΠ΅ Π΄Π° са част ΠΎΡ‚ Π°Π»Π±ΡƒΠΌ. Π‘ΡŠΡ‰ΠΎ Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π·Π° пСсСнта са Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, Ρ†Π΅Π½Π°, ΠΆΠ°Π½Ρ€ ΠΈ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³. Врябва Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ Ρ‡Ρ€Π΅Π· ΠΏΠΎΠ»Π΅Ρ‚ΠΎ "Ρ‚Π°Π³ΠΎΠ²Π΅". МоТС Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° полуструктурирани Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠ»ΡŽΡ‡-стойност.

PostgreSQL

CREATE TABLE Music (
    Artist VARCHAR(20) NOT NULL, 
    SongTitle VARCHAR(30) NOT NULL,
    AlbumTitle VARCHAR(25),
    Year INT,
    Price FLOAT,
    Genre VARCHAR(10),
    CriticRating FLOAT,
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);	

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Cassandra Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° PostgreSQL. Π•Π΄Π½Π° ΠΎΡ‚ основнитС Ρ€Π°Π·Π»ΠΈΠΊΠΈ Π΅ липсата Π½Π° ограничСния Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ‚Π΅Ρ‚ (ΠΊΠ°Ρ‚ΠΎ NOT NULL), Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ отговорност Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π° Π½Π΅ Π½Π° NoSQL Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.. ΠŸΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡΡ‚ ΠΊΠ»ΡŽΡ‡ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠ»ΡŽΡ‡ (ΠΊΠΎΠ»ΠΎΠ½Π° β€žΠ˜Π·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»β€œ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ) ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π·Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ (ΠΊΠΎΠ»ΠΎΠ½Π° β€žSongTitleβ€œ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ). ΠšΠ»ΡŽΡ‡ΡŠΡ‚ Π½Π° дяла опрСдСля Π² ΠΊΠΎΠΉ дял/ΡˆΠ°Ρ€Π΄ Π΄Π° сС постави Ρ€Π΅Π΄ΡŠΡ‚, Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ Π·Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΊΠ°ΠΊ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² тСкущия ΡˆΠ°Ρ€Π΄.

CREATE KEYSPACE myapp;
USE myapp;
CREATE TABLE Music (
    Artist TEXT, 
    SongTitle TEXT,
    AlbumTitle TEXT,
    Year INT,
    Price FLOAT,
    Genre TEXT,
    CriticRating FLOAT,
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);

MongoDB

MongoDB ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ Π² Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ (Database) (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Keyspace Π² Cassandra), ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ (Collections) (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ), ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ (Documents) (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°). Π’ MongoDB ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π΅ сС изисква ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π° дСфиниция Π½Π° схСма. Π•ΠΊΠΈΠΏ "ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ", ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, инстанцира Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΠΈ промСня контСкста Π·Π° Π½ΠΎΠ²ΠΎΡΡŠΠ·Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π”ΠΎΡ€ΠΈ ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π΅ трябва Π΄Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ, Ρ‚Π΅ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ сС Π΄ΠΎΠ±Π°Π²ΠΈ към Π½ΠΎΠ²Π° колСкция. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ MongoDB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° тСстова Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всяка опСрация Π½Π° Π½ΠΈΠ²ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π±Π΅Π· посочванС Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ бъдС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° Π² нСя ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

use myNewDatabase;

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° информация Π·Π° маса
PostgreSQL

d Music
Table "public.music"
    Column    |         Type          | Collation | Nullable | Default 
--------------+-----------------------+-----------+----------+--------
 artist       | character varying(20) |           | not null | 
 songtitle    | character varying(30) |           | not null | 
 albumtitle   | character varying(25) |           |          | 
 year         | integer               |           |          | 
 price        | double precision      |           |          | 
 genre        | character varying(10) |           |          | 
 criticrating | double precision      |           |          | 
 tags         | text                  |           |          | 
Indexes:
    "music_pkey" PRIMARY KEY, btree (artist, songtitle)

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

DESCRIBE TABLE MUSIC;
CREATE TABLE myapp.music (
    artist text,
    songtitle text,
    albumtitle text,
    year int,
    price float,
    genre text,
    tags text,
    PRIMARY KEY (artist, songtitle)
) WITH CLUSTERING ORDER BY (songtitle ASC)
    AND default_time_to_live = 0
    AND transactions = {'enabled': 'false'};

MongoDB

use myNewDatabase;
show collections;

Π’ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°
PostgreSQL

INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Year, Price, Genre, CriticRating, 
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country', 7.8,
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, CriticRating)
VALUES(
    'No One You Know', 'My Dog Spot', 'Hey Now',
    1.98, 'Country', 8.4
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre)
VALUES(
    'The Acme Band', 'Look Out, World', 'The Buck Starts Here',
    0.99, 'Rock'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, 
    Tags)
VALUES(
    'The Acme Band', 'Still In Love', 'The Buck Starts Here',
    2.47, 'Rock', 
    '{"radioStationsPlaying": ["KHCR", "KBQX", "WTNR", "WJJH"], "tourDates": { "Seattle": "20150625", "Cleveland": "20150630"}, "rotation": Heavy}'
);

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

ΠšΠ°Ρ‚ΠΎ цяло ΠΈΠ·Ρ€Π°Π·ΡŠΡ‚ INSERT Π² Cassandra ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π² PostgreSQL. Има ΠΎΠ±Π°Ρ‡Π΅ Π΅Π΄Π½Π° голяма Ρ€Π°Π·Π»ΠΈΠΊΠ° Π² сСмантиката. Π’ ΠšΠ°ΡΠ°Π½Π΄Ρ€Π° INSERT Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ опСрация UPSERT, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ послСднитС стойности сС добавят към Π½ΠΈΠ·Π°, Π² случай Ρ‡Π΅ Π½ΠΈΠ·ΡŠΡ‚ Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°.

Π’ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° PostgreSQL INSERT Π³ΠΎΡ€Π΅

.

MongoDB

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ MongoDB Π΅ NoSQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Cassandra, Π½Π΅ΠΉΠ½Π°Ρ‚Π° опСрация Π·Π° въвСТданС Π½Π° Π΄Π°Π½Π½ΠΈ няма Π½ΠΈΡ‰ΠΎ ΠΎΠ±Ρ‰ΠΎ със сСмантичното ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° Cassandra. Π’ MongoDB вмъкванС () няма Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ UPSERT, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° PostgreSQL. ДобавянС Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π±Π΅Π· _idspecified Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ добавянС Π½Π° Π½ΠΎΠ² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ към колСкцията.

db.music.insert( {
artist: "No One You Know",
songTitle: "Call Me Today",
albumTitle: "Somewhat Famous",
year: 2015,
price: 2.14,
genre: "Country",
tags: {
Composers: ["Smith", "Jones", "Davis"],
LengthInSeconds: 214
}
}
);
db.music.insert( {
artist: "No One You Know",
songTitle: "My Dog Spot",
albumTitle: "Hey Now",
price: 1.98,
genre: "Country",
criticRating: 8.4
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Look Out, World",
albumTitle:"The Buck Starts Here",
price: 0.99,
genre: "Rock"
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Still In Love",
albumTitle:"The Buck Starts Here",
price: 2.47,
genre: "Rock",
tags: {
radioStationsPlaying:["KHCR", "KBQX", "WTNR", "WJJH"],
tourDates: {
Seattle: "20150625",
Cleveland: "20150630"
},
rotation: "Heavy"
}
}
);

Заявка Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°

МоТС Π±ΠΈ Π½Π°ΠΉ-ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½Π°Ρ‚Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ SQL ΠΈ NoSQL ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° заявкитС Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° FROM ΠΈ WHERE. SQL позволява слСд ΠΈΠ·Ρ€Π°Π· FROM ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ няколко Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ ΠΈΠ·Ρ€Π°Π· с WHERE ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС с всякаква слоТност (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ JOIN ΠΌΠ΅ΠΆΠ΄Ρƒ маси). NoSQL ΠΎΠ±Π°Ρ‡Π΅ ΠΈΠΌΠ° тСндСнция Π΄Π° Π½Π°Π»Π°Π³Π° Ρ‚Π²ΡŠΡ€Π΄ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° FROMΠΈ работят само с Π΅Π΄Π½Π° посочСна Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ Π² WHERE, ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡΡ‚ ΠΊΠ»ΡŽΡ‡ Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° бъдС посочСн. Π’ΠΎΠ²Π° сС дълТи Π½Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността Π½Π° NoSQL, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ. Π’ΠΎΠ²Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ всяко възмоТно намаляванС Π½Π° всяко взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΈ ΠΈ клавиши. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ голямо забавянС Π² комуникацията ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° заявка ΠΈ слСдоватСлно Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС избягва ΠΊΠ°Ρ‚ΠΎ цяло. НапримСр Cassandra изисква заявкитС Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ само =, IN, <, >, =>, <=) Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π½Π° дяловС, освСн ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΏΡ€Π°Π²ΠΈ заявка Π·Π° Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π΅Π½ индСкс (само ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ = Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Ρ‚ΡƒΠΊ).

PostgreSQL

Π‘Π»Π΅Π΄Π²Π°Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° заявки, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ лСсно Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изпълнСни ΠΎΡ‚ SQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.

  • ПоказванС Π½Π° всички пСсни Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Ρ;
  • ПоказванС Π½Π° всички пСсни Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Ρ, ΠΊΠΎΠΈΡ‚ΠΎ отговарят Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° част ΠΎΡ‚ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ;
  • ПоказванС Π½Π° всички пСсни Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Ρ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π΄ΡƒΠΌΠ° Π² Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΈΠΌΠ°Ρ‚ Ρ†Π΅Π½Π° ΠΏΠΎΠ΄ 1.00.
SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE 'Call%';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE '%Today%'
AND Price > 1.00;

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

ΠžΡ‚ заявкитС Π½Π° PostgreSQL, ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅, само ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π° Π² Cassandra, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ€Π°Π·ΡŠΡ‚ LIKE Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ към Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΊΠ°Ρ‚ΠΎ SongTitle. Π’ Ρ‚ΠΎΠ·ΠΈ случай са Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ само ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ = ΠΈ IN.

SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle IN ('Call Me Today', 'My Dog Spot')
AND Price > 1.00;

MongoDB

ΠšΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, основният ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° създаванС Π½Π° заявки Π² MongoDB Π΅ db.collection.find(). Π’ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° колСкцията (music Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ заявкитС Π·Π° мноТСство ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ са Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ.

db.music.find( {
  artist: "No One You Know"
 } 
);
db.music.find( {
  artist: "No One You Know",
  songTitle: /Call/
 } 
);

Π§Π΅Ρ‚Π΅Π½Π΅ Π½Π° всички Ρ€Π΅Π΄ΠΎΠ²Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°

Π§Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° всички Ρ€Π΅Π΄ΠΎΠ²Π΅ Π΅ само спСциалСн случай Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° заявката, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΠ±ΡΡŠΠ΄ΠΈΡ…ΠΌΠ΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ.

PostgreSQL

SELECT * 
FROM Music;

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

Подобно Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° PostgreSQL ΠΏΠΎ-Π³ΠΎΡ€Π΅.

MongoDB

db.music.find( {} );

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°

PostgreSQL

PostgreSQL прСдоставя изявлСниС UPDATE Π·Π° промяна Π½Π° Π΄Π°Π½Π½ΠΈ. Вя няма Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ UPSERT, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ, Π°ΠΊΠΎ Ρ€Π΅Π΄ΡŠΡ‚ Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π° ΠΈΠΌΠ° UPDATE ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° PostgreSQL. UPDATE ΠΈΠΌΠ° ΡΡŠΡ‰Π°Ρ‚Π° сСмантика UPSERT, ΠΊΠ°Ρ‚ΠΎ INSERT.

Подобно Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° PostgreSQL ΠΏΠΎ-Π³ΠΎΡ€Π΅.

MongoDB
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ актуализация () Π² MongoDB ΠΌΠΎΠΆΠ΅ напълно Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° само ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° само Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° сСмантика UPSERT. ΠžΠΏΡ€Π΅ΡΠ½ΡΠ²Π°Π½Π΅ Π½Π° мноТСство Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ UPSERT ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Ρ‡Ρ€Π΅Π· Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π·Π° опСрацията. ΠšΠ°ΠΊΡ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, ΠΆΠ°Π½Ρ€ΡŠΡ‚ Π½Π° Π΄Π°Π΄Π΅Π½ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π» сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° пСсСн.

db.music.update(
  {"artist": "The Acme Band"},
  { 
    $set: {
      "genre": "Disco"
    }
  },
  {"multi": true, "upsert": true}
);

ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°

PostgreSQL

DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

Подобно Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° PostgreSQL ΠΏΠΎ-Π³ΠΎΡ€Π΅.

MongoDB

MongoDB ΠΈΠΌΠ° Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ βˆ’ deleteOne() /deleteMany() ΠΈ ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅(). И Π΄Π²Π°Ρ‚Π° Π²ΠΈΠ΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, Π½ΠΎ Π²Ρ€ΡŠΡ‰Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

db.music.deleteMany( {
        artist: "The Acme Band"
    }
);

Π˜Π·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°

PostgreSQL

DROP TABLE Music;

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

Подобно Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° PostgreSQL ΠΏΠΎ-Π³ΠΎΡ€Π΅.

MongoDB

db.music.drop();

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π”Π΅Π±Π°Ρ‚ΡŠΡ‚ относно ΠΈΠ·Π±ΠΎΡ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ SQL ΠΈ NoSQL Π±ΡƒΡˆΡƒΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 10 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Има Π΄Π²Π° основни аспСкта Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΄Π΅Π±Π°Ρ‚: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° двигатСля Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅Π½, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π΅Π½ SQL срСщу Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Π½Π΅Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π΅Π½ NoSQL) ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ към Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² SQL срСщу ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ заявки Π² NoSQL).

Π‘ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ YugaByte DB, Π΄Π΅Π±Π°Ρ‚ΡŠΡ‚ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° бъдС разсСян. Въй ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Π΅ΠΌΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ стават ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС запишС Π½Π° Π΅Π΄ΠΈΠ½ възСл, става Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° напълно Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, която ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° скалируСмост Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ записванС с Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³/рСбалансиранС.

Π’ допълнСниС към ΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ Π² Π΅Π΄Π½Π° ΠΎΡ‚ статиитС Google Cloud, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅, силно послСдоватСлни Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ сСга са ΠΏΠΎ-ΡˆΠΈΡ€ΠΎΠΊΠΎ Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅Ρ‚ΠΈ, Π·Π° Π΄Π° осигурят ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π° Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π½Π΅Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅, Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка послСдоватСлни Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ.

Π’Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ сС към дискусията Π·Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, справСдливо Π΅ Π΄Π° сС ΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ ΠΈ Π΄Π²Π°Ρ‚Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ (SQL ΠΈ NoSQL) са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° всяко слоТно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² рСалния свят. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ Π½Π° SQL Π·Π° β€žΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈβ€œ позволява Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΠΎ-лСсно Π΄Π° отговарят Π½Π° промСнящитС сС бизнСс изисквания, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ Π½Π° NoSQL Π·Π° β€žΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈβ€œ позволява Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ количСства Π΄Π°Π½Π½ΠΈ с ниска латСнтност ΠΈ висока производитСлност. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° YugaByte DB прСдоставя SQL ΠΈ NoSQL API Π² ΠΎΠ±Ρ‰ΠΎ ядро ​​и Π½Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Π΅. Π’ допълнСниС, Ρ‡Ρ€Π΅Π· осигуряванС Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с популярни Π΅Π·ΠΈΡ†ΠΈ Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ PostgreSQL ΠΈ Cassandra, YugaByte DB Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π΅ трябва Π΄Π° ΡƒΡ‡Π°Ρ‚ Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ, Π·Π° Π΄Π° работят с Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° силно послСдоватСлна Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ основитС Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ PostgreSQL, Cassandra ΠΈ MongoDB. Π’ слСдващитС статии Ρ‰Π΅ сС ΠΏΠΎΡ‚ΠΎΠΏΠΈΠΌ Π² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π·Π° ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΊΠ°Ρ‚ΠΎ индСкси, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, JOIN, TTL Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ ΠΈ JSON Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

ПоТСлавамС Π²ΠΈ страхотСн ΡƒΠΈΠΊΠ΅Π½Π΄ ΠΈ Π²ΠΈ ΠΊΠ°Π½ΠΈΠΌ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π΅Π½ ΡƒΠ΅Π± сСминаркойто Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ Π½Π° 14 ΠΌΠ°ΠΉ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€