1"use strict";(self.webpackChunkstroppy_docs=self.webpackChunkstroppy_docs||[]).push([["6227"],{6999(e,d,s){s.r(d),s.d(d,{metadata:()=>n,default:()=>j,frontMatter:()=>i,contentTitle:()=>l,toc:()=>h,assets:()=>c});var n=JSON.parse('{"id":"legacy/mongodb-report","title":"MongoDB Report","description":"Performance and correctness testing of MongoDB with the original Stroppy framework","source":"@site/versioned_docs/version-5.1.2/legacy/mongodb-report.md","sourceDirName":"legacy","slug":"/legacy/mongodb-report","permalink":"/docs/5.1.2/legacy/mongodb-report","draft":false,"unlisted":false,"editUrl":"https://github.com/stroppy-io/stroppy-io.github.io/edit/next/versioned_docs/version-5.1.2/legacy/mongodb-report.md","tags":[],"version":"5.1.2","sidebarPosition":4,"frontMatter":{"sidebar_position":4,"title":"MongoDB Report","description":"Performance and correctness testing of MongoDB with the original Stroppy framework"},"sidebar":"legacySidebar","previous":{"title":"FoundationDB Report","permalink":"/docs/5.1.2/legacy/fdb-report"}}'),r=s(4848),t=s(8453);let i={sidebar_position:4,title:"MongoDB Report",description:"Performance and correctness testing of MongoDB with the original Stroppy framework"},l="MongoDB Benchmark Report",c={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Testing Goals",id:"testing-goals",level:3},{value:"General Results",id:"general-results",level:2},{value:"Table 1: Key Test Results",id:"table-1-key-test-results",level:3},{value:"Table 2: Latencies",id:"table-2-latencies",level:3},{value:"Table 3: Data Set Sizes",id:"table-3-data-set-sizes",level:3},{value:"Key Findings",id:"key-findings",level:3},{value:"Failover Tests",id:"failover-tests",level:2},{value:"Final Remarks",id:"final-remarks",level:2},{value:"Conclusions",id:"conclusions",level:2}];function x(e){let d={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.header,{children:(0,r.jsx)(d.h1,{id:"mongodb-benchmark-report",children:"MongoDB Benchmark Report"})}),"\n",(0,r.jsxs)(d.p,{children:[":::caution Legacy Documentation\nThis report was produced using the ",(0,r.jsx)(d.strong,{children:"original Stroppy framework"}
1),". The methodology, test infrastructure, and tooling differ from the current CLI version.\n:::"]}),"\n",(0,r.jsx)(d.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(d.p,{children:'MongoDB is a schema-less document-oriented database. A pioneer of the document data model, MongoDB defined much of what we understand under "NoSQL" databases today.'}),"\n",(0,r.jsxs)(d.p,{children:["MongoDB's building block for horizontal scaling is the ",(0,r.jsx)(d.strong,{children:"replica set"})," \u2014 a set of nodes each having a full copy of the data, with one taking the leading role. When data outgrows a single replica set, another is added and data is redistributed (sharding)."]}),"\n",(0,r.jsx)(d.p,{children:"Query routing and execution is managed by a load balancer and configuration servers. The configuration servers can form their own replica set for high availability. Different node roles make MongoDB cluster configuration trickier but more flexible than homogenous clusters."}),"\n",(0,r.jsx)(d.h3,{id:"testing-goals",children:"Testing Goals"}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:"Check if MongoDB transactions are ACID"}),"\n",(0,r.jsx)(d.li,{children:"Check if hardware demands are moderate compared to PostgreSQL and FoundationDB"}),"\n",(0,r.jsx)(d.li,{children:"Check if the system scales up and out (doubling/quadrupling cores or shards)"}),"\n"]}),"\n",(0,r.jsx)(d.h2,{id:"general-results",children:"General Results"}),"\n",(0,r.jsx)(d.admonition,{type:"note",children:(0,r.jsxs)(d.ol,{children:["\n",(0,r.jsx)(d.li,{children:"All tests used MongoDB defaults. Configuration tuning never had noticeable impact."}),"\n",(0,r.jsx)(d.li,{children:"All results refer to MongoDB 4.4. Version 5.0 produced results within error margin. Percona MongoDB Server showed no significant difference."}),"\n",(0,r.jsx)(d.li,{children:"The Community Operator doesn't support sharding. Tests #1-2 used Community Operator; subsequent tests used Percona Operator."}),"\n",(0,r.jsx)(d.li,{children:"Hash-based sharding was used (more even distribution, stable tail latency for non-range workloads)."}),"\n"]})}),"\n",(0,r.jsx)(d.h3,{id:"table-1-key-test-results",children:"Table 1: Key Test Results"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"#"}),(0,r.jsx)(d.th,{children:"VCPU/Node"}),(0,r.jsx)(d.th,{children:"RAM (GB)"}),(0,r.jsx)(d.th,{children:"HDD (GB)"}),(0,r.jsx)(d.th,{children:"Shards"}),(0,r.jsx)(d.th,{children:"Replicas"}),(0,r.jsx)(d.th,{children:"Clients"}),(0,r.jsx)(d.th,{children:"Nodes"}),(0,r.jsx)(d.th,{children:"Accounts (M)"}),(0,r.jsx)(d.th,{children:"Transfers (M)"}),(0,r.jsx)(d.th,{children:(0,r.jsx)(d.strong,{children:"TPS"})})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"340"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"720"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"64"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"1,843"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"2,661"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"5"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"32"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"427"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"2+arb"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"2,725"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"7"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"2,761"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"2+arb"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"2,592"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"9"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"2,551"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"575"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"11"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"445"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"1,171"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"13"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"1,000"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"443"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"14"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"1,000"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"718"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"15"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"1,000"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"670"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"1,000"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"947"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"17"}),(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"40"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"1,000"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"3,272"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"18"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"653"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"19"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"128"}),(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"534"})})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"table-2-latencies",children:"Table 2: Latencies"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"#"}
1),(0,r.jsx)(d.th,{children:"Median (ms)"}),(0,r.jsx)(d.th,{children:"Max (ms)"}),(0,r.jsx)(d.th,{children:"p99 (ms)"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"22"}),(0,r.jsx)(d.td,{children:"401"}),(0,r.jsx)(d.td,{children:"79"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"2"}),(0,r.jsx)(d.td,{children:"47"}),(0,r.jsx)(d.td,{children:"793"}),(0,r.jsx)(d.td,{children:"178"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"3"}),(0,r.jsx)(d.td,{children:"35"}),(0,r.jsx)(d.td,{children:"1,037"}),(0,r.jsx)(d.td,{children:"104"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"4"}),(0,r.jsx)(d.td,{children:"45"}),(0,r.jsx)(d.td,{children:"1,807"}),(0,r.jsx)(d.td,{children:"172"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"5"}),(0,r.jsx)(d.td,{children:"75"}),(0,r.jsx)(d.td,{children:"800"}),(0,r.jsx)(d.td,{children:"217"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"6"}),(0,r.jsx)(d.td,{children:"47"}),(0,r.jsx)(d.td,{children:"2,763"}),(0,r.jsx)(d.td,{children:"173"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"7"}),(0,r.jsx)(d.td,{children:"46"}),(0,r.jsx)(d.td,{children:"2,424"}),(0,r.jsx)(d.td,{children:"171"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"8"}),(0,r.jsx)(d.td,{children:"49"}),(0,r.jsx)(d.td,{children:"26,515"}),(0,r.jsx)(d.td,{children:"169"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"9"}),(0,r.jsx)(d.td,{children:"50"}),(0,r.jsx)(d.td,{children:"2,066"}),(0,r.jsx)(d.td,{children:"221"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"222"}),(0,r.jsx)(d.td,{children:"4,052"}),(0,r.jsx)(d.td,{children:"801"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"11"}),(0,r.jsx)(d.td,{children:"287"}),(0,r.jsx)(d.td,{children:"6,372"}),(0,r.jsx)(d.td,{children:"1,434"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"12"}),(0,r.jsx)(d.td,{children:"109"}),(0,r.jsx)(d.td,{children:"4,148"}),(0,r.jsx)(d.td,{children:"500"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"13"}),(0,r.jsx)(d.td,{children:"288"}),(0,r.jsx)(d.td,{children:"7,293"}),(0,r.jsx)(d.td,{children:"1,099"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"14"}),(0,r.jsx)(d.td,{children:"178"}),(0,r.jsx)(d.td,{children:"4,137"}),(0,r.jsx)(d.td,{children:"867"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"15"}),(0,r.jsx)(d.td,{children:"190"}),(0,r.jsx)(d.td,{children:"5,917"}),(0,r.jsx)(d.td,{children:"631"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"16"}),(0,r.jsx)(d.td,{children:"135"}),(0,r.jsx)(d.td,{children:"5,578"}),(0,r.jsx)(d.td,{children:"898"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"17"}),(0,r.jsx)(d.td,{children:"39"}),(0,r.jsx)(d.td,{children:"1,824"}),(0,r.jsx)(d.td,{children:"111"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"18"}),(0,r.jsx)(d.td,{children:"195"}),(0,r.jsx)(d.td,{children:"4,990"}),(0,r.jsx)(d.td,{children:"662"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"19"}),(0,r.jsx)(d.td,{children:"239"}),(0,r.jsx)(d.td,{children:"2,972"}),(0,r.jsx)(d.td,{children:"657"})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"table-3-data-set-sizes",children:"Table 3: Data Set Sizes"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Accounts (M)"}),(0,r.jsx)(d.th,{children:"Transfers (M)"}),(0,r.jsx)(d.th,{children:"MongoDB"}),(0,r.jsx)(d.th,{children:"FoundationDB"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"3 GB"}),(0,r.jsx)(d.td,{children:"3 GB"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"100"}),(0,r.jsx)(d.td,{children:"24 GB"}),(0,r.jsx)(d.td,{children:"32 GB"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"1,000"}),(0,r.jsx)(d.td,{children:"10"}),(0,r.jsx)(d.td,{children:"136 GB"}),(0,r.jsx)(d.td,{children:"127 GB"})]})]})]}),"\n",(0,r.jsx)(d.h3,{id:"key-findings",children:"Key Findings"}),"\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Scale up, not out."})," Transaction performance in MongoDB is bound to the throughput of a single node and does not improve much by adding replica sets."]}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:"For memory-resident workloads (tests #1-#4): doubling cores gives proportional speedup"}),"\n",(0,r.jsxs)(d.li,{children:["Splitting the same compute across replica sets gives ",(0,r.jsx)(d.em,{children:"lower"})," performance (test #5)"]}),"\n",(0,r.jsx)(d.li,{children:"Once data exceeds RAM, performance drops discretely then stabilizes"}),"\n",(0,r.jsx)(d.li,{children:"Best result (#17): single replica set, 12 cores, 40GB RAM = 3,272 TPS"}),"\n",(0,r.jsx)(d.li,{children:"CPU-bound on master replica (>80% utilization)"}),"\n"]}),"\n",(0,r.jsx)(d.p,{children:(0,r.jsx)(d.strong,{children:"Sharding insights:"})}),"\n",(0,r.jsxs)(d.ul,{children:["\n",(0,r.jsx)(d.li,{children:"Going from 2 to 4 shards with 4x CPU gave only 62% performance gain"}),"\n",(0,r.jsx)(d.li,{children:"XFS was ~22% faster than EXT4 for memory-bound workloads, 7% slower for disk-bound"}),"\n",(0,r.jsx)(d.li,{children:"Sharded clusters require separate balancer and config server replica sets (hidden cost)"}),"\n"]}),"\n",(0,r.jsxs)(d.p,{children:[(0,r.jsx)(d.strong,{children:"Optimal concurrency:"})," 128 clients (lower than PostgreSQL at 256 or FoundationDB at 512)."]}),"\n",(0,r.jsx)(d.h2,{id:"failover-tests",children:"Failover Tests"}),"\n",(0,r.jsx)(d.p,{children:"Tests #18 and #19 used 2-replica-set cluster
1s:"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Scenario"}),(0,r.jsx)(d.th,{children:"Result"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Restart any replica on any shard every 2 min"}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.strong,{children:"Failed"})," \u2014 couldn't complete data loading"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Restart one predefined replica on one shard every 2 min"}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.strong,{children:"Failed"})," \u2014 couldn't complete data loading"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Disconnect one predefined replica on one shard every 2 min"}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.strong,{children:"Failed"})," \u2014 TransactionExceededLifetimeLimitSeconds"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsxs)(d.td,{children:["Restart one predefined replica on ",(0,r.jsx)(d.em,{children:"different"})," shards every 2 min"]}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.strong,{children:"Passed"})," (test #18)"]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"100% network degradation between two replicas on same shard every 2 min"}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.strong,{children:"Passed"})," (test #19)"]})]})]})]}),"\n",(0,r.jsx)(d.p,{children:"Brief network partitions don't cause noticeable degradation. However, more aggressive failure scenarios prevented test completion."}),"\n",(0,r.jsx)(d.h2,{id:"final-remarks",children:"Final Remarks"}),"\n",(0,r.jsxs)(d.ol,{children:["\n",(0,r.jsxs)(d.li,{children:["Default durability must be elevated to ",(0,r.jsx)(d.code,{children:"w:majority"})," with ",(0,r.jsx)(d.code,{children:"wtimeout"})," on. Without this, inconsistent data was observed."]}),"\n",(0,r.jsxs)(d.li,{children:["Multi-document transactions must read from the master and use ",(0,r.jsx)(d.code,{children:"writeConcernMajorityJournalDefault"}),"."]}),"\n",(0,r.jsx)(d.li,{children:"WiredTiger uses MVCC, but MongoDB's query layer adds multi-granularity locking (possibly legacy from MMAPv1)."}),"\n"]}),"\n",(0,r.jsx)(d.h2,{id:"conclusions",children:"Conclusions"}),"\n",(0,r.jsx)(d.p,{children:"Over 100 test runs in 3 months. Comparison with FoundationDB and PostgreSQL:"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Comparison"}),(0,r.jsx)(d.th,{children:"MongoDB"}),(0,r.jsx)(d.th,{children:"Competitor"}),(0,r.jsx)(d.th,{children:"Ratio"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Test #1 (minimal config)"}
1),(0,r.jsx)(d.td,{children:"340 TPS"}),(0,r.jsx)(d.td,{children:"FDB: 2,263 TPS"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"6.7x slower"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Test #5 (small scale-out)"}),(0,r.jsx)(d.td,{children:"427 TPS"}),(0,r.jsx)(d.td,{children:"FDB: ~2,200 TPS"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"~5x slower"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Test #7 (medium, best single RS)"}),(0,r.jsx)(d.td,{children:"2,761 TPS"}),(0,r.jsx)(d.td,{children:"FDB: 5,782 TPS"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"2.1x slower"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Test #7 (medium, best single RS)"}),(0,r.jsx)(d.td,{children:"2,761 TPS"}),(0,r.jsx)(d.td,{children:"PG: ~4,663 TPS"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"1.7x slower"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Test #17 (big, best overall)"}),(0,r.jsx)(d.td,{children:"3,272 TPS"}),(0,r.jsx)(d.td,{children:"FDB: 3,369 TPS"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"Comparable"})})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:"Test #17 hardware"}),(0,r.jsx)(d.td,{children:"36 cores, 120GB RAM"}),(0,r.jsx)(d.td,{children:"FDB: 5 cores, 60GB RAM"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.strong,{children:"7x more resources"})})]})]})]}),"\n",(0,r.jsx)(d.p,{children:"For multi-document transaction workloads, MongoDB scales best vertically. Even in large clusters, CPU and disk were near 100% utilization. Horizontal scaling showed sub-linear improvement insufficient to justify the added complexity."})]})}function j(e={}){let{wrapper:d}={...(0,t.R)(),...e.components};return d?(0,r.jsx)(d,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}},8453(e,d,s){s.d(d,{R:()=>i,x:()=>l});var n=s(6540);let r={},t=n.createContext(r);function i(e){let d=n.useContext(t);return n.useMemo(function(){return"function"==typeof e?e(d):{...d,...e}},[d,e])}function l(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(t.Provider,{value:d},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.