“有时候,我们为免费获得的东西付出了最高的代价。” -爱因斯坦
MongoDB 4+最近引入了对多文档事务的支持。
由于我们的项目刚刚迁移到4.2版,因此自然产生了问题:
- 性能会如何?
- 操作将减慢多少?
- 我们是否愿意为了(至少是某些)准确性而牺牲速度?
在研究文档和Internet时,问题只会增加:
- 交易会降低所有操作的速度吗?
- 操作组合将减慢多少速度?
让我们尝试找出答案。
为了声称至少一部分真相,您必须付出一些努力。
为了便于理解,我将实现分为三个步骤:
- 工具选择
- 操作组合和获得结果的描述
- 结果分析
现在分别讨论每个步骤。
工具选择:
- 需要一个测试MongoDB(具有最少数量的mongod进程的副本)及其驱动程序:mongodb-memory-server和mongodb是必需的。
- 为了简化测量时间,我选择了“微秒”模块
- : ttest, stdlib.
操作组合和获取结果的描述:我们
实现每个(主要)单独的操作insertOne,updateOne,deleteOne,findOne,insertMany * updateMany * deleteMany * find *及其组合insertOne + updateOne + deleteOne,insertOne + updateOne + deleteOne + findOne,insertMany * + updateMany * + deleteMany * insertMany * + updateMany * + deleteMany * +查找*有和没有使用事务。
测量每个操作的执行时间。
例如-具有和不具有事务的insertMany + updateMany + deleteMany
每个操作/度量将重复300次(为了进行分析,我们将在“中间”使用100个结果,即从101到200)**-我们称其为“微迭代” (通过单个操作或组合的迭代)。
现在,不断更改顺序,我们将执行100次“宏迭代”(1次“宏迭代” =“微迭代”的总数* 300)*
*绝对凭经验选择300的数量
**有关实现的更完整信息,我邀请您访问github存储库(本文下面的链接)
结果分析:
作为所有迭代的结果,我们以数组的形式获得了每个操作和操作组合的20,000个测量值(使用事务处理10,000个,不使用事务处理10,000个),
接下来,我们需要进行一些计算。
明显超出样本的作物结果
计算平均值
计算标准偏差
使用ttest(确认或否定原假设)确定样本之间是否存在统计学上的显着差异。
使用简单的图形,我们将结果可视化。例如,让我们结合使用insertMany + updateMany + deleteMany和insertOne的组合(所有其他结果将在“结论”部分以文本格式显示)。结果,生成的html文件包含一个图形,该图形的名称与操作或操作组合的名称相对应(非事务性迭代以青绿色表示,而事务性迭代以橙色表示)。 “具有统计学意义”(是/否)表示是否存在任何统计学意义上的差异。其他所有内容都是绝对值和相对值,分别以微秒和百分比为单位。
结论:
- : insertMany + updateMany + deleteMany ( )
- ( 7%): updateMany, find, insertOne + updateOne + deleteOne + findOne, insertMany + updateMany + deleteMany + find
- , (91%): updateOne, deleteMany, findOne
- ( 197% 792%): insertOne, insertMany, deleteOne, insertOne + updateOne + deleteOne
有关更多信息以及通过自己运行脚本来测试结果的能力,请访问github。
谢谢阅读。
随时发表评论,希望我们进行了很好的讨论。
另外,您也可以自己运行它并获得自己的结果。比较它们会很酷。
有用的链接:
medium.com/cashpositive/the-hitchhikers-guide-to-mongodb-transactions-with-mongoose-5bf8a6e22033
blog.yugabyte.com/are-mongodb-acid-transactions-ready-for-high-性能应用程序
medium.com/@Alibaba_Cloud/multi-document-transactions-on-mongodb-4-0-eebd662ac237
www.mongodb.com/blog/post/mongodb-multi-document-acid-transactions-general-availability
docs.mongodb.com/manual/core/write-operations-atomicity
www.dbta.com/Columns/MongoDB-Matters/Limitations-in-MongoDB-Transactions-127057.aspx
dzone.com/articles/multi-document-transactions-on-mongodb-40
www.dbta.com/Columns/MongoDB-Matters/MongoDB-Transactions-In-Depth-125890.aspx
www.codementor.io/@christkv/mongodb-transactions-vs-two-phase-commit-u6blq7465
docs.mongodb.com/manual/core/read-isolation-consistency-recency
mathworld.wolfram.com/Outlier.html
support.minitab.com/en-us/minitab-express/1/help-and-how-to/basic-statistics/inference/how-to/two-samples/2-sample-t/interpret-the-results/key-results