分表和分库分别是什么,有什么区别
分库是将数据按照一定规则划分到独立数据库中,分表是将一个表拆成多个表, 垂直分库 垂直分表, 将每行中大字段拆成独立的表,进而提高查询效率 水平分库 水平分表 ,将同一字段按照这个一定的规则,划分成多个表
主从延时都有什么处理方法
强制走主库方案: 对于大事务或资源密集型操作,直接在主库执行,避免从库的额外延时。
SQL 和 NoSQL 有什么区别?该怎么选
SQL 数据库指关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server;NoSQL 指非关系型数据库,如 Redis、MongoDB、HBase、Elasticsearch。两者最根本的区别在于数据模型,由此又带来了事务、扩展性和使用场景上的差异。
1. 数据模型
- 关系型:数据以行和列组成的二维表存储,每列是一个属性,每行是一条记录。表结构(Schema)需要预先定义,表与表之间通过外键和 JOIN 建立关联。
- 非关系型:不局限于二维表,存储形式多样:
- 键值型:Redis
- 文档型:MongoDB,以类 JSON 文档存储
- 列族型:HBase
- 图数据库:Neo4j
NoSQL 通常不强制固定结构,字段可以灵活增减。
2. 事务模型:ACID 与 BASE
关系型数据库支持 ACID:原子性、一致性、隔离性、持久性,适合对数据正确性要求极高的场景。
NoSQL 多数采用更宽松的 BASE:基本可用、软状态、最终一致性,以牺牲强一致换取更高的性能和可用性。
判断标准是业务是否必须强一致。比如转账、扣库存,一分钱都不能错,应选关系型;而朋友圈点赞数、文章阅读量,几秒内不一致并不影响体验,NoSQL 完全可以胜任。
3. 扩展性
- NoSQL:数据之间没有关联约束,天然容易拆分到多台机器上水平扩展。比如 Redis 提供主从复制、哨兵和 Cluster 分片集群。
- 关系型:数据之间存在关联,水平拆分后要面对跨库 JOIN、分布式事务、全局 ID 等难题,通常需要借助 ShardingSphere 等中间件实现分库分表。
4. 查询能力
SQL 是标准化的查询语言,支持复杂的多表关联、聚合、子查询。NoSQL 的查询方式各不相同,复杂关联查询能力普遍较弱,往往需要在设计数据结构时就考虑好查询方式。
对比一览
| 维度 | SQL | NoSQL |
|---|---|---|
| 数据结构 | 固定表结构 | 键值、文档、列族、图等 |
| 事务 | ACID | 多为 BASE |
| 扩展 | 以垂直扩展为主,分库分表复杂 | 水平扩展容易 |
| 查询 | 复杂查询、JOIN 能力强 | 简单查询快,复杂关联弱 |
| 典型场景 | 订单、账户、库存 | 缓存、日志、社交动态、海量数据 |
实际怎么用
两者并不是二选一。常见做法是:MySQL 存核心业务数据,保证一致性;Redis 做缓存和计数器,扛高并发读;Elasticsearch 做全文检索;MongoDB 存结构多变的内容数据。
总结
关系型数据库胜在结构严谨、事务可靠、查询强大;NoSQL 胜在结构灵活、扩展容易、性能高。选型时先问业务是否需要强一致和复杂查询,再看数据量和并发规模。
📮 联系方式
微信:BuZhiCoder | QQ:1776418445 扫码添加,备注「求职」优先通过
