【笔记】大数据技术之NoSQL数据库(五)
NoSQL数据库概述特点:灵活可扩展灵活数据模型HBase数据库对于云计算有很强的扩展性传统数据库不足无法满足海量数据的管理需求无法满足高并发的需求无法高扩展性和高可用性的需求主从机制写负载在主服务器返回从服务器MySQL集群方式缺陷复杂:整个集群部署管理配置非常复杂延迟:主库压力较大时会带来较大的延迟扩容:整个集群压力打需要增加新机器对整个数据集进行重新分区web2.0时代特点NoSQL 与关系
·
NoSQL数据库
概述
- 特点:
- 灵活可扩展
- 灵活数据模型
- HBase数据库
- 对于云计算有很强的扩展性
- 传统数据库不足
- 无法满足海量数据的管理需求
- 无法满足高并发的需求
- 无法高扩展性和高可用性的需求
- 主从机制
- 写负载在主服务器
- 返回从服务器
- MySQL集群方式缺陷
- 复杂:整个集群部署管理配置非常复杂
- 延迟:主库压力较大时会带来较大的延迟
- 扩容:整个集群压力打需要增加新机器对整个数据集进行重新分区
- web2.0时代特点
NoSQL 与关系数据库比较
- 关系数据库:
- 完备关系数据理论完整
- 很难实现纵向扩展,纵向扩展非常有限
- 定义严格的数据库模式
- 查询效率高,但是数据级增大会降低
- ACID事务模型可以保证事务强一致性
- 保证完整性的完备机制
- 扩展行差
- 随着规模,一致性严格,可用性削弱
- 关系数据库遵循|SQL标准
- 商业数据库,可以获得非常强大的技术和后续服务支持
- 管理员维护
- NoSQL:
- 不具有完备数据库
- 具有非常好的水平可扩展性
- 数据模型非常灵活
- 不具备面向复杂数据的查询
- 未构建面向复杂查询的索引查询性能差
- 不能实现完整性约束
- 水平扩展性好
- 非常好的可用性
- 未形成通用的行业标准
- 处于整个发展阶段的初期,开源
- 没有陈述的基础和实践操作规范,维护较为复杂
键值数据库和列族数据库
键值数据库
- key-value
列族数据库
文档数据库*
- 能够将自己的数据的内容进行自我描述
<configuration>
<property>
<name></name>
<value></value>
</property>
</configuration>
图数据库
NoSQL理论基石
- CAP理论:C一致;A可用;Q分区容忍
- 遇到问题的解决方案:
- CA:与实务相关内容放在同一台机器上避免网络分区
- CP:网络分区,数据一致后取数据,短时间内无法取到数据
- AP:数据可能不一致
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JdFMAqtm-1604051600962)(./5-9.png)]
- 遇到问题的解决方案:
- BASE理论:BA基本可用;S软状态(有一段时间不同步);E最终一致性
- 最终一致性
- 强;弱:后续是否能获取最新数据
- 因果一致:A通知B,B更新
- 自我:A更新,A获得新值
- 单调读一:A看过某值,之后的访问不会返回之前的旧值
- 单调写一:来自同一个进程的写操作按顺序执行
- 会话:把访问存储系统的进程放在会话上下问进程,只要绘画存在,系统就可以保证自我
W/R/W关系 | 结果 |
---|---|
W+R>N | 强一致性 |
W+R<=N | 弱一致性 |
** N=W&R=1|任何一个写节点失败都会导致写失败,由于数据分布的N个节点是同步写入,可以保证强一致性**
NoSQL -> NewSQL
-
oldSQL(原关系数据库)
-
NoSQL
-
NewSQL
- 同时具备上面两个各自优点
- 同时具备上面两个各自优点
-
分类图
文档数据库MongoDB
-
C++编写
-
数据存储为文档,结构由键值对组成类似于JSON对象
-
二进制数据(key-value)(BSON)
-
概念解释
SQL | MongoDB | 解释说明 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 字段/域 |
index | index | 索引 |
table joins | 后者不支持 | |
primary key | primary key | 后者自动将_id设置为主键 |
使用方式
- 连接:mongodb://localhost
- 登录:mongodb://username:password@localhost/db_name
- 创建数据库:use db_name
- 创建集合:无
- 插入文档:db.collection_name.insert(document)
- 程序访问
- 环境配置:需要MongoDB JDBC驱动
- mongo jar
- jar包导入classpath
- 连接数据库
- 环境配置:需要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();
}
}
- 具体操作
- 创建集合
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();
}
}
目前遇到的坑
- 强制关闭虚拟机会造成不可预计的错误
- 利用ftp从主机向虚拟机传输文件时注意选择的协议是SFTP,否则文件无法正常tar解压
实际操作
更多推荐
已为社区贡献7条内容
所有评论(0)