Windows 上的 Mongodb 性能

2024-02-03

我最近一直在研究可用于 .NET 的 nosql 选项,并且 MongoDB 在可用性和支持方面明显成为赢家,所以今晚我决定尝试一下。我从 mongodb 站点下载了版本 1.2.4(Windows x64 二进制)并使用以下选项运行它:

C:\mongodb\bin>mkdir data
C:\mongodb\bin>mongod -dbpath ./data --cpu --quiet

然后我加载了最新的 mongodb-csharp 驱动程序http://github.com/samus/mongodb-csharp http://github.com/samus/mongodb-csharp并立即运行基准程序。在听说 MongoDB 有多“快得惊人”之后,我对糟糕的基准性能感到相当震惊。

Starting Tests
encode (small).........................................320000 00:00:00.0156250
encode (medium)........................................80000 00:00:00.0625000
encode (large).........................................1818 00:00:02.7500000
decode (small).........................................320000 00:00:00.0156250
decode (medium)........................................160000 00:00:00.0312500
decode (large).........................................2370 00:00:02.1093750
insert (small, no index)...............................2176 00:00:02.2968750
insert (medium, no index)..............................2269 00:00:02.2031250
insert (large, no index)...............................778 00:00:06.4218750
insert (small, indexed)................................2051 00:00:02.4375000
insert (medium, indexed)...............................2133 00:00:02.3437500
insert (large, indexed)................................835 00:00:05.9843750
batch insert (small, no index).........................53333 00:00:00.0937500
batch insert (medium, no index)........................26666 00:00:00.1875000
batch insert (large, no index).........................1114 00:00:04.4843750
find_one (small, no index).............................350 00:00:14.2812500
find_one (medium, no index)............................204 00:00:24.4687500
find_one (large, no index).............................135 00:00:37.0156250
find_one (small, indexed)..............................352 00:00:14.1718750
find_one (medium, indexed).............................184 00:00:27.0937500
find_one (large, indexed)..............................128 00:00:38.9062500
find (small, no index).................................516 00:00:09.6718750
find (medium, no index)................................316 00:00:15.7812500
find (large, no index).................................216 00:00:23.0468750
find (small, indexed)..................................532 00:00:09.3906250
find (medium, indexed).................................346 00:00:14.4375000
find (large, indexed)..................................212 00:00:23.5468750
find range (small, indexed)............................440 00:00:11.3593750
find range (medium, indexed)...........................294 00:00:16.9531250
find range (large, indexed)............................199 00:00:25.0625000
Press any key to continue...

首先,我可以从 SQL Server Express 获得更好的非批量插入性能。然而,真正令我震惊的是 find_nnnn 查询的缓慢性能。为什么从 MongoDB 检索数据这么慢?我缺少什么?

Edit:这一切都在本地计算机上进行,没有网络延迟或其他任何情况。在整个测试运行期间,MongoDB 的 CPU 使用率约为 75%。另外,我对基准程序进行了跟踪,并确认 50% 的 CPU 时间用于等待 MongoDB 返回数据,因此这不是 C# 驱动程序的性能问题。


我也运行了该基准测试。这段代码有很多bug。例如,索引的创建失败,但异常被吞掉,因此搜索仍然很慢。

