ИздаванС Π½Π° FerretDB 0.1, изпълнСниС Π½Π° MongoDB, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Π‘Π£Π‘Π” PostgreSQL

Π˜Π·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° FerretDB 0.1 (ΠΏΠΎ-Ρ€Π°Π½ΠΎ MangoDB) бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π°Ρ‚Π° към Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π‘Π£Π‘Π” MongoDB с PostgreSQL, Π±Π΅Π· Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. FerretDB Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ ΠΊΠ°Ρ‚ΠΎ прокси ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° обаТданията към MangoDB Π² SQL заявки към PostgreSQL, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява PostgreSQL Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ дСйствитСлно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠšΠΎΠ΄ΡŠΡ‚ Π΅ написан Π½Π° Go ΠΈ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Apache 2.0.

НСобходимостта ΠΎΡ‚ миграция ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° MongoDB към ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½ SSPL Π»ΠΈΡ†Π΅Π½Π·, ΠΊΠΎΠΉΡ‚ΠΎ сС основава Π½Π° AGPLv3 Π»ΠΈΡ†Π΅Π½Π·Π°, Π½ΠΎ Π½Π΅ Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° дискриминационно изискванС Π·Π° прСдоставянС ΠΏΠΎΠ΄ SSPL Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π΅ само Π½Π° самия ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½ΠΎ ΠΈ изходния ΠΊΠΎΠ΄ Π½Π° всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, участващи Π² прСдоставянСто Π½Π° ΠΎΠ±Π»Π°Ρ‡Π½Π° услуга.

Π¦Π΅Π»Π΅Π²Π°Ρ‚Π° аудитория Π½Π° FerretDB са ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° MongoDB Π² своитС прилоТСния, Π½ΠΎ искат Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ напълно ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ софтуСрСн стСк. На настоящия Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° FerretDB всС ΠΎΡ‰Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° само част ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° MongoDB, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π°ΠΉ-чСсто Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈΡ‚Π΅ прилоТСния. Π’ Π±ΡŠΠ΄Π΅Ρ‰Π΅ Ρ‚Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚ Π΄Π° постигнат пълна ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π·Π° MongoDB ΠΈ Π΄Π° прСдоставят Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° FerretDB ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½ замСститСл Π½Π° MongoDB.

Π‘ΠΏΠΎΠΌΠ½Π΅Ρ‚Π΅ си, Ρ‡Π΅ MongoDB Π·Π°Π΅ΠΌΠ° ниша ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΡŠΡ€Π·ΠΈ ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΈ систСми, ΠΊΠΎΠΈΡ‚ΠΎ работят с Π΄Π°Π½Π½ΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ»ΡŽΡ‡ / стойност, ΠΈ Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π‘Π£Π‘Π”, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° заявки. MongoDB ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° JSON, ΠΈΠΌΠ° доста гъвкав Π΅Π·ΠΈΠΊ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° заявки, ΠΌΠΎΠΆΠ΅ Π΄Π° създава индСкси Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, осигурява Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° рСгистриранС Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° промяна ΠΈ добавянС Π½Π° Π΄Π°Π½Π½ΠΈ към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Ρ‚Π° Map/Reduce, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° рСпликация ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° устойчиви Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠŸΡƒΡΠΊΠ°Π½Π΅Ρ‚ΠΎ Π½Π° FerretDB 0.1.0 напълно ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ PostgreSQL. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π·Π° всяка входяща MongoDB заявка сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡˆΠ΅ Π΅Π΄Π½Π° SQL заявка към PostgreSQL, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с JSON Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ страна Π½Π° PostgreSQL. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠΈ Π² сСмантиката Π½Π° json Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° PostgreSQL ΠΈ MongoDB, имашС Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ сравняванС ΠΈ сортиранС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅. Π—Π° Π΄Π° сС Ρ€Π΅ΡˆΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π²Π΅Ρ‡Π΅ сС ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ‚ излишно ΠΎΡ‚ PostgreSQL ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ сС Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° ΠΎΡ‚ страна Π½Π° FerretDB, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° MongoDB Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ситуации.

Π¦Π΅Π½Π°Ρ‚Π° Π½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π°Ρ‚Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ бСшС намаляванС Π½Π° производитСлността, ΠΊΠΎΠ΅Ρ‚ΠΎ Π² Π±ΡŠΠ΄Π΅Ρ‰ΠΈ вСрсии Ρ‚Π΅ ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚ Π΄Π° компСнсират Ρ‡Ρ€Π΅Π· сСлСктивно Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΎΡ‚ страна Π½Π° FerretDB само Π½Π° заявки, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ° Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. НапримСр, заявката "db.collection.find({_id: 'some-id-value'})" ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° изцяло Π² PostgreSQL. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅ Π΄Π° сС постигнС ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с MongoDB, Π° производитСлността засСга остава Π½Π° Π·Π°Π΄Π΅Π½ ΠΏΠ»Π°Π½. Π‘Ρ€Π΅Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π½ΠΎΠ²Π°Ρ‚Π° вСрсия сС отбСлязва ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° всички Π±ΠΈΡ‚ΠΎΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π° сравнСниС β€ž$eqβ€œ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ β€ž$elemMatchβ€œ ΠΈ β€ž$bitsAllClearβ€œ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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