MongoDB与传统数据库的使用区别——批量插入与批量查询

标签: mongodb 传统 数据库 | 发表时间:2014-06-07 14:04 | 作者:shibin_1109
出处:http://www.iteye.com
我在百X知道上回答问题时经常遇到类似与这样的问题:MongoDB有没有像MySQL一样的ODBC驱动?MongoDB能不能像MySQL一样获取字段名称或类型。
我的回答是:不行,因为MongoDB不是MySQL。这个回答显得MongoDB太弱了,我的原意是你不能要求一个物理优秀教师帮你辅导数学,也许他能做到基本的教学,但他很难做到优秀数学教师那么全面。

今天讨论的问题是:批量插入和批量查询
昨天在百X知道上有人问起MongoDB的批量插入如何写,这个我还真没用过,一方面MongoDB的速度足够快让我从来没有想过去找这种方法,另一方面MongoDB的官网以及API里也找不到这种方法。
那就带来两个问题。
问题1:这样岂不是没有速度更快的批量插入么?
这个问题毫无技术含量,MongoDB怎么可能会比MySQL慢?这里还是涉及到大家经常用到的传统关系型数据库和NoSQL的本质区别问题,NoSQL的每次操作都非常轻量级,小型化,除了数据的写入外基本没有多余的操作。再举个栗子:MongoDB就是放东西(数据)时把东西扔入相应的柜子(数据库)即可,而MySQL则要保持与送东西人的沟通(双向连接保持),东西的折叠整理分格存储(事务+有模式)。MySQL的批量插入就是减少了沟通以及分格等过程,而MongoDB本身就不存在这些过程,因此MongoDB就不存在批量插入这个概念了。结论就是,MongoDB的普通插入比MySQL的批量插入还要快,或者说MongoDB的普通插入就是批量插入。
问题2:把多个操作放入一个事务里一起执行不就不能实现了?
这个问题更没有技术含量了,MongoDB有事务么?还是那句,不要把NoSQL当关系型数据库用。那岂不是MongoDB的数据完整性和数据安全性会很差?这个,还得再重复一遍,MongoDB的设计是为了处理大规模数据的,所以对数据完整性要求不是那么严格。如果非要较真儿的话,MongoDB也可以处理这种情况,就是getLastError,它会牺牲性能以获取数据操作是否正确,你可以在批量插入一批数据后调用一次这个方法,如果出错,就把这批数据重新操作一遍,一批调用getLastError一次,既可保证性能,又可保证数据安全。

批量查询
再来说一下批量查询,这里的批量对应于官网上的batch select的概念,可以理解为一次查询一批数据。很多人在使用数据库的时候会用:
Statement stmt = a.createStatement();
ResultSet rs = stmt.executeQuery(sql);
for(int i = 1; i < 10000; i++){
         //read data from rs
}
这样操作,会把数据库中的数据全部读入内存还是每条数据都去数据库中读一次?实际上两者都不是,MySQL会把部分数据放入内存,如果这部分数据读完了,那么再读入一部分。因为很久没用MySQL了,我记得C++的驱动中确实有一个类是用于把全部数据都读入内存的,不过这种方法很少人使用。
MongoDB的查询是这样的,你用Cursur去查询,如果没有设置batch size这个参数,那么MongoDB默认会返回101条数据,等到这101条数据读完了,也就是说用户想读第102条数据,那么驱动会再次去MongoDB中获取后面的一批数据,这批数据不是以个数记的,而是最大限制4M的大小,将这4M的数据返回供用户继续读,读完再申请4M。当然,你可以通过batch size来改变这一数值,如果设置了,那么每次返回都会返回batch size条数据。
转自: http://blog.sina.com.cn/s/blog_56545fd301013zav.html

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [mongodb 传统 数据库] 推荐:

MongoDB与传统数据库的使用区别——批量插入与批量查询

