数据存储方式不一样
关系型数据库像Excel表格,每条记录都规规矩矩地放在行和列里。比如用户信息表,每一行代表一个用户,字段固定:ID、姓名、邮箱、注册时间。这种结构要求提前设计好表结构,后期加个字段都得小心谨慎。
NoSQL更像文件夹堆资料,数据可以是JSON那样的键值对、文档,也可以是图结构或者列族。比如MongoDB存用户信息,一个人可以有地址和爱好,另一个人多出个“会员等级”字段也没问题,不需要统一格式。
扩展方式各有招数
关系型数据库比如MySQL,通常靠升级服务器硬件来扛压力——换个更强的CPU、加内存,这叫垂直扩展。但机器再强也有上限,而且成本高。
NoSQL比如Cassandra或Redis,天生为分布式而生。数据可以自动拆开,分散到几十台机器上,横向扩展。就像快递网点越开越多,单子多了就加人手,不依赖一个中心节点。
事务处理风格不同
银行转账必须保证一致性:A扣钱的同时B要到账,要么全成功,要么全失败。这种强一致性是关系型数据库的强项,支持ACID(原子性、一致性、隔离性、持久性)。
NoSQL大多追求性能和可用性,牺牲一部分一致性。比如某电商抢购活动,订单系统可能先收下单请求,付款结果稍后同步,这就是最终一致性。短时间内看到库存没立刻减少,等一会儿才更新,能换来更高的并发能力。
查询语言天差地别
关系型数据库用SQL,一句SELECT * FROM users WHERE age > 30就能查出所有年龄大于30的用户。语法统一,灵活又强大。
NoSQL没有统一查询语言。MongoDB用JSON风格的查询条件:
{ age: { $gt: 30 } }而Redis更多是get/set操作,复杂查询得自己写逻辑处理。适用场景看需求
你做财务系统、ERP这类对数据准确性和关联查询要求高的项目,关系型数据库依然是首选。表之间通过外键关联,比如订单关联客户、商品,用JOIN轻松搞定。
如果是社交App动态流、物联网设备上报数据、用户行为日志这类高并发、数据结构多变的场景,NoSQL更合适。比如微博的时间线,每人看到的内容都不一样,用Redis缓存+MongoDB存储文档,读写速度快,结构也灵活。