但也要注意,大对象有很多“细节对象”。它是一个层次结构,而不是单个记录。一份文档有 280 条详细“记录”。将如此大的文档与 SQL Server 等 RDBMS 表中的一行进行比较是不公平的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 上的 Mongodb 性能 的相关文章

  • 如何使用批处理文件创建 EXE 可执行文件? [复制]

    这个问题在这里已经有答案了 我希望能够简单地运行 Windows 批处理文件并让它创建 exe 可执行文件 我知道您可以使用以下脚本批量创建文件 echo off echo This will be in a text file gt gt
  • 环回关系不填充对象 ID 数组

    到目前为止我有 2 个模型 工作流程核心 工作流程步骤 工作流核心有一个steps属性 该属性是数组类型并且包含1 多个步骤 当呼叫接通时工作流程核心响应正文不会使用实际步骤对象填充步骤数组 工作流程核心 json name workflo
  • Flask 不加载配置

    我在 Flask 中加载配置时遇到问题 from config import config DevelopmentConfig TestingConfig ProductionConfig def create app config nam
  • 在java中将RFC3339 DateTime转换为Date [重复]

    这个问题在这里已经有答案了 如何转换RFC 3339 https www rfc editor org rfc rfc3339java 中的 com google api client util DateTime 到 DateTime 例如
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • mongoengine 操作的原子性如何

    我正在尝试在对象的状态之间转换 如下所示 User objects id user id state STATE WAITING update one set state STATE FINISHED The question是 是否存在这
  • mongo BadValue 未知运算符:$or

    该集合有一份文档 id ObjectId 54b513933aca242d9915a787 carriers carrier ObjectId 54b54d223aca242d9915a788 carryingInterval from I
  • Windows 控制台支持 ANSI 吗?

    Windows 控制台支持 ANSI 控制字符吗 默认情况下它不支持许多 ANSI 控制字符 维基百科文章中也提到了这一点 http en wikipedia org wiki ANSI escape code http en wikipe
  • 有没有使用 Java 访问 Windows COM 方法的方法?

    我有一个应用程序 它利用 JNA 来调用 C 硬件抽象库中的函数 支持的硬件设备之一需要初始化 Windows COM 子系统 通过 CoInitialize 或 CoInitializeEx 有谁知道有什么 Java 库可以做到这一点吗
  • 我可以将 Play 与 DynamoDB 一起用于 AWS 上的 Web 应用程序吗?

    我正在为最终用户设计一个图像存储应用程序 它将具有许多 CRUD 类型的功能 我想在 Amazon Web Services AWS 上托管该应用程序 并打算使用该游戏 框架 S3 和 NoSQL 数据库 我找不到适用于 Play 的 Dy
  • MongoDB Java 嵌套文档无法使用键名中的点进行访问

    当在Java中使用MongoDB API时 我试图检索以下值two在如下所示的文档中 data id 1234 one two three 我正在运行这个 MongoCollection
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • MongoDB 嵌套数组查询

    我问这个作为评论another https stackoverflow com questions 5250652 query a nested array in mongodb问题 还发了一个question https groups g
  • 在 python 2 或 python 3 中编写 csv 文件的便携式方法

    在我的 Windows 机器上 我通常在 python 2 中这样做来编写 csv 文件 import csv f open out csv wb cr csv writer f delimiter cr writerow a b c f
  • 后台地理围栏 Windows Phone 8.1 (WinRT)

    Issue 我试图在 WP8 1 WinRT 中发生地理围栏事件 进入 退出 时触发后台任务 我已经编写了一个示例应用程序来尝试让它工作 但似乎无法做到这一点 到目前为止 我已采取以下步骤来尝试让地理围栏在后台运行 检查位置功能 创建 注册
  • 获取文件夹及其子文件夹中最长文件路径的长度

    我正在寻找一个可以从命令行 批处理 PowerShell 运行的脚本 该脚本将遍历文件夹及其子文件夹 并返回一个数字 该数字是最长文件路径的长度 我已经看到了一些批处理和 PowerShell 脚本 例如 如何在 Windows 中查找路径
  • 使用 Linq to XML 将 XElement 添加到 XML 文件

    使用 Linq to XML 我尝试将 XElement 添加到现有 XML 文件 它必须在 Windows Phone NET 框架中完成 目前我的 XML 文件如下所示
  • MongoDB:仅获取过去 24 小时内创建的文档?

    我想限制我所做的查询仅查看过去 24 小时内创建的文档 构造此查询的最佳方式是什么 如何根据日期进行限制 Add createdAt字段 索引它 然后查询 db getCollection COLLECTION NAME find crea
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 批处理文件 - 读取特定行,并将该行中的特定字符串保存为变量

    有没有办法让 for f 循环 或其他任何东西 读取特定行 这是我到目前为止的代码 它读取每一行的第一个单词 echo off set file readtest txt for f tokens 1 delims A in file do

