首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么此查询的Server 2012比MongoDB更快?

问为什么此查询的Server 2012比MongoDB更快?
EN

Stack Overflow用户
提问于 2014-03-23 16:38:11
回答 1查看 5.9K关注 0票数 7

我正在Server 2012和MongoDB 2.4.9之间进行一些性能测试。我在网上做了一些研究,发现了许多比较这两个数据库之间只比较插入性能的比较。我只对没有索引的select性能感兴趣。我设置了一个非常简单的测试。这是规格

Server安装

  • 安装只有一个整数字段的Server。
  • 插入100万个随机整数

MongoDB安装

  • 有两个字段_id和id1
  • 在id1字段中插入100万个随机整数

当我插入数字时,它们在两个数据库中都是完全相同的数字。随机数从1到1000不等。

Server查询

代码语言:javascript
复制
select id from a101 where id > 995

MongoDB查询

代码语言:javascript
复制
var q = Query.GT("id1", 995);        
foreach (var i in collection.Find(q))
{
     values.Add(i.id1);
}

结果:

  • SQL Server: 192 ms
  • MongoDB: 1109毫秒

对于我的模式,我不需要任何联接,只有非规范化数据-这就是为什么我考虑MongoDB。在在线阅读基准测试之后,我预计mongoDB要比Server快很多倍。我是不是做错了什么?再次,我想测试没有索引。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-23 18:26:12

在这种情况下,MongoDB可能要慢5倍,因为它需要读取和输出5倍的数据。

SQL表中的一行仅为4字节。但是在MongoDB中,它是一个4字节的整数加上一个12字节的ObjectId。此外,字段名是每个单独文档的一部分。字符串_id和id1是您检索的每个文档的一部分,因此添加了一些额外的字节。

这只是实际的有效载荷。当您查看BSONSpec.org时,可以看到您的文档由以下代码表示:

  • 一个32位整数的4字节,它是文档的总长度。
  • 1字节0x01表示“现在来了一个ObjectId”
  • 以空结尾的字符串_id的4个字节
  • ObjectId的12个字节
  • 1字节0x10表示“现在有一个32位整数”(最小的整数)
  • 以空结尾的字符串id1的4个字节
  • 32位整数的4个字节
  • 1标记文档结束的尾随0x00

总共是31个字节。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22593722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档