远离那些贬低你理想的人。狭隘的人经常如此,伟大的人会让你感觉自己也可以变好。
——马克·吐温
SQL数据库,指关系型数据库-主要代表:SQL Server,Oracle,MySQL(开源)。PostgreSQL(开源)。
关系型数据库 存储结构化数据。这些数据逻辑上以行列二维表的形式存在,每一列代表数据的一种属性,每一行代表一个数据实体。
NoSQL指非关系型数据库,主要代表:MongoDB,Redis。NoSQL数据库逻辑上提供了不同于二维表的存储方式,存储方式可以是JSON文档、哈希表或其它方式。
选择SQL vs NoSQL
ACID vs BASE
关系型数据库支持ACID即原子性,一致性,隔离性和持久性。相对而言,NoSQL采用更宽松的模型BASE,即基本可用,软状态和最终一致性。
从实用的角度出发,我们需要考虑对于面对的应用场景,ACID是否是必须的。比如银行应用就必须保证ACID,否则一笔钱可能被使用两次;又比如社交软件不必保证ACID,因为一条状态的更新对于所有用户读取先后时间有数秒不同并不影响使用。
对比需要保证ACID的应用,我们可以优先考虑SQL。反之则可以优先考虑NoSQL。
扩展性对比
NoSQL数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。比如redis自带主从复制模式、哨兵模式、切片集群模式。
相反关系型数据库的数据之间存在关联性,水平扩展较难,需要解决跨服务器JOIN,分布式事务等问题。