目录:
- 为什么要使用nosql
- mongo的简介
- 应用场景
- 入门demo
为什么要使用nosql:
随着互联网的发展,用户数量激增,访问量的上涨,传统的关系型数据库的性能也趋于瓶颈。
关系型数据库难以克服的问题:
1、高并发读写:为什么关系型数据库难以支持高并发的读写呢,因为它基于IO操作磁盘,而nosql一般直接操作内存。
2、海量数据高效存储与访问
3、高扩展性、高可用性
。。。。。。
关系型数据库的拘束:
1、事务一致性的约束;支撑高并发已经很困难了,还需要满足数据的一致性。
2、读写实时性需求
。。。。。。
nosql是什么,它的特点:
nosql(Not Only SQL),本质上也是一种数据存储技术,但相对与传统的sql来说它不会遵循一些约束。
1、特点:
- 支持海量数据存储
- 打破性能瓶颈
- 操作简单
- 支持开源
- 对服务器性能要求低
2、缺点:
- 不支持事务
- 复杂的sql难以实现(似于多表关联)
- 等等
mongo的简介:
mongo的特性:
1、面向集合文档的存储:存储bson形式(json的扩展)的数据
2、存储格式自由:数据格式不固定,修改数据结构不影响服务运行
3、强大的查询语句,媲美sql
4、完整的索引、查询计划支持
5、支持数据的复制和故障转移
6、支持二进制数据及大对象文件的高效存储
7、使用分片集群提升系统性能
8、使用内存映射存储引擎,把磁盘的IO操作转化为内存操作
。。。。。。
mongo概念与rdms对比:
如果有一个存储用户和邮箱的关系的需求:
1、在sql中一般需要用两个表来实现,且邮箱表需要有一个字段关联用户;user(用户表)、email(邮箱表,一对多)
2、但在mongo中你只需要将email那一字段设计成数组类型就可以了
{ _id: 0001 username: 'zd' email: [ 'test1@qq.com', 'test2@qq.com' ] }
应用场景:
项目中只要包含以上两个特征,选择mongo绝对不会错!!!
入门demo:
1、增加mongodb-drive依赖
1 <dependency> 2 <groupId>org.mongodb</groupId> 3 <artifactId>mongodb-driver</artifactId> 4 <version>3.4.3</version> 5 </dependency>
2、获取一条document数据
1 public class Test { 2 3 public static void main(String[] args) { 4 MongoClient client = new MongoClient("192.168.233.128", 27017); 5 MongoDatabase db = client.getDatabase("local"); 6 MongoCollection<Document> user = db.getCollection("user"); 7 for (Document next : user.find()) { 8 Object name = next.get("name"); 9 Object age = next.get("age"); 10 System.out.println(MessageFormat.format("name={0}, age={1}", name.toString(), age.toString())); 11 } 12 } 13 }