关系数据库是数据项之间具有预定义关系的数据项的集合。这些项被组织为一组具有列和行的表。表用于保存有关要在数据库中表示的对象的信息。表中的每列都保存着特定类型的数据,字段存储着属性的实际值。表中的行表示一个对象或实体的相关值的集合。表中的每一行可标有一个称为主键的唯一标识符,并且可使用外键在多个表中的行之间建立关联。可以通过许多不同的方式访问此数据,而无需重新组织数据库表本身。
非关系型数据库即我们常说的NoSQL数据库。NoSQL的存储格式是key-value形式,可以像关系型数据库那样存储基础数据类型的数据,也可以存储集合、对象等等。NoSQL虽然性能比较高,但是并不支持事物,也不能进行联表查询,一般用于较大规模数据的存储。
关系型数据库发展了很长一段时间,拥有非常成熟的体系。所占份额也在逐渐增加。而且支持事物的操作,保证数据的一致性,可以通过SQL语句完成复杂的操作。但是使用过程中当数据量到达一定程度时,关系型数据库的效率会有明显的下降。一个复杂的查询操作,一系列的组合索引都会消耗非常多的内存空间,此时我们需要对数据库进行读写分离操作,或者将数据库结构进行拆分(水平拆分、垂直拆分)将请求压力分担在不同的库中。
垂直拆分是指将一张表拆分成多个表,表之间通过主键进行关联。
水平拆分是按照某种规则拆分成多个表,比如通过用户角色进行拆分
读写分离:所谓读写分离就是讲读操作(查询数据)和写操作(插入&更新)指向不同的数据库节点,他们中间通过某种机制实现数据的同步,如binlog。实际的应用中大部分压力还是来自读操作,所以主要是一主多从的架构。
非关系型数据库发展的这几年,深受人们的喜爱。免费开源、成本低、部署简单、非结构化存储等等明显的优势。而且它对海量数据处理能力非常强,内存级数据库,查询速度也非常快。存储的数据格式比较丰富,易于扩展,不能使用sql进行复杂的查询。
原文:https://www.cnblogs.com/liyihua/p/14482361.html