NoSQL数据库

概述

  • 特点:
    • 灵活可扩展
    • 灵活数据模型
  • HBase数据库
  • 对于云计算有很强的扩展性
  • 传统数据库不足
    • 无法满足海量数据的管理需求
    • 无法满足高并发的需求
    • 无法高扩展性和高可用性的需求
  • 主从机制
    • 写负载在主服务器
    • 返回从服务器
  • MySQL集群方式缺陷
    • 复杂:整个集群部署管理配置非常复杂
    • 延迟:主库压力较大时会带来较大的延迟
    • 扩容:整个集群压力打需要增加新机器对整个数据集进行重新分区
  • web2.0时代特点

NoSQL 与关系数据库比较

  1. 关系数据库:
    • 完备关系数据理论完整
    • 很难实现纵向扩展,纵向扩展非常有限
    • 定义严格的数据库模式
    • 查询效率高,但是数据级增大会降低
    • ACID事务模型可以保证事务强一致性
    • 保证完整性的完备机制
    • 扩展行差
    • 随着规模,一致性严格,可用性削弱
    • 关系数据库遵循|SQL标准
    • 商业数据库,可以获得非常强大的技术和后续服务支持
    • 管理员维护
  2. NoSQL:
    • 不具有完备数据库
    • 具有非常好的水平可扩展性
    • 数据模型非常灵活
    • 不具备面向复杂数据的查询
    • 未构建面向复杂查询的索引查询性能差
    • 不能实现完整性约束
    • 水平扩展性好
    • 非常好的可用性
    • 未形成通用的行业标准
    • 处于整个发展阶段的初期,开源
    • 没有陈述的基础和实践操作规范,维护较为复杂

键值数据库和列族数据库

在这里插入图片描述
在这里插入图片描述

键值数据库

  • key-value
    在这里插入图片描述

列族数据库

在这里插入图片描述

文档数据库*

  • 能够将自己的数据的内容进行自我描述
<configuration>
	<property>
		<name></name>
		<value></value>
	</property>
</configuration>

在这里插入图片描述

图数据库

在这里插入图片描述

NoSQL理论基石

  1. CAP理论:C一致;A可用;Q分区容忍
    • 遇到问题的解决方案:
      1. CA:与实务相关内容放在同一台机器上避免网络分区
      2. CP:网络分区,数据一致后取数据,短时间内无法取到数据
      3. AP:数据可能不一致
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JdFMAqtm-1604051600962)(./5-9.png)]
  2. BASE理论:BA基本可用;S软状态(有一段时间不同步);E最终一致性
  3. 最终一致性
    • 强;弱:后续是否能获取最新数据
    • 因果一致:A通知B,B更新
    • 自我:A更新,A获得新值
    • 单调读一:A看过某值,之后的访问不会返回之前的旧值
    • 单调写一:来自同一个进程的写操作按顺序执行
    • 会话:把访问存储系统的进程放在会话上下问进程,只要绘画存在,系统就可以保证自我
W/R/W关系结果
W+R>N强一致性
W+R<=N弱一致性

** N=W&R=1|任何一个写节点失败都会导致写失败,由于数据分布的N个节点是同步写入,可以保证强一致性**

  • 强一致性:写节点和读节点充电
  • 弱一致性:无法读取主库已经更新过的数据
  • N:数据冗余份数
  • W:更新数据需要保证写完成的节点数
  • R:读取数据的时候需要读取的节点数

NoSQL -> NewSQL

  • oldSQL(原关系数据库)

  • NoSQL

  • NewSQL

    • 同时具备上面两个各自优点
      在这里插入图片描述
  • 分类图
    在这里插入图片描述

文档数据库MongoDB

  • C++编写

  • 数据存储为文档,结构由键值对组成类似于JSON对象

  • 二进制数据(key-value)(BSON)
    在这里插入图片描述

  • 概念解释

SQLMongoDB解释说明
databasedatabase数据库
tablecollection表/集合
rowdocument行/文档
columnfield字段/域
indexindex索引
table joins后者不支持
primary keyprimary key后者自动将_id设置为主键

使用方式

  1. 连接:mongodb://localhost
  2. 登录:mongodb://username:password@localhost/db_name
  3. 创建数据库:use db_name
  4. 创建集合:无
  5. 插入文档:db.collection_name.insert(document)
  6. 程序访问
    • 环境配置:需要MongoDB JDBC驱动
    • 连接数据库
public static void init(String username, String password) {
	try{
		MongoClient mongoClient = new MongoClient("localhost",27017);
		DB db = mongoClient.getDB("db_name");
		boolean auth = db.authenticate(username,password);
	} catch(Exception e) {
		System.err.println(e.getClass().getName()+":"+e.getMessage());
		e.printStackTrace();
	}
}
  1. 具体操作
    • 创建集合DBCollection col = db.createCollection("collection_name")
    • 插入文档
public static void insertDocument(DBCollection col) {
	try{
		BasicDBObject doc = new BasicDBObject("title","title_value");
		append("description","content");
		append("url","..")
		col.insert(doc);
	} catch(Exception e) {
		e.printStackTrace();
	}
}

目前遇到的坑

  1. 强制关闭虚拟机会造成不可预计的错误
  2. 利用ftp从主机向虚拟机传输文件时注意选择的协议是SFTP,否则文件无法正常tar解压

实际操作

实验室传送门

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