而非关系型数据库,就不是按照这个二维表格来存储数据了,例如Redis是使用键值对(key-value)来组织数据,MongoDB是采用BSON的格式(可以想象成JSON);并且不局限于固定的结构。
关系型数据库和非关系型数据库之间的关系,也不是有你没有,二者选其一,通常都是配合起来使用的。
各自的优缺点
关系型数据库,容易理解,使用方便(通过SQL语言操作),易于维护;但是因为数据在磁盘上存储,I/O会成为一个很大的瓶颈,如果在高并发的场景下,性能降低的很快;另外,对于关系型数据库,当单表数据量增加到一定程度的时候,表的操作效率也会很低;表结构固定,当数据量比较大的时候,对表结构的扩展会是灾难性的。
非惯性数据库因为数据结构的“随性”,用户可以根据需要增加字段,关系型数据习惯设计成多张表,然后通过表关联查询,而非关系型数据库(文档性)会把所有字段放到一个集合中,避免多表的关联。不过缺点也非常明显,“随性”也就意味着没有标准,单集合有好处也有坏处,没有完整性约束,对于复杂的业务场景支持比较差。
至于MongoDB和Redis怎么选择,两者差别还是很大的,适用场景也不同
Redis的数据存储格式是key-value,支持持久化、 支持事务,经常用于缓存、高并发下的读写(计数器、最新列表、秒杀),因为单线程的机制也会用于分布式锁。
MongoDB的数据存储格式为BSON(类似于JSON),支持快速读写,特别是大吞吐量的写操作;如果表结构不明确,未来可能会发生很大的变化,非常适合使用MongoDB。
架构中可以同时包含关系型数据库、Redis和MongoDB,各司其职。
偶将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。