Skip to content

分表和分库分别是什么,有什么区别 ​

分库是将数据按照一定规则划分到独立数据库中,分表是将一个表拆成多个表, 垂直分库 垂直分表, 将每行中大字段拆成独立的表,进而提高查询效率 水平分库 水平分表 ,将同一字段按照这个一定的规则,划分成多个表

主从延时都有什么处理方法 ​

强制走主库方案: 对于大事务或资源密集型操作,直接在主库执行,避免从库的额外延时。

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 的查询方式各不相同,复杂关联查询能力普遍较弱,往往需要在设计数据结构时就考虑好查询方式。

对比一览 ​

维度SQLNoSQL
数据结构固定表结构键值、文档、列族、图等
事务ACID多为 BASE
扩展以垂直扩展为主,分库分表复杂水平扩展容易
查询复杂查询、JOIN 能力强简单查询快,复杂关联弱
典型场景订单、账户、库存缓存、日志、社交动态、海量数据

实际怎么用 ​

两者并不是二选一。常见做法是:MySQL 存核心业务数据,保证一致性;Redis 做缓存和计数器,扛高并发读;Elasticsearch 做全文检索;MongoDB 存结构多变的内容数据。

总结 ​

关系型数据库胜在结构严谨、事务可靠、查询强大;NoSQL 胜在结构灵活、扩展容易、性能高。选型时先问业务是否需要强一致和复杂查询,再看数据量和并发规模。


📮 联系方式

微信:BuZhiCoder | QQ:1776418445 扫码添加,备注「求职」优先通过

微信二维码

基于 VitePress 搭建

🌟训练营🤖AI面试📄做简历💻刷题