使用 InfluxDB 进行基础设施监控 | 现场演示

立即观看

NoSQL 数据库

NoSQL 数据库是一种数据库系统,提供数据存储和检索机制,与传统的结构化关系数据库(要求数据符合预定义的表格)不同。

什么是 NoSQL 数据库?

NoSQL 数据库是一种数据库系统,提供数据存储和检索机制,与传统的结构化关系数据库(要求数据符合预定义的表格)不同。

NoSQL 数据库的出现是为了解决关系数据库中存在的可扩展性和灵活性问题,特别是在大量数据和多用户应用程序的背景下。 它们专门用于处理非结构化数据,并且可以轻松地跨多台服务器进行扩展。

虽然 NoSQL 数据库为可扩展性和灵活性提供了解决方案,但它们并不是 SQL 数据库的替代品,而是补充,适用于特定类型的项目。 SQL 数据库和 NoSQL 数据库之间的选择取决于应用程序或项目的具体数据要求。

NoSQL 数据库用例

内容管理

由于是无模式的,NoSQL 数据库非常适合 CMS 应用程序,因为它们灵活且易于修改以适应新的数据格式。

实时分析和大数据

NoSQL 数据库非常适合大数据,因为大多数 NoSQL 数据库都设计为开箱即用地水平扩展。 NoSQL 数据库也是实时分析用例的理想选择,因为与关系数据库相比,它们的设计允许它们处理更高的写入吞吐量。

物联网应用

物联网设备生成大量多样化的非结构化数据。 NoSQL 数据库可以有效地处理此类数据,其分布式特性适合物联网的地理分布,分片可以位于区域以提高性能。

社交网络

社交网络具有复杂的关系,最好使用基于图的 NoSQL 数据库进行建模。 LinkedIn 和 Facebook 都大量使用图数据库来驱动其应用程序。

NoSQL 数据库的优势

可扩展性

使用 NoSQL 数据库的主要优势之一是,几乎所有 NoSQL 数据库都将默认提供易于使用的水平扩展功能。 与大多数倾向于依赖垂直扩展的关系数据库相比,这使得随着应用程序的增长而轻松扩展变得容易。

性能

有各种针对特定用例优化的专用 NoSQL 数据库,因此您可以选择哪种数据库可以为您提供最佳性能。 通常,与关系数据库相比,NoSQL 数据库在处理更高的写入量方面也表现出色。

开发者体验

由于其灵活的数据模型,与关系数据库相比,迭代和更改应用程序更容易。 诸如图数据库或时间序列数据库之类的专用 NoSQL 数据库也倾向于提供内置功能,因此您不必为与某些类型数据相关的常见任务重新发明轮子,使用自定义代码。

NoSQL 数据库的挑战

NoSQL 数据库提供了许多优势,但这并不意味着它们是神奇的。 在为您的应用程序选择数据库时,您应该牢记几个潜在的缺点。

数据模型复杂性

虽然 NoSQL 数据库的灵活数据模型通常是一个卖点,但如果工程团队不严谨,它也可能成为一个主要问题。 这可能会导致在协调数据模型的外观以及数据应位于何处时出现问题。 它还可能导致数据冲突或数据重复。

复杂事务支持

对于某些需要高级事务的数据可靠性的应用程序,NoSQL 可能没有意义。 大多数 NoSQL 数据库将提供某种形式的简单事务支持,但不是 ACID 事务。 而且,对于确实提供 ACID 事务的 NoSQL 数据库,启用它们将导致失去承诺的性能提升。

成熟度

虽然像 MySQL 和 Postgres 这样的流行关系数据库由于已经存在了几十年而经过了实战检验,但许多 NoSQL 项目并不那么成熟。 这可能会导致晦涩的错误、较少的社区支持以及不太强大的工具生态系统。

数据一致性

数据库性能遵循 CAP 定理,这意味着在一致性、可用性或分区容错性方面,您只能拥有 3 个中的 2 个。 大多数 NoSQL 数据库牺牲一致性以在其他领域获得更好的性能,这意味着您应该仅将这种类型的数据库用于最终一致性可以接受的用例。

NoSQL 数据库的类型

键值数据库

键值数据库是 NoSQL 数据库的最简单形式,仅具有一个值,该值与唯一键绑定以标识该值。 键值数据库通常用于需要快速查找简单数据的任务,例如缓存、会话管理和用户信息。

文档数据库

文档数据库类似于键值数据库,但为存储的数据提供类似 JSON 的结构和更高级的查询功能。 MongoDB 和 CouchDB 是文档数据库的示例。

列式数据库

列式数据库用于 OLAP 和其他分析工作负载。 顾名思义,数据在磁盘上以列而不是像传统关系数据库那样的行格式化。 这可以实现更好的数据压缩和更快的聚合。 Redshift 和 Clickhouse 是列式数据库的示例。

图数据库

图数据库将数据表示为节点和边,以维护数据点之间的关系。 它们通常存储数据,以便即使在磁盘上也能维护这些关系,因此由于不需要将整个数据集保存在内存中,因此所需的 RAM 更少。 与在 SQL 数据库中连接多个表相比,连接数据点的查询效率更高且更易于创建。 图数据库通常用于社交网络和推荐引擎。 Neo4J 是图数据库的一个示例。

时间序列数据库

时间序列数据库经过优化,可用于存储时间序列数据,例如应用程序指标、物联网传感器数据或财务数据。 它们专注于处理大量写入数据、快速索引数据以便在摄取后不久即可查询数据,以及在时间范围内进行高效查询。 TSDB 的一个示例是 InfluxDB。

内存数据库

内存数据库将所有数据存储在 RAM 中,以实现快速查询和写入。 存储在内存中还允许它们提供磁盘数据库无法提供的独特数据结构。 缺点是 RAM 对于较大型数据集来说很昂贵。 Memcached 和 Redis 是内存数据库的示例。

搜索引擎数据库

搜索引擎数据库专为复杂的搜索查询和全文搜索而设计。 它们能够索引多种类型的数据,并提供不同的排名和评分算法来微调结果的返回方式。 Elasticsearch 是搜索引擎数据库的一个示例。

向量数据库

向量数据库是一种较新型的数据库,用于存储和查询用于人工智能应用程序的向量数据。 常见的用例是相似性搜索、图像识别和生成式人工智能。 向量数据库的一个示例是 Milvus。

宽列数据库

这些可以被认为是列式数据库的子集,这些数据库将数据存储在列族中,这使得它们比纯粹面向列的数据库更通用。 Cassandra 和 HBase 是宽列数据库的示例。

多模型数据库

许多 NoSQL 数据库在技术上都是多模型的,这意味着它们支持不同类型的数据模型和索引。 随着时间的推移,许多专用数据库添加了更多功能,并且能够作为单个数据库支持更多用例。

SQL 与 NoSQL 数据库用于时间序列数据

如果您正在处理时间序列数据,那么在存储数据时要做的关键决定之一是使用哪种类型的数据库。 过去,对于大多数传统关系数据库不具备的可扩展性优势,使用 NoSQL 数据库通常更有意义。 NoSQL 数据库还允许在无需定义架构的情况下写入数据,从而使开发人员的生活更轻松,从而可以轻松添加或删除字段。 还有一些 NoSQL 数据库专门设计用于处理时间序列数据,与为 OLTP 工作负载设计的更通用的关系数据库相比,它们具有更高的性能。

虽然在决定 SQL 数据库和 NoSQL 数据库用于时间序列数据时,上述因素仍然在某种程度上是正确的,但在某些情况下,您可以两全其美。 例如,InfluxDB 允许使用 SQL 查询数据,同时还提供可扩展性和时间序列数据特定的优化等功能,因此您的查询速度很快,并且写入吞吐量优于关系数据库。

常见问题解答

NoSQL 与 SQL:有什么区别?

关系数据库和 NoSQL 有一些关键差异,两种类型的数据库都做出了权衡。 哪个更好将取决于您的具体用例。

  • 数据模型 - SQL 数据库使用关系模型,该模型将数据组织成具有行和列的表格格式。 NoSQL 数据库有大量不同的数据模型来构建数据。
  • 可扩展性 - 关系数据库倾向于垂直扩展,这意味着数据库运行所在的服务器的硬件尺寸会增加。 这可能会长期限制可扩展性。 NoSQL 数据库倾向于设计为跨商品硬件进行水平扩展。
  • 数据完整性 - SQL 数据库支持 ACID 事务,这以性能为代价保证了数据完整性。 NoSQL 数据库通常使用 BASE,这涉及放宽一致性保证以换取性能。
  • 查询语言 - 关系数据库使用 SQL 作为查询语言,SQL 功能强大,但对于某些类型的查询可能会变得复杂。 NoSQL 数据库倾向于提供更简单且更易于非数据库专家使用的查询语言。

什么是 LSM 树?为什么 NoSQL 数据库使用它们?

LSM 树(或日志结构合并树)是一种数据结构,通常用于 NoSQL 数据库中,以提供高效的写入密集型操作。 它们的设计目标是降低随机写入磁盘的成本,这比顺序写入或读取更耗时。

LSM 树由两个或多个组件组成:一个内存组件(通常称为 memtable)和一个或多个磁盘组件。 当发生写入操作时,数据首先写入 memtable。 这种写入通常很快,因为它是在内存中执行的。

LSM 树设计用于多个 NoSQL 数据库中,例如 Cassandra 和 LevelDB,因为它提供了高写入吞吐量、高效的存储空间利用率和可调的读取性能。 它在写入密集型应用程序或需要快速且频繁地将大量数据写入磁盘的情况下尤其有用。

掌控您的运营,并将存储成本降低 90%

免费开始使用 运行概念验证

无需信用卡。

quote-shape

相关资源


DBU logo

免费 InfluxDB 培训

通过免费的自定进度和讲师指导的培训,快速开始您的 InfluxDB 之旅。

dbu-illustration