1.SQL和NoSQL
1.1 知识点
SQL 和 NoSQL 是什么
SQL 是关系型数据库,NoSQL 是非关系型数据库。
数据模型
SQL
- SQL 使用表格(tables)存储数据,表由行和列组成,每一行是记录,每一列是字段。
- 固定的模式(Schema):表的结构需要提前定义(如字段名称、数据类型等),插入数据时必须遵守定义好的模式。
- 适用场景:结构化数据(如财务、订单系统)。
- 示例:MySQL、PostgreSQL、SQL Server。
- 面向行数据库:为了靠近面向对象,大多使用 ORM 框架来开始。如: EF Core。
NoSQL
- NoSQL 使用多种数据模型,主要包括:
- 文档型(Document-based):JSON 或 BSON 格式存储数据。
- 键值型(Key-Value Stores):类似字典,数据以键值对存储。
- 列族型(Column-family Stores):面向列的存储,适合大规模数据分析。
- 图数据库(Graph Databases):基于节点和边构建,适合存储和查询关系密集的数据。
- 动态模式:无需固定的表结构,可随时添加字段,灵活性高。
- 适用场景:半结构化或非结构化数据(如日志、社交网络、物联网数据)。
- 示例:MongoDB、Redis、Cassandra、Neo4j。
- 文档型是最像面向对象的非关系型数据库。
查询语言
SQL
- 标准化语言:使用结构化查询语言(SQL)操作数据,语法固定、通用性强。
- 功能强大:支持复杂的查询、事务操作、聚合函数等。
NoSQL
- 多样化的接口:查询方式根据具体数据库的实现而定,通常是:
- 文档型:使用 JSON 或特定库的方法(如 MongoDB 的查询)。
- 键值型:简单的通过键获取值。
事务支持
什么是事务
事务是数据库管理系统(DBMS)中用于处理一组操作的基本单位,这些操作要么全部成功,要么全部失败,确保数据库的完整性和一致性。
事务的四个特性(ACID):
原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不会出现部分成功的情况。
一致性(Consistency):事务执行前后,数据库的完整性约束未被破坏,确保数据从一个一致性状态转变到另一个一致性状态。
隔离性(Isolation):并发执行的事务相互独立,一个事务的执行不应受到其他事务的干扰。
持久性(Durability):一旦事务提交,其对数据库的修改是永久性的,即使系统崩溃也不会丢失。
这些特性共同确保了数据库在处理事务时的可靠性和一致性。
SQL
- 支持事务:适合场景,如银行系统、电子商务等对数据一致性要求极高的场景。
NoSQL
- 部分支持事务:适合场景,如社交网络等对实时一致性要求较低,但追求高可用性和性能的场景。
性能
SQL
- 高性能查询:对于结构化数据,优化好的 SQL 查询速度非常快。
- 复杂事务支持:在处理多表关联和复杂事务时表现优异。
NoSQL
- 高并发处理:由于没有复杂事务机制,NoSQL 可以轻松处理大量并发读写请求。
- 低延迟:适合需要快速读写的场景。
适用场景对比图
优劣势总结
优势
- SQL:
- 成熟稳定,技术生态完善。
- 数据一致性和完整性高。
- 强大的查询能力,适合复杂关系的建模。
- NoSQL:
- 高扩展性和灵活性。
- 适应多种数据模型(文档、键值、图形等)。
- 更快的读写速度,支持分布式存储。
劣势
- SQL:
- 难以应对海量数据和高并发。
- 模式固定,灵活性不足。
- NoSQL:
- 不适合复杂查询和事务。
- 不提供标准化查询语言,学习成本高。
- 数据一致性较弱(除部分 NoSQL 数据库外,如支持事务的 MongoDB)。
总结
SQL 和 NoSQL 各有其最佳适用场景。SQL 适用于对一致性和复杂关系建模要求高的场景,而 NoSQL 则更加适合需要高扩展性、灵活性以及处理大规模数据的应用。在实际使用中,可以根据具体需求选择合适的数据库类型,或者结合两者(如采用混合数据库架构)。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com