一、定义#
**NoSQL **的全称最早是 Not Only SQL(不仅仅是 SQL),意思是它不强制使用关系型数据库的 SQL 语法,而是提供更灵活的方式来操作数据。
我们不能在大多数 NoSQL 里直接复制关系型数据库的复杂 SQL(如带 JOIN、多表事务、外键约束等)。
但很多现代 NoSQL 提供了 SQL-like 或 SQL 兼容层,让熟悉 SQL 的开发者上手更容易。
二、特性#
**NoSQL **数据库被设计成天生支持分布式,这是它与传统关系型数据库(SQL)最大的区别之一
1. 分布式(Distributed)#
意思是:数据库不是跑在一台服务器上,而是自动分布在多台服务器(节点)上组成一个集群。
为什么需要分布式?
单台服务器的 CPU、内存、磁盘、网络总有上限(垂直扩展贵且有瓶颈)。
当数据量达到 TB/PB 级、并发达到百万级时,必须把压力分散到多台机器上。
NoSQL 的优势:
自动处理节点加入/退出、故障转移。
支持高可用(一台机器挂了,其他机器还能继续服务)。
读写性能可以随着机器数量线性增长。
2. 数据分片(Sharding / Data Partitioning)#
分片就是把一份大数据“切成小块”(shards),然后把这些小块分散存储到不同的服务器上。
怎么切? 常见规则:
按键哈希分片(Hash Sharding):根据用户ID、订单ID 等字段取哈希值,取模后决定放到哪个节点(最常用)。
范围分片(Range Sharding):按时间、ID 范围划分(如 2025 年数据放节点A,2026 年放节点B)。
好处:
每个节点只管自己的一小部分数据,查询和写入更快。
容易水平扩展:数据太多?再加几台机器,系统自动把数据重新分片。
NoSQL 天生支持:MongoDB 有自动分片(Auto-Sharding),Cassandra 通过一致性哈希环实现分片,DynamoDB 完全自动管理分片。
3. 数据冗余(Data Redundancy / Replication)#
为了高可用,同一份数据会在多个节点上复制多份(通常 3 份或更多)。
一台节点挂掉时,其他副本还能提供服务,不会丢失数据。
这也是 NoSQL “天生支持”的特性之一。
三、总结#
分片后会带来一些挑战:跨分片的事务(分布式事务)很复杂,所以 NoSQL 通常采用最终一致性(BASE 原则),而不是 SQL 的强一致性(ACID)。
现代有些“NewSQL”数据库(如 CockroachDB、TiDB)试图结合 SQL 的易用性和 NoSQL 的分布式能力。