Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据

内存数据库、关系型数据库和非关系型数据库

内存数据库、关系型数据库和非关系型数据库

一、内存数据库、关系型数据库和非关系型数据库

1.个人观点:

二、内存数据库(Redis,MongoDb,SQLite,Oracle等):

三、Raft分布式协议:

四、Redis出现宕机,如何保证数据不丢失?


一、内存数据库、关系型数据库和非关系型数据库

数据库类型特性优点缺点

关系型数据库

SQLite,Oracle,MySQL等

1,关系型数据库,是指采用了关系模型来组织数据的数据库;
2,关系型数据库的最大特点就是事务的一致性 ;
3,简单来说,关系模型的指就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
1,容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状,层次等其他模型来说更容易理解;
2,使用方便:通用的SQL语言使得操作关系型数据库非常方便;
3,易于维护:丰富的完整性(实体完整性,参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
4,支持SQL可用于复杂的查询 
1,为了维护一致性所付出的巨大代价就是其读写性能比较差;
2,固定的表结构;
3,高并发读写不行 
4,海量数据的高效率读写

非关系型数据库

MongoDB,Redis,HBase等

1,使用键值对存储数据 ;
2,分布式 ;
3,一般不支持ACID特性 ;
如图4所示,非关系型数据库严格上不是一种数据库,的英文应该一种数据结构化存储方法的集合
1,无需经过SQL层的解析,读写性能很高 ;
2,基于键值对数据没有耦合性,容易扩展;
3,存储数据的格式:nosql的的的存储格式是键,值形式,文档形式,图片形式等等,文档形式,图片形式等等,而关系型数据库则只支持基础类型
1,不提供SQL支持,学习和使用成本较高;
2,无事务处理,附加功能双向和报表等支持也不好;

1.个人观点:

关系型数据库:在于关系,对数据操作(比如数据的增删改查)之前需要考虑关系,具备ACID特性(ACID是原子原子性,一致性一致性,隔离性隔离性,耐用性持久性),高并发能力一般不行

 

二、内存数据库(Redis,MongoDb,SQLite,Oracle等)

基于内存,读写速度快,数据有可能会丢失,丢失率只能降到最低,但不能根除。

MongoDB:更适合集群部署,更多的考虑到集群方案,一般可用于“海量数据分析的访问效率提升”。

Redis:更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。一般可用于“较小数据量的性能和运算,比如网络开发中的session存储”。

 

三、Raft分布式协议:

一般分布式都会遵从的协议:有点类似美国的总统选举。

比如有一个建议,有Ñ个服务器,有大于2N + 1的服务器表示赞同,那么这个建议就被通过。

假如建议是“一致性”,只要大于2N + 1的服务器之间的数据一致,那他们就是一致。

假如建议是“主服务器”,只要大于2N + 1的服务器投票给要被选举的服务器,被选举的服务器也将变成主服务器

还有很多思维:https://www.jdon.com/artichect/raft.html

 

四、Redis出现宕机,如何保证数据不丢失?

一台服务器快照持久化(RDB),同时满足在指定的时间间隔内和改动了几个数据的两个条件,生成内存中的数据集快照,然后写入磁盘;日志持久化(AOF),满足everysec(每秒)/always(每次操作)/no(默认30秒)条件,生成日志,然后写入磁盘缓存

多台服务器:Redis正在开发的Sentinel(哨兵监听),具体网址:http://redisdoc.com/topic/sentinel.html

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: Linux下安装并配置GIt

下一篇: StarUML使用简明教程

精华推荐