随机推荐

  • Inno Setup 安装 - 访问被拒绝

    我已经使用 inno setup 创建了一个安装 我的应用程序 除其他外 运行后会在子文件夹中创建一个 pdf 文件 然后打开它 但 Windows 7 说访问被拒绝并弹出异常 怎么了 如何使用 innosetup 授予对子文件夹的访问权限
  • 在 python 中处理 try except 的更简洁的方法

    所以 假设我有 3 个不同的调用something something1 and something2 现在 我称之为 try something something1 something2 except Keyerror as e pri
  • VS2012中“从源代码管理中排除”发生了什么

    我想从 TFS 2012 源代码管理中排除代码文件夹中的某些文件 在 VS2012 之前 这是通过 源代码管理资源管理器 右键菜单中的 从源代码管理中排除 命令来完成的 但在VS2012中我找不到它 有人知道它在哪里吗 顺便说一句 我正在使
  • 将类型限制为特定类型

    是否可以将泛型方法限制在特定类型上 我想写这样的东西 public T GetValue
  • 如何在Android中使用SetGroup()在组中显示通知?

    我尝试过使用 0 通知 ID 以及唯一的通知 ID 还使用了 setGroup 如下所示 它仍然每次都会生成一个新的通知 我想合并通知正文并将标题设置为通用 class MyFirebaseMessagingService Firebase
  • 正则表达式非捕获组 - 无用?

    我试图理解这个概念 但我真的看不出它有什么用 所以我假设我没有抓住重点 例如 这个正则表达式 0 9 st nd rd th 将匹配带或不带 st rd 等后缀的数字 So 1st match 0 9 st nd rd th g 返回 第一
  • 如何在 R 中导出 GBM 模型?

    是否有标准 或可用 方法在 R 中导出 GBM 模型 PMML 可以工作 但是当我尝试使用 pmml 库时 可能是错误的 我收到错误 例如 我的代码看起来类似于 library gbm library pmml model lt gbm f
  • VSCode:用户设置中的 TextMate 正则表达式

    我正在尝试更改主题以更适合我的日常使用 但在尝试自定义特定单词或模式时遇到了一些麻烦 我现在正在使用这种格式 editor tokenColorCustomizations textMateRules scope comment setti
  • 如何使用 Spark 计算累积和

    我有一个 String Int 的 rdd 它按键排序 val data Array c1 6 c2 3 c3 4 val rdd sc parallelize data sortByKey 现在我想以零开始第一个键的值 并将后续键作为先前
  • Eclipse 中的 Jetty 8.1.1.v20120215 和 web 应用程序 (JSF + Maven)

    我正在尝试在 Eclipse 中运行我的 web 应用程序 使用 JSf Jetty 8 1 1 v20120215 我下载了 Jetty Adapter 然后在 Eclipse 中添加了 Jetty Server 8 1 然后我在 Jet
  • 如何开始使用 Perl 进行网页抓取?

    我有兴趣学习 Perl 我正在使用 Learning Perl 书籍和 cpan 的网站作为参考 我期待着使用 Perl 做一些网页 文本抓取应用程序来应用我所学到的东西 请建议我一些好的选择 这不是家庭作业 想要在 Perl 中做一些事情
  • WebRTC、捕获屏幕

    我当前的问题是 我想找到一种在 Android 上的 webrtc 连接期间捕获帧 屏幕截图的方法 我知道这里已经有一些解决方案 但没有一个对我有用 按照我目前的方法 我遵循了这个Gist https gist github com Eri
  • 如何在 Python 中从 JavaScript CryptoJS.AES.encrypt(password, passphrase) 解密密码

    我有一个通过 JavaScript 加密的密码 var password sample var passphrase sample passphrase CryptoJS AES encrypt password passphrase 然后
  • Jenkins Pipeline:查看子构建作业的日志

    我有一个詹金斯管道正在运行 作业 作为其阶段之一 我想知道 有没有一种方法可以查看管道中构建作业的日志 而无需单击作业并查看控制台输出 这只会让您更容易地看到失败 而无需多次点击 是的 有一种方法可以做到这一点 不幸的是它看起来没有记录 T
  • NodeJS - Socket.IO 设置:提供静态内容,无需握手(Rackspace 云服务器上的 Ubuntu)

    我已经在 Rackspace 上安装了 Ubuntu node js 和 Socket IO 当我尝试一个简单的服务器应用程序并尝试使用客户端请求时 我仅得到 提供的静态内容 而不是握手 在调试中的浏览器中 我可以看到 Hello S 在服
  • SQL Server:如何中止查询分析器中的一系列批处理?

    我有一系列由特殊查询分析器批处理分隔符关键字分隔的 T SQL 语句 GO 如果一个批次失败 我需要查询分析器不要尝试后续批次 我希望它停止处理这一系列批次 例如 PRINT This runs go SELECT 0 0 This cau
  • 在通知系统中每个通知要插入多少行?

    继从这个问题 https stackoverflow com questions 9735578 building a notification system我正在考虑构建一个类似的通知系统 并且我有一个问题 我认为它有一个明显的答案 但我
  • ó 在 xml 文件中不允许,但在 .net 资源文件中允许?

    我正在解析一些 net 资源文件 resx 其中 我有这样的数据 informaci oacute n 这适用于我的 net 应用程序 但是当我尝试在我的 xml 文档中加载此文件时 XDocument xmlDoc XDocument P
  • 如何查看mysql连接的默认端口号?连接不工作! jdbc连接

    我正在尝试使用 java 文件中的 jdbc 连接数据库 它根本无法连接并不断给我错误 出了问题 我猜这是因为端口号 因为所有其他数据 例如用户名 密码和其他代码 似乎都是正确的 我想检查默认端口号 以便我可以正确尝试 我确实尝试使用所有这
  • Windows 上的 Mongodb 性能

    我最近一直在研究可用于 NET 的 nosql 选项 并且 MongoDB 在可用性和支持方面明显成为赢家 所以今晚我决定尝试一下 我从 mongodb 站点下载了版本 1 2 4 Windows x64 二进制 并使用以下选项运行它 C