- - 数据库 - ITeye博客
我在百X知道上回答问题时经常遇到类似与这样的问题:MongoDB有没有像MySQL一样的ODBC驱动. MongoDB能不能像MySQL一样获取字段名称或类型. 我的回答是:不行,因为MongoDB不是MySQL. 这个回答显得MongoDB太弱了,我的原意是你不能要求一个物理优秀教师帮你辅导数学,也许他能做到基本的教学,但他很难做到优秀数学教师那么全面.

MongoDB数据库文档大全

- - CSDN博客推荐文章
MongoDB数据库简单介绍. MongoDB是一个高性能 ,开源 ,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储模式. MongoDB是用C++开发, 提供了以下功能:. 面向集合的存储:适合存储对象及JSON形式的数据. 动态查询:Mongo支持丰富的查询表达式.

Memcache缓存与Mongodb数据库的优势和应用

- - C++博客-牵着老婆满街逛
转载自: http://www.jzxue.com/shujuku/shujukuzonghe/201005/19-3807.html. 先说说自己对 Memcache和Mongodb的一些看法,主要是抛砖引玉了,希望看到大家的意见和补充. Memcache的优势我觉得总结下来主要体现在:. 可以由10台拥有4G内存的机器,构成一个40G的内存池,如果觉得还不够大可以增加机器,这样一个大的内存池,完全可以把大部分热点业务数据保存进去,由内存来阻挡大部分对数据库读的请求,对数据库释放可观的压力.

2015中国数据库大会Mongodb分享

- - CSDN博客推荐文章
本次分享由MongoDB大中华区技术顾问分享. “老人家”上来就问Mongo是什么意思,猜中有奖,还号称自己是最牛的MongoDB专家(在风筝冲浪圈子里…大家都懂的). 相信大家都不知道,容易理解为芒果(英文应该是mango). 实际上mongo是由这个英文humongous演变来的,表示“巨大的”的意思.

从MongoDB IPO谈谈企业级数据库市场

- - IT瘾-bigdata
作者:巨杉数据库 联合创始人&CTO王涛. 10月20日,NoSQL数据库MongoDB在NASDAQ正式 IPO,当日收于 32.07 美元. 截至10月27日,MongoDB报收30.89美元,公司市值保持在15亿美元左右,可以说是分布式数据库的“第一股”. 作为同样数据库行业的一员,也是分布式数据库产品厂商,巨杉一直关注MongoDB的发展.

NOSQL数据库大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase

- - 博客园_Ruby's Louvre
话说,尽管 SQL 数据库一直是我们IT行业中最有用的工具,然而,它们这样在行业中超过15年以上的“转正”终于就要寿终正寝了. 现在,虽然关系型数据库仍然无所不在,但它越来越不能满足我们的需要了. 但是,各种 "NoSQL" 数据库之间的差异比当年众多关系型数据库之间的差异要大许多. 这就加大了人们在建设自己的应用是选择合适的数据库的难度.

MongoDB数据库勒索,中国受害者数量超乎你的想象,SOS!

- - 博客园_新闻
今天,雷锋网编辑在刷朋友圈时,看到腾讯安全专家召唤提到:国内已经出现多起针对 MongoDB、ElasticSearch 的攻击勒索案例了. 最近在国外大火的 MongoDB 勒索已经到中国了. 对此,雷锋网马上与召唤取得联系,得知仅国内某安全公司近期就检测到 4 起针对国内 MongoDB 、ElasticSearch 进行的勒索案例.

非关系式数据库MongoDB获1.5亿美元融资,估值达12亿美元

- - 36氪 | 关注互联网创业
据彭博社 报道,非关系式数据库初创企业MongoDB在最新一轮的融资中获得了1.5亿美元的VC资金,其估值也已达到12亿美元. MongoDB是一种对象式数据库,据 介绍,在非关系式数据库中,这种数据库是功能最丰富、最像关系数据库的一种:. MongoDB是一个基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.