本文目录:
- 1、linux培训价格多少?
- 2、mongodb数据库有哪些优势
- 3、MongoDB为什么值12亿美元
- 4、怎样劝服机关单位使用 MySQL/MongoDB/Redis 取代 Oracle
- 5、mongoDB应用篇-mongo聚合查询
- 6、MongoDB与MySQL:如何选择
linux培训价格多少?
主要看你选择的机构及班型,费用也是不同的;
老男孩Linux运维超级网络班费用是6800元,线下脱产班价格是20800元;学习周期大约是4-5个月;可以免费试学1-2周,前期不需要任何费用(这点很关键,避免被套路),满意后再缴学费;
不知道你基础如何,如果想转行同时学历及基础比较弱,建议你选择线下脱产学习。这种学习效果也是最好的,每天学习时间12-14个小时。经过4-5个月学习,学习完能能够找到一份理想的Linux运维相关工作的;下面我简单介绍一下Linux可以从事哪些工作及他们主要的工作内容是什么及待遇如何;
1) Linux运维岗位及工作内容
互联网Linux运维工程师是一个融合多学科(网络、系统、开发、数据库、安全、存储等)的综合性技术岗位,甚至还需要沟通、为人处世、培训、销售、管理等非技术能力,这给运维工程师提供了一个广阔的发展空间。
2) Linux运维工程师岗位职责
一般从企业入门到中级Linux运维工程师的工作大致有:挑选IDC机房及带宽、购买物理服务器或云服务、购买及使用CDN服务、搭建部署程序开发及用户的访问系统环境(例如:网站运行环境)、对数据进行备份及恢复、处理网站运行中的各种故障(例如:硬件故障、软件故障、服务故障、数据损坏及丢失等)、对网站的故障进行监控、解决网站运行的潜在安全问题、开发自动化脚本程序提高工作效率、规划网站架构、程序发布流程和规范,制定运维工作制度和规范、配合开发人员部署及调试产品研发需要的测试环境、代码发布等工作需求,公司如果较小可能还会兼职网管、网络工程师、数据库管理员、安全工程师、技术支持等职责。
涉及到的Linux平台上的运维工具有:Linux系统,Linux基础命令,Nginx,Apache,MySQL,PHP,Tomcat,Lvs,Keepalived,SSH,Ansible,Rsync,NFS,Inotify,Sersync,Drbd,PPTP,Open,NTP,Kickstart/Cobbler,KVM,OpenStack,Docker,,K8S,Mongodb,Redis,Memcached,Iptables,SVN,GIT,Jenkins,网络基础,Shell/Python开发基础等,除此之外还可能涉及到交换机、路由器、存储、安全、开发等知识。
运维工程师还包括一些低端的岗位,例:网络管理员、监控运维、IDC运维,值班运维
职业发展方向:Linux运维工程师、系统架构师、数据库工程师、运维开发工程师、系统网络安全工程师、运维经理、运维总监
3) Linux中级运维工程师应用软件阶段。
Linux系统,Linux基础命令,Nginx,Apache,MySQL,PHP,Tomcat,Lvs,Keepalived,SSH,Ansible,Rsync,NFS,Inotify,Sersync,Drbd,PPTP,Open,NTP,Kickstart/Cobbler,KVM,OpenStack,Docker,Mongodb,Redis,Memcached,Iptables,SVN,GIT,Jenkins,网络基础,Shell/Python开发基础
4)Linux运维架构师岗位职责
运维架构师是运维工程师的高级阶段,并没有明确的岗位界限区分,运维架构师一般来说是除了对运维工程师应用的开源工具熟练掌握之外,更多的是用思想来运维了,即DevOps的落地,各种企业运行过程中的解决方案提出和执行,例如:根据公司的现状可以设计各类运维解决方案的能力:
1、自动化代码上线(SVN/GIT+Jenkins+MVN)解决方案;
2、云计算部署架构及Docker微服务架构方案;
3、服务自动化扩容方案(KVM/OpenStack/Docker+Ansible+Zabbix);
4、10万并发的网站架构、秒杀系统的架构及解决发你个案;
5、多IDC机房互联方案、全网数据备份解决方案、账号统一认证方案;
6、数据库、存储及各重要服务节点的集群和高可用方案。
7、各网络服务的极端优化方案、服务解耦/拆分。
8、运维流程、制度、规范等的建设和推行。
9、沟通能力、培训能力、项目管理、业务需求分析及落地执行力等。
这里仅举几个例子,实际工作中会有更多,运维架构师的工作,其实就是解决企业中的用户访问量不断增大带来的痛点,最终达到高效、优质的为客户提供网站及业务服务。
总的来说:Linux运维架构师更多的是根据企业日益增长的访问量需求,利用若干运维工具组合加上经验思想,形成解决业务需求方案的阶段,当然也不排除对运维工具进行二次开发以及可视化展示运维数据的阶段(开发软件平台),这个阶段涉及的工具会非常多,几乎市面好用的开源工具都在备选之列,在一线城市互联网公司的薪资范围15000-50000/月。
职业方向:高级数据库工程师、运维开发工程师、运维经理、运维总监、技术总监
运维架构师:将多个工具组合,加上思想经验,形成方案,用思想和经验赚钱的阶段。
技术的提升仅是量的积累,思想的提升才是质的飞跃!——老男孩
5)数据库运维工程师
众所周知,数据几乎是所有企业的生命线,所以数据库工程师的地位和薪水一般会比普通运维工程师高一些,主要工作内容就是保证数据库数据的安全以及高效地为用户提供各种服务。工作内容主要有:数据库环境搭建、数据库优化、数据库
mongodb数据库有哪些优势
1. 文档存储
数据存储以BSON/JSON文档,这对于Web应用程序有很大的意义。开发者API喜欢以JSON形式传输,这使得整个项目的数据表示可采用统一的模型。所有这一切都无需任何前期架构设计。
2. 可扩展性
MongoDB被用在一些规模庞大的环境中,FourSquare/Craiglist都在使用它。通过分片数据缩放处理理论上可实现更高的吞吐量。
3. 简单的复制
就像分片技术一样,MongoDB范围内复制过程同样简单好用,在副本机器上还有大量的复制选项。灵活的功能可满足用户应用的需求。
4. 易于查询
MongoDB以文档的形式存储数据,不支持事务和表连接。因此查询的编写、理解和优化都容易得多。简单查询设计思路不同于SQL模式,嵌入文档在特定的环境下可得到更好的查询,然而这需要先加入集合。如果需要执行多个请求到数据库则需要加入其到客户端。在MongoDB时ODM工具(如Doctrine2)将发挥自身的优势。
5. 安全性
由于MongoDB客户端生成的查询为BSON对象,而不是可以被解析的字符串,所以可降低受到SQL注入的攻击的危险。最常见的攻击类型为针对Web应用程序的攻击,在MongoDB上使用Doctrine2 ODMs 查询语言可减轻攻击风险。
6. 支持
用户在选择数据库时总是喜欢积极和充满活力的,这点非常重要。MongoDB在业界有非常大的影响力,用户也会定期的组织活动。MongoDB的标签在StackOverFlow是非常活跃的。你永远不会陷入困境,因为总有人与你讨论并解决问题。
7. 价格
MongoDB是免费的!
当然远不止这些优势,但是也有很多劣势。
MongoDB为什么值12亿美元
如果文档数据库创业公司MongoDB需要就它们近期收获的巨额估值感谢某些人的话,那么甲骨文的CEO Larry Ellison一定会排在这一名单的首位。
MongoDB文档数据库背后的公司10Gen近期将公司名称正式更名为MongoDB,并获得了2.31亿美元的融资。该公司也因此成为了首个身价超过10亿美元的开源创业企业。目前这一开源NoSQL数据库创业公司的资产估价高达12亿美元。
MongoDB成立于2007年,他们取得今天的成就只花费了短短六年的时间,而红帽(RedHat,成立于1993年)取得这一成就足足花费
了20年的时间。MongoDB的成功要归功于谁呢?答案是甲骨文!甲骨文可谓是MongoDB的“贵人”。甲骨文在300亿美元的数据库市场中占据着最
大份额。2011年,甲骨文的关系型数据库许可证收入达到167.5亿美元。据研究机构Gartner统计,甲骨文占据了该市场48.3%的份额,是当之
无愧的数据库巨头。
庞大的红色遗产
甲骨文拥有众多优势,并且有着庞大而可靠的客户群。许多企业内部的IT应用都是使用甲骨文的存储程序语言PLSQL编写的。然而,与我们在上世
纪九十年代所学习到的用于HP/UX
PA-RISC主机的数据库相比,甲骨文并没有什么本质上的不同。实际上,自上世纪八十年代以来,它们就没有发生过太大的变化。这一遗产可以说是优劣并
存。甲骨文数据库需要大量的硬件和运维人员以维持其运行。当规模达到上百或上千太字节时,或者是用户数量达到数百万时,其运维费用不是一般企业能够承受得
起的。
若想在这一规模基础上进行扩展,甲骨文需要对底层软件架构进行调整。目前甲骨文正在尝试将其他技术应用到关系型数据库中以解决这一问题。这类扩展还需要一个完全不同的许可证模型。在不彻底改变现有市场的情况下,这样做难以取得成效。
与此同时,甲骨文还是数据库市场上的强势并购者。他们先收购了MySQL的一部分(其中包括InnoDB的存储引擎),然后是Sun。这些只是
甲骨文发起的众多并购行动中的一小部分而已。在与IBM和微软等对手的竞争中,并购行动无疑为甲骨文带来了诸多优势。但是在整合新技术方面,收购行动也为
甲骨文带来了诸多问题。
NoSQL的破坏力
技术产业的历史就是一部破坏史。微软在上世纪九十年代击败了Novell,如今苹果也在持续地瓦解微软。你需要的一个强大且不可轻易被撼动的恐
龙,同时这只恐龙又要能够很好地适应它们所处的环境。然而,这又会导致你无法改变它们的技术或是成本结构,以快速地将其应用到新的市场。成功的竞争者擅长
利用对手的弱点来攻击他们,同时又能够在新的技术环境中顺利发展壮大。竞争者是促进变革的一个因素,而不是一种抑制技术和商业环境发展的力量。
MongoDB就是这样的技术,MongoDB的优势不仅仅是在成本上比甲骨文数据库低,同时向MongoDB集群增加节点也要比甲骨文数据库
更方便。这些优势非常适合虚拟网络、存储和云技术。相反,扩展甲骨文需要组合、配置和集成多种复杂技术(例如RAC、DataGaurd、
GoldenGate等),以及大量需要许可证和专业服务费用的硬件设备。
给我们留下深刻印象的不仅仅是MongoDB的易用性和强大的适应能力,它还能够很容易地被扩展到许多我们之前认为不可能的任务中。与甲骨文数据库的使用费用相比,MangoDB的使用费用非常低。
我们最担心的一个问题是,MongoDB是一家刚成立不久的创业公司,他们会不会被甲骨文或CA
Technologies这样的公司并购掉。10亿美元以上的估值,以及2.31亿美元的融资事实上,已经让我们打消了这种顾虑。即使MongoDB被并
购,那么他们也会被真正重视他们的公司所收购。然而可能性更多大的是,MongoDB会将目标锁定为IPO(首次公开募股)。
与甲骨文数据库相比,MySQL更容易使用、维护及安装,但这并不意味着它们拥有更好的性能。通常情况下,只有10倍以上的提升才能击败强大的
竞争对手。虽然MySQL是一个简单易用且价格便宜的关系型数据库,但是它们的整体性能却不佳。相比之下,MongoDB在许多场景中性能提升了十倍。虽
然它并非目前的最佳选择,但从长远看来它具备成为最佳选择的潜力。
怎样劝服机关单位使用 MySQL/MongoDB/Redis 取代 Oracle
首先,我先把结论说出来。放弃吧,基本没希望的
原因有几个方面:
一 技术实力不够
二 责任问题
三 财政预算和政府采购
需要特别说明下,这个只是我个人的一些看法,而且多是之前的情况。围绕问题,我的叙述肯定更多的是不好的地方,而且我就是来黑的好吗!
应该说,新一届政府上来之后,很多东西都在改变,真心期望一切都能变得更好,更透明。
一 技术实力
基层机关单位的IT部门人员,往往有这么几种来源:1.公务员编制 2.事业编制人员 3.聘用制(也就是闻名遐迩的临时工)。
可以说基本上这个队伍里边,几乎没有几个真正有技术实力的。大部分也就比一般人稍微懂得多点,能照着手册部署和会敲命令的都算好手了。。。Oracle 最次可以在Windows 图形界面部署,MySQL的管理相比要复杂多了。。。
1.公务员
成为公务员需要通过公务员考试,公务员考试考什么? 申论、行测、面试。等等,好像哪里不对的样子?!!! 我招的是计算机技术人员啊!
是的,俺们就是这么任性!大部分计算机技术岗位,只需要计算机类专业就可以。不妨想象一下,BAT招工程师,只考行测、申论,会是什么样的结果。
举
个例子,当初我的这个职位,要求是软件开发能力,因为需要自己做一部分简单的开发,还要负责各类软件硬件招标的技术要求之类。和我一起考进来的一个女孩,
学得是信息管理,也算计算机类专业。报道第一天,这个女孩就说自己一点软件开发相关东西都不会!!!然后就被分配到了其他部门工作了。我们部门领导到现在
提起来都满是怨念。。。
所以诡异就在这里了,技术好的,很多通不过公务员考试,能通过考试的,很多技术上又不能看。当然,最近几年,很多单位在面试时候也开始加入专业考试了,也算是吃一堑长一智吧。。。当然,我私底下认为可不止吃了一堑。。。
PS: 一次去外单位帮他们排查OA系统的问题,我让他们单位的管理员给我导出一份数据库,然后给数据库做个维护计划来备份数据库,这哥们很干脆的说不会。。。。
2. 事业编制
过去的事业编制管理是很不正规的,很多有关系或者有米的,通过领导签字就把孩子、老婆、儿子或者儿媳妇塞进了单位。这类人往往家庭条件优越(我们楼下有个
开宝马7系来上班的妹子),根本不稀罕每月一两千块那点工资,就图一个清闲稳定。期待这批孩纸们,技术精湛、爱岗敬业,额,还不如下图这样做有效呢
3.聘用制
我觉得不需要我细说,媒体黑的够多了。。。。
二 责任问题
这一点 @李依隆Jimmy答的很详细了 大家可以看他的回答
怎样劝服机关单位使用 MySQL/MongoDB/Redis 取代 Oracle? - 李依隆Jimmy 的回答
Oracle确实贵,可是最起码有公司的商业服务。有了问题知道找谁,花钱可以解决。对政府部门来说,最可怕的是花钱都解决不了的。
另外很重要的是,花钱买了商业方案,如果还是有问题,最起码有商业公司承担责任,用开源的系统,出了问题谁来负责呢?
而且客观的说,对于机关来说,系统稳定运行,不出问题才是最重要的,毕竟不是商业公司,效费比不是第一优先的考虑。银行系统不也一直是Oracle为主吗,类似的道理。
三财政预算和政府采购
如果有个单位,第一年是900万的预算,通过用MySQL替代Oracle,节省了300万,感觉真是棒棒哒!!那么请问接下来,会怎么样呢?答案是,明年这个单位的预算变成600万了。。。 那么还有什么呢? 对不起,木有了,就这样。Over.
政府采购。。。这个。。。佛曰,不可说,不可说。 我们用的西部数据1T移动硬盘,淘宝价格600+,我们采购价1200。(妈的,我决定还是勾上匿名好了。。。。)
综上,不要浪费时间去安利开源软件什么的了,有那个时间,找个流行的开源软件修改下,把相关手续都办好办全,以高大上的“完全自主知识产权"”达到国际一流水平“的身份,勇敢的去参加招标吧,骚年!!!!
编辑于 2015-04-29
75 条评论
感谢
分享
收藏
•
没有帮助
•
举报
•
禁止转载
Jimmy Li,你自由了,这里是平壤
陈志浩、Tawtg、陈宏鸿
等人赞同
前面的人包括题主在内都在谈技术上的问题,但是实际上这不是技术能决定的。
对于政府机关来讲,用任何产品首先要考虑的就是背书问题,为什么?规避政治风险。如果将来出了问题,背书可以避免很多麻烦。
什么叫背书?品牌的声誉、服务、奖项、资格证明等等都可以称之为背书。
为什么要用Oracle?因为这是世界上最好、最成熟的商用技术方案。如果将来出了大规模故障,那么就可以成功排除是因为技术方案选择不当的责任,责任在Oracle这样的供应商,这样主管的人就没有政治责任了。
相
同的道理,为什么政府采购笔记本电脑都会用联想、Dell、索尼、Thinkpad。选用联想是因为支持民族企业,而且本身也不算太差;Dell、索尼就
是国际大厂;Thinkpad过去的IBM,政府机关都是很认可。那么一旦电脑批量出了故障,那么既然国际顶级厂商的产品都出了问题,那就不是我们单位的
工作人员的责任,而是厂家的责任了;如果采购的时候选用神舟,如果出了问题,那么就会被怀疑中间是否有暗箱操作。
很多创业公司都想进入政
府市场,以为政府出手阔绰、好骗。但是实际上,如果不是创始人有强大到可以撬动市委常委以上的背景,或者本身公司有强大背书(挂靠在中科院、各种正部级协
会、Intel、IBM这种大树下面,有各种国际大奖,有各种苛刻的资质认证),否则,他们的产品压根就别想从政府拿到一个单子,就算某部门同意合作,也
很可能被财政砍掉。为什么?避免风险。
回到问题,如果你主持这个项目,并且坚持用开源方案,那么一旦哪天出现了问题,领导问你用的什么技
术方案怎么这么烂?你回答说开源的。你觉得你能把责任推到MySql上去么?这个政治风险是当然你来背。如果领导一直等着机会给你穿小鞋,可能你的政治生
涯上就多了一个污点了。
mongoDB应用篇-mongo聚合查询
如果我们在日常操作中,将部分数据存储在了MongoDB中,但是有需求要求我们将存储进去的文档数据,按照一定的条件进行查询过滤,得到想要的结果便于二次利用,那么我们就可以尝试使用MongoDB的聚合框架。
前面我们在学习文档查询的过程中,也介绍过一些查询的操作符,其中就有一部分是简单的查询聚合函数,例如 count 、 distinct 、 group 等,如果是简单的数据分析过滤,完全可以使用这些自带的聚合函数以及查询的操作符来完成文档的过滤查询操作
如果我们遇到了一些数据需要跨多个文本或者统计等操作,这个时候可能文档自身也较为复杂,查询操作符已经无法满足的时候,这个时候就需要使用MongoDB的聚合查询框架了。
使用聚合框架可以对集合中的文档进行变换和组合查询,基本上我们使用的时候,都是使用多个构件创建一个管道,用于对一连串的文档进行处理。这里的构件包括 筛选(filter) 、 投射(projecting) 、 分组(grouping) 、 排序(sorting) 、 限制(limiting) 以及 跳过(skipping)
MongoDB中需要使用聚合操作,一般使用 aggregate 函数来完成多个聚合之间的连接,aggregate() 方法的基本语法格式如下 :
现在假设我们有个集合articles,里面存储了文章的集合,大致如下:
但这时我们需要查询出来每一个作者写的文章数量,需要使用aggregate()计算 ,大致如下:
输出的结果为:
通过这个简单的案例我们就能输出想要的数据和属性名,大概分析一下刚刚的聚合查询语句, by_user字段进行分组,代表每个用户一条数据,而num_tutorial则是定义了数值类型计算的结果字段,$sum则是计算总和,相当于每个用户出现一次,都会+1,最终计算出来的总和通过num_tutorial字段进行输出
注:如果管道没有给出预期的结果,就需要进行调试操作,调试的时候,可以尝试先给一个管道操作符的条件,如果这个时候查询出来的结果是我们想要的,那么我们需要再去指定第二个管道操作符,依次操作,最后就会定位到出了问题的操作符
前面我们提到聚合查询会使用管道操作符,而每一个操作符就会接受一连串的文档,对这些文档进行一些类型转换,最后将转换以后的文档结果传递给下一个管道操作符来执行后续的操作,如果当前是最后一个管道操作符,那么则会显示给用户最后的文档数据。不同的管道操作符是可以按照顺序组合在一起使用,并且可以被重复执行多次,例如我们可以先使用$match然后再去、 match操作。
match管道操作符可以使用$gt、$lt、$in等操作符,进行过滤,不过需要注意的是不能在$match管道操作符中使用空间地理操作符。
在实际使用的过程中,尽可能的将 match操作符以后,再去投射或者执行分组操作的话,是可以利用索引的。
相比较一般的查询操作而言,使用管道操作,尤其是其中的投射操作更加强大。我们可以在查询文档结束以后利用 $project 操作符从文档中进行字段的提取,甚至于我们可以重命名字段,将部分字段映射成我们想要展示出去的字段,也可以对一部分字段进行一些有意义的处理。需要注意的是, $project 操作符可以传入两个参数,第一个是需要处理的属性名称,第二个则是0或者1,如果传入1,则代表当前的属性是需要显示出来的,如果是0或者不写,默认都是代表这个字段不需要显示出来
当然第二个参数也可以是一个表达式或者查询条件,满足当前表达式的数据也可以进行显示,接下来我们先准备一点数据:
接下来,我们来查询,条件是item字段为abc,quantity要大于5,并且我们只要item和price字段的结果,其他都排除掉:
可以看到结果为:
如果我们想要在原基础上改变某个字段的名称,例如将item改为item_code,可以利用$来完成,如下:
可以看到我们指定的名称item_code,而这个别名对应的字段item使用$作为前缀标记,代表将item字段映射为item_code,可以看到结果:
我们在投影的时候,除了可以将某个字段映射成其他字段以外,还可以针对某个字段进行一些简单的运算,最常见的就是 四则运算 ,即
加法( subtract )、乘法( divide )、求模( $mod ) ,
除此之外,还支持对字段进行 关系运算 (大小比较( " eq" )、大于( " gte" )、小于( " lte" )、不等于( " ifNull" ) )、
逻辑运算 (与( " or" )、非 ( " concat" )、截取( " toLower" ) )等
我们基于上面的需求,假设每一个价格是按照元为单位,现在要求输出W为单位,那么我们就需要对price进行除法运算,如下:
除此之外,我们也可以将计算完毕的price改名为priceW,即:
可以看到输出的结果为:
这时有一个需求,要求我们返回数据的同时还要yyyy-MM-dd格式的时间字符串,这个时候我们就需要对date字段进行时间函数和字符串混合处理了,如下:
这里需要注意的一点是, year:" substr函数将date字段的结果截取成字符串即可实现拼接
group的_id上,代表按照当前字段进行分组,例如,我们这里根据item进行分组:
在我们针对某个字段进行分组以后,我们可以针对每个分组进行一些操作符的使用,常见的例如: $sum 、 $avg 、 $min 、 $max 、 $first 、 $last 。
$avg 操作符用来返回每一个分组内的平均值
现在我们基于前面item的分组,我们想要算出来每个组内的平均价格是多少,如下:
$min 和 $max 操作符用于返回分组内最大的值和最小的值
除了平均值以外,我们现在将最贵的和最便宜的价格也要列出来,这个时候就可以使用这两个操作符了,如下:
$first 、 $last 则是可以获取当前分组中第一个或者最后一个的某个字段的结果,如下:
除此之外,我们还可以在分组的时候使用数组操作符,例如 $addToSet 可以判断,当前数组如果不包含某个条件,就添加到当前数组中, $push 则不管元素是否存在,都直接添加到数组中
注意:大部分管道操作符都是流式处理的,只要有新的文档进入,就可以对新的文档进行处理,但是 $group 代表必须收到全部文档以后才可以进行分组操作,才会将结果传递给后续的管道操作符,这就意味着,如果当前mongo是存在分片的,会先在每个分片上执行完毕以后,再把结果传递mongos进行统一的分组,剩下的管道操作符也不会在每个分片,而是mongos上执行了
如果我们现在遇到一些文档比较复杂,比如存在内嵌文档的存在,某个属性里面嵌套了一个数组,但是我们需要对内嵌的数组文档进行分析过滤等查询处理,这个时候就可以使用 $unwind 操作符将每一个文档中的嵌套数组文件拆分为一个个独立的文档便于进行后续的处理,例如我们需要将之前的set集合中关于请求的url以及ip的信息拆分出来,原始的格式如下:
我们可以使用命令进行拆分,如下:
结果为:
可以看到数据则是按照每一条信息的方式展示出来了,方便后续的计算以及输出,但是需要注意的一点是,这种方式,如果该文档中没有拆分的字段,或者是空数组,默认会直接排除,如果我们需要空数组等也输出计算出来,则可以指定 preserveNullAndEmptyArrays 参数,设置为true,则代表空数组或者不存在的文档也要拆分输出出来,即:
我们可以在管道查询的过程中,按照某个属性值或者多个属性的结果进行顺序排序,排序的方式与普通查询操作符中的sort操作符表现一致,与其他管道操作符一样,可以在任何阶段使用,但是,需要注意的一点是,建议在管道操作符第一阶段进行排序,因为此时的排序是可以触发索引的,如果在后续阶段进行排序,会消耗大量内存,并且耗时会很久,尤其是在有 $group 的情况下,如果放在 $group 操作符后面,会发现等到的时间很久,不仅仅是无法触发索引的问题,还和 $group 操作符是等待所有数据完毕才会触发的特性有关,因此需要格外注意。
结果如下,按照我们想要的结果进行了排序:
limit,只返回前两条数据,如下:
结果如下:
除了 skip,与之前的查询操作符作用也是一样的,用于在已经查询完毕的结果集中跳过前N条数据以后进行返回,我们将$skip加在刚刚的查询后面,如下:
这个时候可以看到返回的结果为空,什么结果都没有了,这是因为前一步管道已经限制了仅仅返回2条,而接着我们又跳过了前两条文档,因此返回的结果为空,我们将顺序调换一下,看看:
可以看到结果如下,与刚才的结果无异:
管道查询操作符有很多,除了上面学习的常用的部分,还有几十个,需要了解全部的可以参考官网:
除此之外,我们在学习的过程中了解到,部分查询操作符是可以触发索引的,例如 $project 、 $group 或者 $unwind 操作符,因此我们也建议 如果可以的话,尽量先使用这类管道操作符进行数据过滤,可以有效减少数据集大小和数量,而且管道如果不是直接从原先的集合中使用数据,那就无
法在筛选和排序中使用索引 ,例如我们先进行管道操作,再去将过滤好的数据进行 $sort 排序,会导致无法使用索引,效率大幅度下降,因此如果我们需要涉及到 $sort 操作的时候,如果可以尽可能在最开始就处理,这个时候可以使用索引,效率较高,然后再去进行管道查询筛选与分组等其他操作,可以有效的提高查询的效率。另外需要注意的一点是,在 MongoDB中会对每一个管道查询做限制,例如某一步管道查询操作导致内存占用超过20%,这个时候就会报错,无法继续使用管道 ,因为mongoDB本身每次最大是16Mb的数据量,为了尽可能避免或者减少这种问题,建议可以考虑尽可能的使用 $match 操作符过滤无用数据,减少数据总大小。同时也 因为管道查询是多步执行,例如 $group 则是等待所有数据完毕才会执行,因此可能会导致整体执行时间较久 ,也因为这样,才不建议在较高的实时查询需求上使用管道和查询,而是在 设计的时候尽可能直接使用查询操作符进行数据查询,触发更多的索引,更快的销量查询出来想要的结果。
MongoDB与MySQL:如何选择
MongoDB和MySQL分别是领先的开源NoSQL和关系数据库。哪个最适合您的应用程序?
在1990年代的互联网泡沫时期,用于Web应用程序的一种通用软件堆栈是LAMP,它最初代表Linux(OS),Apache(Web服务器),MySQL(关系数据库)和PHP(服务器编程语言)。MySQL是首选的数据库,主要是因为它是免费的开源代码,并且具有良好的读取性能,非常适合从数据库动态生成网站的“ Web 2.0”应用程序。
之后,代表MongoDB(文档数据库),Express(Web服务器),AngularJS(前端框架)和Node.js(后端JavaScript运行时)的MEAN堆栈开始流行。除其他原因外,MEAN堆栈很有吸引力,因为您需要了解的唯一语言是JavaScript。与等效的LAMP堆栈相比,它还需要更少的RAM。
MySQL AB的Monty Widenius和David Axmark最初于1994年开始开发MySQL。产品名称中的“ My”是指Widenius的女儿,而不是英语单词“ my”。MySQL旨在与mSQL(又名Mini)兼容。 SQL),并添加了SQL查询层和开放源代码许可(实际上是专有和GPL双重许可)。MySQL的公共发行版于1996年底开始,并且每年或每两年持续发行一次。MySQL是当前最受欢迎的关系数据库。
Sun Microsystems于2008年以10亿美元的价格收购了MySQL AB,Oracle于2010年收购了Sun。在Oracle收购MySQL的广泛关注中,Widenius在收购Oracle之前就将MySQL 5.5合并到了MariaDB中。MariaDB努力维护与Oracle MySQL版本的兼容性。
与功能更强大的商业关系数据库(例如Oracle数据库,IBM DB / 2和Microsoft SQL Server)相比,MySQL最初是一个相当低端的关系数据库,尽管它足以成为动态网站的后备存储。多年来,它增加了您希望从关系数据库获得的大多数功能,包括事务,参照完整性约束,存储过程,游标,全文索引和搜索,地理索引和搜索以及群集。
尽管MySQL现在支持“大数据库”功能,例如主从部署,与Memcached一起使用以及水平分片,但它仍通常用于中小型部署。将MySQL扩展到多个从属服务器可以提高读取性能,但是只有主服务器才能接受写请求。
AWS提供了两种形式的MySQL即服务,即Amazon RDS和Amazon Aurora。后者具有更高的性能,可以处理TB级的数据,更新副本的延迟时间更短,并且可以直接与Oracle数据库和SQL Server竞争。
MongoDB是高度可伸缩的操作文档数据库,可在开源版本和商业企业版本中使用,它可以在本地运行或作为托管云服务运行。托管云服务称为MongoDB Atlas。
MongoDB无疑是NoSQL数据库中最受欢迎的数据库。它的文档数据模型为开发人员提供了极大的灵活性,而其分布式体系结构则提供了很好的可伸缩性。因此,通常选择MongoDB用于必须管理大量数据,得益于水平可伸缩性并处理不适合关系模型的数据结构的应用程序。
MongoDB是一个基于文档的存储,在其之上还具有一个基于图形的存储。MongoDB实际上并不存储JSON:它存储BSON(二进制JSON),该扩展了JSON表示(字符串)以包括其他类型,例如int,long,date,浮点,decimal128和地理空间坐标。
MongoDB可以使用数据的类型生成正确的索引类型,从而在数据的单个副本上生成多模式图形,地理空间,B树和全文本索引。MongoDB使您可以在任何文档字段上创建索引。MongoDB 4具有多文档事务,这意味着即使必须标准化数据设计,您仍然可以获得ACID属性。
默认情况下,MongoDB使用动态模式,有时称为无模式。单个集合中的文档不需要具有相同的字段集,并且字段的数据类型可以在集合中的不同文档之间有所不同。您可以随时使用动态模式更改文档结构。
但是,可以使用架构治理。从MongoDB 3.6开始,MongoDB支持JSON模式验证,您可以在验证器表达式中将其打开。
在LAMP和MEAN堆栈上存在很多变化。例如,您可以在Windows(WAMP)或MacOS(MAMP)上运行而不是Linux OS。您可以运行IIS(WIMP),而不是Windows上的Apache Web服务器。
您可以运行PostgreSQL或SQL Server,而不是LAMP堆栈中的MySQL关系数据库。如果您需要全球分布,则可以运行CockroachDB或Google Cloud Spanner。可以使用Perl或Python代替PHP语言。如果要使用Java或C#进行编码,则需要考虑单独的堆栈系列。
您可以运行Couchbase或Azure Cosmos DB以获得更好的全局分布,而不是MEAN堆栈中的MongoDB文档数据库。可以使用十二个Node.js Web服务器框架中的任何一个来代替Express 。除了AngularJS前端框架,您还可以运行Angular 2或React。
选择数据库时要问的最重要的问题是:
这些问题中的几个会趋于缩小数据库的选择范围,但是与制定LAMP堆栈时相比,我们有更多选择。如果您要构建一个应用程序,并且该应用程序必须在99.999%的时间内对全世界的用户都具有高度的一致性,那么只有少数几个数据库适合您。如果您的应用程序将在工作日的上午9点至下午6点在一个国家/地区使用,并且可以容忍最终的一致性,那么几乎所有数据库都可以使用,尽管某些数据库对于开发人员和操作员而言更容易,而某些数据库则可以为您的主要使用场景提供更好的性能。
虽然LAMP和MEAN堆栈一次是Web应用程序的良好解决方案,但现在都不是最佳选择。而不是盲目采用任何一种,您应该仔细考虑用例,并找到一种可在可预见的将来为您的应用程序服务的体系结构。
您什么时候需要关系数据库(例如MySQL)用于新应用程序?除了对标准SQL的明显支持外,关系数据库本身将数据强制为具有一致的强类型字段的表格模式,并且只要您利用规范化就可以帮助您避免数据重复。
另一方面,如果您还需要偶尔的自由格式文档,则MySQL和许多其他关系数据库也支持RFC 7159定义的JSON数据。如果您还想使用XML文档和XPath或XSLT,则大多数关系数据库都可以提供这种能力。
您何时需要像MongoDB这样的文档数据库?如果您的主要用例需要允许使用自由格式的数据,在文档之间更改类型的字段,随时间变化的架构或嵌套的文档,则NoSQL数据库将满足要求。另外,如果您的应用程序是用JavaScript编写的,那么文档数据库的JSON格式将很自然。
作者: Martin Heller是InfoWorld的特约编辑和审稿人。他曾担任Web和Windows编程顾问,从1986年至2010年开发数据库,软件和网站。最近,他担任Alpha Software技术和教育副总裁以及Tubifi董事长兼首席执行官。
【mongodb价格】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: