SQL数据库,指关系型数据库。主要有:SQL Server,Oracle,MySQL,PostgreSQL。
NoSQL泛指非关系型数据库。主要有:MongoDB,Redis,CouchDB。
1、标准化模式。虽然 SQL 数据库的标准化模式使它们变得僵硬且难以修改,但它确实具有一些优势。添加到数据库的所有数据都必须符合众所周知的由行和列组成的链接表模式。有些人可能会发现这种局限性,但当数据一致性、完整性、安全性和合规性非常重要时,它会很有帮助。
2、大型用户社区。在将近 50 年的历史中,SQL 编程语言已经非常成熟且仍被广泛使用。它有一个强大的社区,无数专家愿意分享技巧和成熟的最佳实践。有很多机会可以提高技能和协作。如有必要,顾问和 SQL 供应商可以提供额外的支持。使用SQL您的开发人员将能够找到他们需要的答案。
3、无需代码。SQL 是一种用户友好的语言。可以使用简单的关键字来管理和查询数据库,几乎不需要编码。
4、合规性。关系数据库表的高度结构化特性使 SQL 数据库能够符合原子性、一致性、隔离性和持久性 (ACID)。这种合规级别使表保持同步并保证事务的有效性。当您运行的应用程序没有出错的余地并且需要最高级别的数据完整性时,这可能是最正确的选择。
1、硬件。SQL 数据库的标准是垂直扩展,其中容量只能通过增加现有服务器上的 RAM、CPU 和 SSD 等功能或迁移到更大、更昂贵的服务器来扩展。随着数据的增长,需要不断增加硬盘空间,并且需要更快的机器来运行不断发展和更复杂的技术。SQL 的硬件需求还包括持续的日常维护和运营成本。这是一个永无止境的“仓鼠轮”。
2、数据规范化。在数据存储成本很高的时候开发的关系数据库试图否定数据重复。每个表都有不同的信息,它们可以使用共同的值进行连接和查询。然而,随着 SQL 数据库变得越来越大,大量表之间所需的查找和连接可能会减慢速度。
3、刚性。SQL 数据库的模式必须在使用前定义。一旦到位,它们就变得不灵活,而且修改通常很困难并且需要大量资源。因此,在数据库投入生产之前,需要在前期规划上投入大量时间。因此,只有当所有数据也是结构化的并且不期望在数量或数据类型方面发生太大变化时,它们才适用。
4、资源密集型扩展。如前所述,SQL 数据库通常通过扩大硬件投资来垂直扩展。这是昂贵且耗时的。在某些情况下,组织可能会尝试通过分区来水平扩展 SQL 数据库。这种增加的复杂性放大了所花费的时间和资源。这项工作可能包括编码,需要高技能、高薪的开发人员。另一方面,NoSQL 数据库横向扩展,使扩展容量更容易且更具成本效益。它们非常适合云计算和处理超大且快速增长的数据集。
1、数据结构固定;
2、相关业务对数据安全性、一致性要求较高
1、持续可用性。使用NoSQL,数据分布在多个服务器和区域中,因此没有单点故障。因此,NoSQL 数据库更加稳定和弹性,具有持续可用性和零停机时间。
2、查询速度。由于NoSQL 数据库是非规范化的,无需担心数据重复,特定查询所需的所有信息通常已经存储在一起——无需连接。这可以使查找更容易,尤其是在处理大量数据时。这也意味着 NoSQL 对于简单查询可以非常快。毫无疑问,SQL 数据库也可以返回非常快速的查询。它们还支持结构化数据的高度复杂查询。但是,随着 SQL 数据库的增长和复杂连接要求的增加,查询速度会迅速下降。
(3)敏捷。NoSQL 数据库是随着数据存储成本开始急剧下降而开发人员成本上升而开发的。数据重复不再是问题。相反,它们旨在为开发人员提供尽可能多的灵活性,以提高创造力和生产力。NoSQL 数据库模式不受行和列的限制,不必预先定义。相反,它们是动态的,能够处理所有类型的数据,包括结构化、半结构化、非结构化和多态数据。
NoSQL 数据库并不是万能的。与 SQL 数据库不同,它们不受限于可能位于单个服务器上的死板、集中的数据模型。相反,NoSQL 可以灵活地连接不同的数据库模型类型,这些模型类型可以分布在许多服务器上。NoSQL 包括多种数据库类型,允许开发人员找到最适合其数据和用例的组合。NoSQL 数据库的主要类型是键/值、文档、表格(或宽列)、图形或多模型。
(4)低成本。NoSQL 数据库横向扩展,使扩展容量具有成本效益。与其升级昂贵的硬件,它们可以通过简单地添加商品服务器或云实例来廉价地扩展。开源 NoSQL 数据库为许多组织提供了经济实惠的选择。它们非常适合云计算和处理超大且快速增长的数据集。
1、没有标准化的语言。没有执行 NoSQL 查询的标准语言。用于查询数据的语法因不同类型的 NoSQL 数据库而异。与只有一种易于学习的语言需要掌握的 SQL 不同,NoSQL 的学习曲线更陡峭。
2、较小的用户社区。十多年来,开发人员一直在使用 NoSQL 数据库,并且社区正在迅速发展。但是,它不如 SQL 社区成熟。
3、复杂查询效率低下。灵活性是有代价的。由于 NoSQL 数据库中存在多种数据结构,因此查询效率不高。与 SQL 数据库不同,没有标准接口来执行复杂的查询。即使是简单的 NoSQL 查询也可能需要编程经验。
4、数据检索不一致。NoSQL 数据库的分布式特性使数据能够更快地可用。但是,它也可能使确保数据始终一致变得更加困难。查询可能并不总是返回更新的数据,并且可能会收到不准确的信息。使用其分布式方法,数据库可以同时返回不同的值,具体取决于恰好被查询的服务器。这是 NoSQL 没有达到 ACID 级别合规性的原因之一。
1、数据结构不固定;
2、对一致性、安全性要求不高;
3、对性能要求
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
redis的官网地址,非常好记。
1、键值型,value支持多种不同数据结构,功能丰富;
2、单线程,每个命令具备原子性;
3、低延迟,速度快(基于内存、IO多路复用、良好的编码);
4、支持数据持久化;
5、支持主从集群、分片集群;
6、支持多语言客户端
实际的开发中,我们还是主要以 MySQL 为主(存储全量数据), Redis 为辅的(存储热点数据,例如 session 信息)~