2023年7月21日发(作者:)
⼀、MongoDB综述MongoDB综述1.1 NoSQL诞⽣背景NoSQL,泛指⾮关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。随着互联⽹web2.0⽹站的兴起,⾮关系型的数据库现在成了⼀个极其热门的新领域,⾮关系数据库产品的发展⾮常迅速。⽽传统的关系数据库在应付web2.0⽹站,特别是超⼤规模和⾼并发的SNS类型的web2.0纯动态⽹站已经显得⼒不从⼼,暴露了很多难以克服的问题,例如: performance - 对数据库⾼并发读写的需求 web2.0⽹站要根据⽤户个性化信息来实时⽣成动态页⾯和提供动态信息,所以基本上⽆法使⽤动态页⾯静态化技术,因此数据库并发负载⾮常⾼,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经⽆法承受了。其实对于普通的BBS⽹站,往往也存在对⾼并发写请求的需求,例如⽹站的实时统计在线⽤户状态,记录热门帖⼦的点击次数,投票计数等,因此这是⼀个相当普遍的需求。 Storage - 对海量数据的⾼效率存储和访问的需求 类似Facebook,twitter,Friendfeed这样的SNS⽹站,每天⽤户产⽣海量的⽤户动态,以Friendfeed为例,⼀个⽉就达到了2.5亿条⽤户动态,对于关系数据库来说,在⼀张2.5亿条记录的表⾥⾯进⾏SQL查询,效率是极其低下乃⾄不可忍受的。再例如⼤型web⽹站的⽤户登录系统,例如腾讯,盛⼤,动辄数以亿计的帐号,关系数据库也很难应付。 Scalability && High Availability- 对数据库的⾼可扩展性和⾼可⽤性的需求 在基于web的架构当中,数据库是最难进⾏横向扩展的,当⼀个应⽤系统的⽤户量和访问量与⽇俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能⼒。对于很多需要提供24⼩时不间断服务的⽹站来说,对数据库系统进⾏升级和扩展是⾮常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?NoSQL数据库的产⽣就是为了解决⼤规模数据集合多重数据种类带来的挑战,尤其是⼤数据应⽤难题。⼀些主流的NOSQL产品:1.2 NoSQL分类NoSQL数据库的四⼤分类如下:键值(Key-Value)存储数据库 相关产品: Redis 典型应⽤: 内容缓存,主要⽤于处理⼤量数据的⾼访问负载。 数据模型: ⼀系列键值对 优势: 快速查询 劣势: 存储的数据缺少结构化列存储数据库 相关产品:HBase 典型应⽤:分布式的⽂件系统 数据模型:以列簇式存储,将同⼀列数据存在⼀起 优势:查找速度快,可扩展性强,更容易进⾏分布式扩展 劣势:功能相对局限⽂档型数据库 相关产品:MongoDB 典型应⽤:Web应⽤(与Key-Value类似,Value是结构化的) 数据模型: ⼀系列键值对 优势:数据结构要求不严格 劣势: 查询性能不⾼,⽽且缺乏统⼀的查询语法图形(Graph)数据库 相关数据库:Neo4J 典型应⽤:社交⽹络 数据模型:图结构 优势:利⽤图结构相关算法。 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群⽅案。1.3 NoSQL优缺点NoSQL:Not Only SQL ,本质也是⼀种数据库的技术,相对于传统数据库技术,它不会遵循⼀些约束,⽐如:sql标准、ACID属性,表结构等。优点满⾜对数据库的⾼并发读写对海量数据的⾼效存储和访问对数据库⾼扩展性和⾼可⽤性灵活的数据结构,满⾜数据结构不固定的场景缺点⼀般不⽀持事务实现复杂SQL查询⽐较复杂运维⼈员数据维护门槛较⾼⽬前不是主流的数据库技术BMongoDB:是⼀个数据库 ,⾼性能、⽆模式、⽂档性,⽬前nosql中最热门的数据库,开源产品,基于c++开发。是nosql数据库中功能最丰富,最像关系数据库的。2.1 MongoDB特性⾯向集合⽂档的存储:适合存储Bson(json的扩展)形式的数据;格式⾃由,数据格式不固定,⽣产环境下修改结构都可以不影响程序运⾏;强⼤的查询语句,⾯向对象的查询语⾔,基本覆盖sql语⾔所有能⼒;完整的索引⽀持,⽀持查询计划;⽀持复制和⾃动故障转移;⽀持⼆进制数据及⼤型对象(⽂件)的⾼效存储;使⽤分⽚集群提升系统扩展性;使⽤内存映射存储引擎,把磁盘的IO操作转换成为内存的操作;2.1 MongoDB基本概念2.2 MongoDB概念与RDMS概念对⽐2.3 应不应该使⽤MongoDB并没有某个业务场景必须要使⽤ MongoDB才能解决,但使⽤ MongoDB 通常能让你以更低的成本解决问题(包括学习、开发、运维等成本)应⽤特征应⽤不需要事务及复杂 join ⽀持新应⽤,需求会变,数据模型⽆法确定,想快速迭代开发应⽤需要2000-3000以上的读写QPS应⽤需要TB甚⾄ PB 级别数据存储应⽤发展迅速,需要能快速⽔平扩展应⽤要求存储的数据不丢失应⽤需要99.999%⾼可⽤应⽤需要⼤量的地理位置查询、⽂本查询Yes/ No必须为Yes???????如果上述有1个 Yes,可以考虑 MongoDB,2个及以上的 Yes,选择MongoDB绝不会后悔!2.4 MongoDB使⽤场景MongoDB 的应⽤已经渗透到各个领域,⽐如游戏、物流、电商、内容管理、社交、物联⽹、视频直播等,以下是⼏个实际的应⽤案例:游戏场景,使⽤ MongoDB 存储游戏⽤户信息,⽤户的装备、积分等直接以内嵌⽂档的形式存储,⽅便查询、更新物流场景,使⽤ MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,⼀次查询就能将订单所有的变更读取出来。社交场景,使⽤ MongoDB 存储存储⽤户信息,以及⽤户发表的朋友圈信息,通过地理位置索引实现附近的⼈、地点等功能物联⽹场景,使⽤ MongoDB 存储所有接⼊的智能设备信息,以及设备汇报的⽇志信息,并对这些信息进⾏多维度的分析视频直播,使⽤ MongoDB 存储⽤户信息、礼物信息等2.5 什么场景不能⽤MongoDB⾼度事务性系统:例如银⾏、财务等系统。MongoDB对事物的⽀持较弱;传统的商业智能应⽤:特定问题的数据分析,多数据实体关联,涉及到复杂的、⾼度优化的查询⽅式;使⽤sql⽅便的时候;数据结构相对固定,使⽤sql进⾏查询统计更加便利的时候;
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689901493a293450.html
评论列表(0条)