mongodb 时区问题新手请问个问题

Sven Slootweg (joepie91)是一名黑客,同时也是CrytoCC的创建者,现在提供Node.js代码评审服务。近日,他在个人博客上发表了一篇博文《为什么你应该永远、永远、永远不要再使用MongoDB》。在文中,他列举了如下理由:丢失数据(见1、2);默认忽略错误,假设每次写入都是成功的,在32位系统上,这可能会导致数据无声无息地丢失;即使是在MongoDB宣传的适用场景下,其性能依然不高(见3、4);几乎在所有的应用场景下,开发者都会被迫养成使用隐式模式的坏习惯(见4);存在锁问题(见4);对安全问题响应很慢(见5);不符合ACID(见6);扩展和维护困难;JSON存储也不是MongoDB独有的功能,PostgreSQL、CouchDB也支持(见7、8)。joepie91认为,MongoDB不仅存在诸多问题,而且并无突出之处。如果项目涉及用户账户或者两条记录之间存在某种关系,那么就应该使用关系型数据库,而不是文档存储;如果项目在使用Mongoose,
那么也应该使用关系型数据库,因为Mongoose只是使用文档存储模拟了有模式的关系型数据库。因此,大多数情况实际上需要的都是一个关系型数据库。在
这些情况下,PostgreSQL是个不错的可选方案。开发者可以使用查询构建器或ORM来简化使用过程,比如,在Node.js中,可以选用Knex、Bookshelf、Sequelize或Waterline。即使真得需要一个文档存储,那么也有比MongoDB更好的选项。
另外,他也不认为MongoDB适合于创建原型,因为如果生产环境使用不同的数据库,则还需要重写所有的代码。总之,MongoDB并没有什么适用场景。
它在技术上比不上其它可选方案,并没有提供真正有用的独有的特性,而且开发人员也无法确保数据一致性和安全。最后,joepie91指出,流行度并不等同
于质量,只能说明产品有一个不错的市场团队:永远不要因为“其他人那样做”就使用一个数据库,对于一个特定的数据库,要自己研究它的优点和不足。joepie91的观点在Hack News上得到了广泛的赞同。网友karmakaze也认为,有了PostgreSQL 9.4,就没有任何理由要使用MongoDB了(JSONB比BSON更合用),另外还可以使用CouchDB。对于MongoDB的具体限制,网友giaour建议阅读aphyr的系列文章Call Me Maybe,并指出,虽然存在已知的变通方案,但那大大降低了MongoDB的开发体验。网友Animats认为,如果站点的流量比维基小,那么使用某种关系型数据库就可以了。网友PebblesHD有类似的观点:作为一个规模较小的部署……,只安装一个基本的MySQL有什么问题吗?在我们的内部维基上,我们每天的访问量已经超过了2万次……但是也有一些不同的声音。例如,网友threeseed就表示,MongoDB仍然是最容易安装和使用的数据库之一。对此,joepie91回复如下:以错误的方式做事,想不容易都难——MongoDB恰好就是那么做的。它不需要设置身份验证或表模式,因此才看上去“易于安装”。但实际上,为了节省10分钟,你正在浪费几个小时的时间。因为稍后,你将会遇到入侵(没有身份验证)或数据破坏……Shodan的报道也佐证了joepie91的这一说法,互联网上有将近3万个MongoDB实例没有启用任何的身份验证。这个问题随处可见,而且已经存在多年。网友toyg则评论说:我最近首次使用了MongoDB,是在一个内部项目里。我认为,没有模式确实显著了提升了开发速度……现在项目已经成熟,回过头来,我可以看到
为什么关系型数据库会更合适,但如果我从开始就使用RDBMS,那么我可能无法这么快地完成迁移。虽然切换到真正的RDBMS意味着要修改三两个类,但变
化不大。所以,我不同意MongoDB不适合原型开发的说法。joepie91对“修改三两个类,但变化不大”的说法提出了质疑,因为根据自己从事代码审查的经验,迁移到不同的数据库通常需要大量的工作。至于切换速度,joepie91指出,在一个有回滚机制的系统中,可能会更快。然而,在有些情况下,开发者并没有其它选择。例如,有网友就提出,Meteor就使用而且只能使用MongoDB。而由于同Hadoop的合作伙伴关系,MongoDB同Hadoop有很好的集成,因此,它在大数据分析领域非常流行。另外,来自SourceGear的软件开发人员Eric Sink在读过的joepie91文章之后表示:(他所列举的内容)部分(也许全部)确有其事。事实上,现在,就假设他所写的都是正确的。我这里不是要说作者是错的。更确切地说,我这里想指出的是,这种博文只能让我了解很少有关MongoDB的知识,但却让我感受到了写这篇博文的人的许多情感。他觉得,不能因为那些问题就彻底地否定MongoDB,毕竟:MongoDB是顶级的NoSQL供应商。每天,成千上万的企业用它为数以百万计的用户提供服务。像所有有大量用户的新生软件一样,它有漏洞和缺陷。但它正稳步改善。任何有关技术缺陷的讨论,如果无助于解决问题,那么很大程度上只能是一种情绪的宣泄。运维网(cnyunwei) 
 文章为作者独立观点,不代表大不六文章网立场
的最新文章
当被问到Linux体系结构(就是Linux系统是怎么构成的)时,我们可以参照下图这么回答:从大的方面讲,Linux体系结构可以分为两块……Sysstat 11.1.8 开发版,Sysstat 10.0.8 稳定版发布,为 pidstat,tapeBalanceNG 3.610 发布,此版本某些不必要的符号链接不再创建安装包 (applies to RHHAProxy 1.6.1 发布,主要是修复 HAproxy 1.6.0 的一些 bug,包括两个认证在同一据了解,最近有研究人员在OpenSSL中发现了一个新的安全漏洞,这个漏洞将会对SSL(安全套接层)安全协议产生巨大的影响,而且攻击者还有可能利于这个漏洞来对现代的Web网络站点进行攻击。影响超过1100万网站。当被问到Linux体系结构(就是Linux系统是怎么构成的)时,我们可以参照下图这么回答:从大的方面讲,Linux体系结构可以分为两块……SQL Server 是微软的旗舰关系数据库产品,该数据库一直只提供 Windows 下的版本。今天微软宣布推出可运行在 Linux 系统下的 SQL Server 数据库,该版本目前还是早期未公开的预览版本,计划在 2017年中正式推出。关于Cacti新手必看的一些官方资料据市场调研机构的数据,在刚刚过去的六月份,Linux 桌面的全球市场份额突破了 2%——如果笔者没有记错的话,这是有史以来第一次达到 2%。AMD和英特尔在2004年推出了首款正式版64位CPU芯片,而现在十多年过去了,Linux终于宣布停止支持32位的PC电脑。CNIL 7次测试了Windows 10向微软发送的用户信息。Windows 10收集用户下载、安装的所有应用信息,以及用户使用每款应用的时间,CNIL称,Windows 10收集这两类信息过分、没有必要。Nagios 想要看到实时数据显示情况以及历史趋势,那就需要配置数据可视化的插件,这里介绍各种软件的配置情况,可根据自己喜好,时间,兴趣配置不同图形看一看。网络流量检测图形分析工具 Cacti 0.8.8g 发布。Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过 snmpget来获取数据,使用 RRDtool绘画图形。新版 运维网 APP客户端 强势归来!HAProxy 1.6.1 发布,主要是修复 HAproxy 1.6.0 的一些 bug,包括两个认证在同一Sysstat 11.1.8 开发版,Sysstat 10.0.8 稳定版发布,为 pidstat,tapeBalanceNG 3.610 发布,此版本某些不必要的符号链接不再创建安装包 (applies to RH当被问到Linux体系结构(就是Linux系统是怎么构成的)时,我们可以参照下图这么回答:从大的方面讲,Linux体系结构可以分为两块……流行解压缩软件WinRAR的最新版本(WinRAR SFX v5.21)被发现存在一个允许远程执行代码的高危Linux Kernel 3.19 爆出两个安全漏洞!第一个漏洞会引发 Linux Kernel 多设备驱动Facebook 在继续致力于开放其所有代码和技术架构的源代码。这个社交媒体巨擘将这一点明确无误地传达给了近日出席该公司第二届@Scale年度开发者大会的1800名管理人员和工程师,希望向推特、谷歌、微软及其他公司的知名程序员学习经验。招聘和人力资源专家 Robert Half Technology 发布了美国年度科技薪资指南,20种IT职业明年将大幅涨薪,研究表明无线网络工程师将会获得最大幅度加薪。 您是否在其中?苹果 iOS 系统感染木马事件还未平息,另一大平台 Android 就又受到黑客侵袭了。据外媒报道,Andr并非人人都适合使用 Linux --对许多用户来说,Windows 或 OSX 会是更好的选择。我喜欢使用苹果 iOS 系统感染木马事件还未平息,另一大平台 Android 就又受到黑客侵袭了。据外媒报道,Andr并非人人都适合使用 Linux --对许多用户来说,Windows 或 OSX 会是更好的选择。我喜欢使用Google Chrome浏览器日前爆出Bug,在任意URL地址后增加“/%%30%30”,就会导致浏览器(太可怕了,果粉注意了!!!iOS 9 新漏洞可绕过密码看相册
教你如何绕过密码看相册 - 无论你的手机是用四位数密码锁住了还是用Touch ID锁住了都可以绕过密码看相册。
|b给电脑族的护眼大法|t
电脑现在使用非常普遍,它已经成为我们生活中不可或缺的部分,上班,学习,对于数据中心,运维工作的重要性不言而喻,在数据中心生命周期中运维管理是历时时间最长的一个阶段。本文提出了数据中心运维工作制胜的四大法宝,做好这四个方面的工作将使数据中心一直运行于最佳状态,为数据中心创造最大的受益。据国外媒体报道,网络安全机构Zimperium周一表示,研究人员已发现一批能影响全球95%的Android设今天的数据中心管理人员在提高处理能力,以便能够应对未来的运营需求方面正面临着巨大的挑战,他们需要进行大量的规划,并完善的所有可用的选项。Sven Slootweg (joepie91)是一名黑客,同时也是CrytoCC的创建者,现在提供Node行内的人自嘲是程序猿、屌丝和码农,行外的人也经常拿IT人调侃,那么究竟是IT人没有价值,还是没有仔细思考过自身的价值?Cacti 0.8.8f 发布,此版本主要是对0.8.8e版本的一个修复。更新日志:bug:0002599:Cacti是一个很棒的开源网络监视系统,它广泛使用于图形化地展示网络元素,例如带宽、存储、处理器和内存使用。使用它的基于Web 的界面,你可以轻松地创建和组织各种图表,在该教程中,我们会看到如何在将两幅 Cacti 图片合并为一幅。IT安全如今已不再是保卫(不存在的)边界,而是保护公司的受攻击面。而云、移动性、BYOD(自带设备)以及促进微软今日发布汇总:Visual Studio 2015, .NET 2015, .NET Framework智能手机给我们带来方便的同时,也暗藏了诸多的风险。广州市民小陈近日就因为手机丢失导致支付宝被人盗刷上万元。支随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。央视针对Android平台手机的一个漏洞进行了报道,这个叫作“寄生兽”的漏洞广泛存在Android平台手机当中,影响非常广泛而且规模很大,市面上90%以上的APP都将受到影响。你中招了吗?DDoS 工具套组、DDoS-for-hire、比特币、匿名邮件、TOR
连线、及形形色色的攻击动机,皆让一直以来域名安全的问题就引起大家的关注,那么域名安全与否的因素在于什么呢,其实我们自己就占很大的因素。如果你能够跟我一样做到下面的7点,肯定可以确保你账户的安全。据《劳动报》报道,夜晚站在申城街头,用手机里的Uber软件叫上一辆“人民优步”车,是近来沪上夜归白领回家的“时髦法”。但近日,市民王小姐却向本报投诉热线反映,她疑似遭遇了一辆“幽灵车”,车主不但没有真人头像,且其显示的手机号码竟为无法接通的“”!等车车不来,王小姐无奈取消却被扣款35元。在服务器中,所有组件中一般最容易坏掉的就是磁盘。所以一般采取RAID来保证系统的稳定性,通过冗余磁盘的方式防因“心脏出血”而一夜成名的OpenSSL协议它又有漏洞了,一组负责为加密协议OpenSSL做技术支持的开发人员,发现了一个新的神秘“高危”漏洞。OpenSSL是诸如Apache和Nginx这样的开源网络服务器所使用的安全协议……我虽是一个IT屌丝,但特别喜欢关注整个大行业的动态,干IT运维相关工作到现在也快8年了,企业对运维人员的专业能力要求确实提高了不少,现在再去面个运维工程师的职位都要求会个开发语言啥的,这在2007是不可想象的……根据安全研究人员的最新报告,电脑中的加密密钥可以通过无线电波而泄漏,攻击者只需要廉价的消费级装备即可获取密钥。SSD因其读写速度快而被广泛运用,也被用在数据中心,那么到底SSD的寿命如何,不同时间故障率又怎样?在5月初的时候,一位来自希捷的专家带来了一份报告,指出固态硬盘即使在不通电的情况下,数据也会随时间慢慢丢失。北京时间6月16日早间消息,在线密码保管服务LastPass周一报告称,该公司的网络上周五被黑客攻破,因此用户需要修改主密码。cnyunwei运维网 - 专注系统运维、网络运维及运维监控管理,致力打造一个最实用的专业IT运维交流平台,为您的IT运维护航!Windows、Linux、Cacti、Nagios、Centreon、Check_MK、Nconf、Zabbix…… 热门文章最新文章cnyunwei运维网 - 专注系统运维、网络运维及运维监控管理,致力打造一个最实用的专业IT运维交流平台,为您的IT运维护航!Windows、Linux、Cacti、Nagios、Centreon、Check_MK、Nconf、Zabbix……MongoDB 效率
来源:博客园
写入: 插入100万条数据:用InsertMany,耗时16s左右。 读取: 读取300万条数据,耗时3600毫秒。
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动yanghaiquanyyy 的BLOG
用户名:yanghaiquanyyy
文章数:181
访问量:42146
注册日期:
阅读量:5863
阅读量:12276
阅读量:355954
阅读量:1053048
51CTO推荐博文
 刚开始使用mongodb的时候,不太注意mongodb的内存使用,但通过查资料发现mongodb对内存的占用是巨大的,在本地测试服务器中,8G的内存居然被占用了45%。汗呀。  本文就来剖析一下mongodb对内存的具体使用方法,以及生产环境针对mongodb占大量内存的问题的解决。  先看一个MongoDB服务器的top命令结果  shell& top -p $(pidof mongod)  Mem: k total, k used, 2806804k free, 245020k buffers  Swap: 2097144k total, 100k used, 2097044k free, k cached  VIRT RES SHR %MEM  g 69.6  或者 先top后,然后 shift+m 把当前进场按占用内存的多少排序。看看你的mongodb能占用多少内存。先了解一下linux对内存的管理方式:  在Linux里(别的系统也差不多),内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。  很多人会把虚拟内存和Swap混为一谈,实际上Swap只是虚拟内存引申出的一种技术而已:操作系统一旦物理内存不足,为了腾出内存空间存放新内容,就会把当前物理内存中的内容放到交换分区里,稍后用到的时候再取回来,需要注意的是,Swap的使用可能会带来性能问题,偶尔为之无需紧张,糟糕的是物理内存和交换分区频繁的发生数据交换,这被称之为Swap颠簸,一旦发生这种情况,先要明确是什么原因造成的,如果是内存不足就好办了,加内存就可以解决,不过有的时候即使内存充足也可能会出现这种问题,比如MySQL就有可能出现这样的情况,解决方法是限制使用Swap:  shell& sysctl -w vm.swappiness=0  查看内存情况最常用的是free命令:  shell& free -m  total used free shared buffers cached  Mem:
25880  -/+ buffers/cache:   Swap: 7  新手看到used一栏数值偏大,free一栏数值偏小,往往会认为内存要用光了。其实并非如此,之所以这样是因为每当我们操作文件的时候,Linux都会尽可能的把文件缓存到内存里,这样下次访问的时候,就可以直接从内存中取结果,所以cached一栏的数值非常的大,不过不用担心,这部分内存是可回收的,操作系统会按照LRU算法淘汰冷数据。除了cached,还有一个buffers,它和cached类似,也是可回收的,不过它的侧重点在于缓解不同设备的操作速度不一致造成的阻塞,这里就不多做解释了。  知道了原理,我们就可以推算出系统可用的内存是free + buffers + cached:shell& echo "2723 + 239 + 25880" | bc -l  28842  至于系统实际使用的内存是used C buffers C cached:shell& echo "29377 - 239 - 25880" | bc -l  3258  除了free命令,还可以使用sar命令:shell& sar -r  kbmemfree kbmemused %memused kbbuffers kbcached   70160   57372   16396   85672   63540  shell& sar -W  pswpin/s pswpout/s  0.00 0.00  0.00 0.00  0.00 0.00  0.00 0.00  0.00 0.00  希望你没有被%memused吓到,如果不幸言中,请参考free命令的解释。
接着咱们分析一下mongodb是怎么使用内存的:  目前,MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟缓存管理器去处理,这样的好处是简化了MongoDB的工作,但坏处是你没有方法很方便的控制MongoDB占多大内存,事实上MongoDB会占用所有能用的内存,所以最好不要把别的服务和MongoDB放一起。  有时候,即便MongoDB使用的是64位操作系统,也可能会遭遇臭名昭著的OOM问题,出现这种情况,多半是因为限制了虚拟内存的大小所致,可以这样查看当前值: shell& ulimit -a | grep 'virtual'  多数操作系统缺省都是把它设置成unlimited的,如果你的操作系统不是,可以这样修改:  shell& ulimit -v unlimited  不过要注意的是,ulimit的使用是有上下文的,最好放在MongoDB的启动脚本里。  有时候,出于某些原因,你可能想释放掉MongoDB占用的内存,不过前面说了,内存管理工作是由虚拟内存管理器控制的,所以通常你只能通过重启服务来释放内存,你一定不齿于这样的方法,幸好可以使用MongoDB内置的closeAllDatabases命令达到目的:mongo& use admin  mongo& db.runCommand({closeAllDatabases:1})  另外,通过调整内核参数drop_caches也可以释放缓存: shell& sysctl -w vm.drop_caches=1  平时可以通过mongo命令行来监控MongoDB的内存使用情况,如下所示:mongo& db.serverStatus().mem:  {  "resident" : 22346,  "virtual" : 1938524,  "mapped" : 962283  }  还可以通过mongostat命令来监控MongoDB的内存使用情况,如下所示:shell& mongostat  mapped vsize res faults  940g g 0  940g g 0  940g g 0  940g g 0  940g g 0  其中内存相关字段的含义是:  mapped:映射到内存的数据大小  visze:占用的虚拟内存大小  res:实际使用的内存大小  注:如果操作不能再内存中完成,结果faults列的数值不会是0,视大小可能有性能问题。  在上面的结果中,vsize是mapped的两倍,而mapped等于数据文件的大小,所以说vsize是数据文件的两倍,之所以会这样,是因为本例中,MongoDB开启了journal,需要在内存里多映射一次数据文件,如果关闭journal,则vsize和mapped大致相当。  如果想验证这一点,可以在开启或关闭journal后,通过pmap命令来观察文件映射情况:  shell& pmap $(pidof mongod)  到底MongoDB配备多大内存合适?宽泛点来说,多多益善,如果要确切点来说,这实际取决于你的数据及索引的大小,内存如果能够装下全部数据加索引是最佳情况,不过很多时候,数据都会比内存大,比如本文说涉及的MongoDB实例: mongo& db.stats()  {  "dataSize" : 0,  "indexSize" :   }  本例中索引只有1G多,内存完全能装下,而数据文件则达到了1T,估计很难找到这么大内存,此时保证内存能装下热数据即可,至于热数据有多少,这就是个比例问题了,取决于具体的应用。如此一来内存大小就明确了:内存 & 索引 + 热数据。  根据以上的分析我们可以得出几点结论:  1. mongodb 直接用操作系统的内存管理器来管理内存。而操作系统采用的是LRU算法淘汰冷数据。  2. mongodb可以用重启服务、调整内核参数以及mongodb内部的语法去清理mongodb对内存的缓存。可能存在的问题是:这几种清理方式都是全部清理,这样的话mongodb的内存缓存就失效了。  3. mongodb 对内存的使用是可以被监控的,在生产环境中要定时的去监控这些数据。  4. mongodb 对内存这种占用方式使其尽量的和其他占用内存的业务分开部署,例如memcahe,sphinx,mysql等。  5. 操作系统中的交换分区swap 如果操作频繁的话,会严重降低系统效率。要解决可以禁用交换分区,以及增加内存以及做分布式。  6. 生产环境中mongodb所在的主机应该尽量的大内存。
了这篇文章
类别:未分类┆阅读(0)┆评论(0)

我要回帖

更多关于 mongodb问题 的文章

 

随机推荐