mongodb是用来干嘛的(MongoDB是什么)
mongodb是用来干嘛的(MongoDB是什么)SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。(1)文档数据类型{ username:'123' password:'123' } 使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mySQL等SQL数据库大大增强。(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级
作者:hello_锦泰 来源:https://blog.csdn.net/hayre/article/details/80628431
最近在回顾MongoDB的相关知识,输出一篇文章做为MongoDB知识点的总结。
总结的目的在于回顾MongoDB的相关知识点,明确MongoDB在企业级应用中充当的角色,为之后的技术选型提供一个可查阅的信息简报。
1、MongoDB是什么?MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库
2、为什么要用MongoDB?(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
{ username:'123' password:'123' }
使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mySQL等SQL数据库大大增强。
(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
3、主要特性(1)文档数据类型
SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
(2)即时查询能力
MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。
(3)复制能力
MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
(4)速度与持久性
MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
5、删除语法
1db.foo.remove() //删除所有数据 2db.foo.remove({favorties.cities:"cheyene"}) //根据条件进行删除 3db.drop() //删除整个集合
6、索引相关语法
1db.numbers.ensureIndex({num:1}) 2//创建一个升序索引 3db.numbers.getIndexes() 4//获取全部索引
7、基本管理语法
1 show dbs 2 //查询所有数据库 3 show collections 4 //显示所有表 5 db.stats() 6 //显示数据库状态信息 7 db.numbers.stats() 8 //显示集合表状态信息 9 db shutdownServer() 10 //停止数据库 11 db.help() 12 //获取数据库操作命令 13 db.foo.help() 14 //获取表操作命令 15 tab 键 //能自动帮我们补全命令
以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去操作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
7、在Java中使用MongoDB1、使用maven引入jar包
这里引用的是最新的驱动包,提供了一套新的访问连接方式
1 <dependency> 2 <groupId>org.mongodb</groupId> 3 <artifactId>mongodb-driver-sync</artifactId> 4 <version>3.8.0-beta3</version> 5 </dependency>
2、创建一个访问客户端
1 MongoClient client = MongoClients.create(“mongodb://10.201.76.94:27017”);
3、获取集合数量
1 public long count() { 2 MongoClient client = this.getClient(); 3 MongoCollection<Document> collections= client.getDatabase("mongodb_db_name").getCollection("mongodb_collection_name"); 4 return collections.count(); 5 }
4、查询集合
这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。