Numberly has been using both ScyllaDB and MongoDB in production for 5+ years. Learn which NoSQL database they rely on for different use cases and why. Sa ilalim ng NoSQL domain, ang ScyllaDB at ang MongoDB ay dalawang napakahusay na hayop. Ang MongoDB ay hindi kailangang mag-introduction. Ang kanyang simpleng pag-adopsiyon at ang malaking komunidad / ecosystem ay ginawa ng ito ang de facto standard para magsimula sa Ang near-to-the-metal architecture ng ScyllaDB ay nagbibigay-daan para sa predictable low latency sa high throughput. na ang Maraming mga tao ang nag-scale at pag-atake ng wall sa kanilang mga existing databases. Ngunit ang discord Mga Traktado Data-intensibong mga application Ngunit ang mga migration ng database ay hindi ang focus dito. Sa halip, tingnan natin kung paano ang dalawang iba't-ibang database na ito ay maaaring coexist sa loob ng parehong tech stack - kung paano sila ay fundamentally iba't-ibang, at ang pinakamahusay na mga kaso ng paggamit para sa bawat isa. Halimbawa, tulad ng iba't-ibang mga sapatos ay gumagana mas mahusay para sa isang marathon vs. scaling Mount Everest vs. magpatuloy sa iyong wedding, ang iba't-ibang database ay gumagana mas mahusay para sa iba't-ibang mga kaso ng paggamit na may iba't-ibang mga workloads at latency/throughput expectations. Kaya kapag dapat mong gamitin ang ScyllaDB vs. MongoDB at bakit? Sa halip na magbigay ng prospect ng vendor, magbigay kami ng mga pag-ibig mula sa isang open source enthusiast na may malakas na karanasan sa paggamit ng ScyllaDB at MongoDB sa produksyon: si Alexys Jacob, CTO ng Numberly. Narito ang tatlong pangunahing takeaways mula sa kanyang detalyadong tech talk: Ang Scaling Writes ay Mas Complex sa MongoDB Ang base unit ng isang MongoDB topology ay tinatawag na isang replica set, na kung saan ay binubuo ng isang primary node at karaniwang higit pang mga secondary node (hindi ng hot replicas). Ikaw lamang ang primary node ay dapat mag-script data. Pagkatapos mo max out vertical write scaling sa MongoDB, ang iyong lamang na opsyon sa scale writes ay kung ano ang tinatawag na isang sharded cluster. Ito ay nangangailangan ng pagdadala ng mga bagong replica sets dahil hindi mo maaaring magkaroon ng higit pang mga primaries sa isang single replica set. Ang pag-sharding ng data sa lahat ng mga replica set ng MongoDB ay nangangailangan ng paggamit ng isang espesyal na key upang itakda kung ano ang data ng bawat replica set ay responsable para sa, pati na rin ang paggawa ng isang metadata replica set na nag-track kung ano ang mga slice ng data ay buhay sa bawat replica (ang blue triangle sa diagram sa ibaba). Halimbawa, ang mga client na nag-connect sa isang MongoDB cluster ay kailangan ng tulong upang matukoy kung ano ang node upang i-address. Ang pag-scaling ng mga script sa MongoDB Kung mayroong lahat ng mga nodes na ito ay humantong sa mas mataas na gastos ng pag-operasyon at pag-uugali, pati na rin ang mga resource waste dahil hindi mo maaaring i-tap ang replica nodes' IO para sa mga writes, na kung saan ay gumawa ng sharded MongoDB clusters ang pinakamalaking kapangyarihan ng iyong kumpletong gastos ng pag-aari tulad ng tinatanggap ni Alexys. Para sa ScyllaDB, ang pag-scaling ay mas simpleng. Sinabi niya, "Sa ScyllaDB side, kung nais mong magdagdag ng higit pa ng paghahatid, kailangan mo lamang magdagdag ng mga nodes. Alexys binubuo ang scaling thread na ito: “Idinirekta ang paglikha ng clusters ng MongoDB, please! Maaari kong basahin ang isang libro na may mga story ng perang sa katotohanan na ito. Ang pangunahing dahilan kung bakit ito ay ang katotohanan na ang MongoDB ay hindi sumali ang workload sa mga CPU. At ang sharding, ang pag-distribusyon ng data sa pagitan ng mga replica set sa isang cluster ay ginawa sa pamamagitan ng isang background job (ang balancer). Ang balancer na ito ay patuloy, patuloy na tumingin sa kung paano ang sharding ay dapat gawin, at patuloy na panatilihin na ang data ay binubuo at binubuo sa buong cluster. Ito ay hindi natural dahil ito ay batay sa katotohanan na hashing. Ito ay isang bagay na dapat i-calculate nang higit sa isang beses. Ito MongoDB favors flexibility over performance, habang ScyllaDB favors consistent performance over versatility Ang ScyllaDB at MongoDB ay may malinaw na iba't ibang mga pangunahing prioridad sa pagitan ng flexibility at pagganap. Sa data modeling front, ang MongoDB ay native na sumusuporta sa geospatial queries, text search, aggregation pipelines, graph queries at change streams. Habang ang ScyllaDB – isang wide- column store (a.k. key-value) – ay sumusuporta sa user-defined types, counters at lightweight transactions, ang mga pagpipilian ng data modeling ay mas limitasyong kaysa sa MongoDB. Si Alexys ay nagsabi, “Sa isang pag-development perspective, ang pag-interact sa isang JSON object lamang ay mas natural kaysa sa pag-interact sa isang row.” sa pagpatay ng pag-validasyon ng schema bago ang data insertion, ScyllaDB Ang data na ito ay sumusunod sa defined scheme. ang option Kailangan Ang querying ay mas simpleng sa MongoDB dahil ikaw ay lamang ang pag-filter at pag-interact sa JSON. Ito ay din mas fleksibong, para sa mas mahusay o para sa mas mababang. Ang MongoDB ay nagbibigay-daan sa iyo upang i-emit ang anumang uri ng query, kabilang ang mga query na nagiging sanhi ng suboptimal na pagganap sa iyong produksyon workload. ScyllaDB ay hindi nagbibigay-daan na ito. Kung ikaw ay nag-iisip, ScyllaDB ay i-warn sa iyo. Kung ikaw ay nagpasya sa iyong sarili risk, maaari mong i-introduce ang isang qualifier na nagpapakita na ikaw ay tunay na malaman kung ano ang ikaw ay pumunta sa iyong sarili. Alexys sumulat ang mga pangunahing mga pagkakaiba mula sa isang development perspective: “Ang MongoDB ay nag-aalok ng flexibility kaysa sa pagganap. Ito ay madaling mag-interact sa at ito ay hindi makakatanggap sa iyong paraan. Ngunit ito ay may mga epekto sa pagganap - mga epekto na magandang para sa ilang mga workloads, ngunit hindi mapagkakatiwala para sa iba. Sa iba pa, ang ScyllaDB ay nag-aalok ng consistent performance kaysa sa versatility. Ito ay mataas na mas fixed at isang maliit na mas rigid sa labas. Ngunit taas, ito ay para sa iyong sarili, kaya maaari kang magkaroon ng consistent na pagganap, mag-operate nang mabuti at mag-interact sa sistema. Sa aking paniniwala, ito ay gumagawa ng isang tunay na pagkakaiba kapag ikaw ay may mga workloads na may latency- at performance-sensitive.” Ito ay mahalaga na ang kahit na mga query na sumusunod sa mga best practices ng pagganap ay magtatrabaho sa MongoDB na hindi sa ScyllaDB. Walang mahalaga kung paano ikaw ay cautious, hindi ka makakakuha ng ang performance penalty na nagsisimula mula sa mga pangunahing mga pagkilos sa architecture. Lahat ng ScyllaDB at MongoDB ay isang Great NoSQL Combo "Hindi ito isang death match; kami ay happy mga gumagamit ng parehong MongoDB at ScyllaDB," sabi ni Alexys. Numerically ang pinakamahusay na database para sa mga teknikal na kinakailangan ng bawat kaso ng paggamit. Sa Numberly, ang MongoDB ay ginagamit para sa dalawang uri ng mga kaso ng paggamit: Web backend na may REST APIs at posibleng flexible schemes. Real-time queries sa pamamagitan ng unpredictable behavioral data. Halimbawa, ang ilang mga application ng Numberly ay bumaba sa mga data ng pag-tracking ng web na ang kanilang mga kliyente ay makuha at magpadala (ang bawat kliyente ay may kanilang sarili na internally-developed mga application). Ang Numberly ay hindi may isang paraan upang i-impose ng isang katangian na skema sa data na ito, ngunit ito ay kailangan upang makuha at pagproseso ito. Sa mga salita ng Alexys, "MongoDB ay okay dito; ang kanyang flexibility ay magagawa dahil ito ay nagbibigay-daan sa amin upang lamang i-storage ang data sa isang lugar at i-query ito madaling." Ang ScyllaDB ay ginagamit para sa tatlong uri ng mga kaso ng paggamit sa Numberly: Real-time latency-sensitive data pipelines. Ito ay nangangahulugan ng maraming data enrichment, kung saan may maramihang mga source ng data na kailangan na mag-correlate, sa real-time, sa data pipelines. Ayon sa Alexys, "Ito ay napaka-mahalaga upang gawin ... at kailangan mo ng malakas na garantiya ng latency upang hindi batay ang SLAs [service-level agreements] ng mga application at data processes na ang iyong mga kliyente ay nakikipag-ugnayan sa down the pipe." Ang Numberly ay din naghahatid ng maraming batch at real-time workloads sa ScyllaDB dahil nagbibigay ito ng pinakamahusay sa parehong mga mundo (na ibinigay ng Numberly na nakalipas). “Ipinanganak namin ang Hive sa isang path at ang MongoDB sa ibang path. Ipinanganak namin ang lahat sa ScyllaDB at ang kanyang suportahan na Hadoop-like batch workloads at real-time pipeline workloads.” Web backends gamit ang GraphQL, na nag-impose ng isang katangian na schema. Ang ilang ng mga web backends ng Numberly ay inihahanda sa GraphQL. Kapag gumagana sa schema-based APIs, ito ay perfectly logic na magkaroon ng isang schema-based database na may mababang latency at mataas na magagamit. Sinabi ni Alexys: “Marami sa aming mga backend engineers, at ang mga frontend engineers, ay gumagamit ng ScyllaDB. Makikita namin ang isang trend ng mga tao na gumagamit ng ScyllaDB, ang higit pa at higit pa ng tech na mga tao ay nagtanong ‘I have this use case, would ScyllaDB be a good fit?’ Karamihan sa karamihan ng oras, ang solusyon ay ‘yes.’ Kaya, ang pag-adoptation ng ScyllaDB ay lumaki. MongoDB adoption ay flat, ngunit ang MongoDB ay siguradong dito upang mag-stay dahil ito ay may ilang napaka-interesting mga tampok. Bonus: More Insights mula sa Alexys Jacob Si Alexys ay isang mahusay na kontribusyon sa mga komunidad ng open source, dahil sa code at conference talks. Tingnan ang higit pa ng kanyang mga kontribusyon sa https://ultrabug.fr/ tungkol sa Mga pahinang tumuturo Cynthia ay Senior Director ng Content Strategy sa ScyllaDB. Siya ay nag-script tungkol sa pag-unlad ng software at quality engineering para sa higit sa 20 taon.