数据库类型

关于不同类型数据库及其工作原理的知识。

在构建您的数据堆栈时,有许多数据库和数据源选项需要考虑。以下是 Metabase 支持的主要参与者的概述,无论您是数据领域的新手还是只是需要复习。

全能型主力:传统关系型数据库管理系统

包括:Microsoft SQL Server, MySQL, Oracle Database, PostgreSQL

所有这四种关系型数据库管理系统(RDBMS)都已经存在数十年,并且能够很好地处理全面的数据库需求——插入记录、读取、更新、删除记录。在这四种数据库中,MySQL 和 PostgreSQL 是开源的。

如果您的组织时间或资源短缺,或者缺乏数据专家来构建ETL,那么像MySQL、Postgres、SQL Server 或Oracle Database这样的关系型数据库系统是一个很好的选择。许多使用 Metabase 的组织只需连接其关系型数据库,就可以立即开始获取洞察。这些数据库非常适合用作您的软件的应用程序数据库。Metabase 软件本身可以使用 Postgres 或 MySQL 作为其生产数据库

传统关系型数据库可以轻松处理数十万条记录的分析查询,但如果您的组织需要显著扩展——例如数百万条或更多记录——您的 RDBMS 可能会达到瓶颈。这很大程度上取决于您的数据仓库如何配置以及您是否使用 ETL 流程来聚合数据,以便您的数据库需要读取更少的行。

这四种系统都是事务型数据库,并非专门为分析查询而构建。虽然您可以通过这四种引擎中的任何一种来完成分析查询,但为了跟上数据量的增长,它可能需要大量的额外硬件(额外的内存、CPU 和更快的磁盘),这会很快变得昂贵。随着您的扩展和分析查询变得越来越复杂,无论您投入多少硬件,它们都可能运行缓慢。此时,可能是时候考虑专门为大数据和分析查询而构建的其他技术了。

查询大数据:数据仓库

包括:BigQuery, Redshift, Snowflake, Vertica

数据仓库非常适合对大量数据执行分析查询。像BigQuery、AWS Redshift、SnowflakeVertica这样的产品能够处理大数据,因为它们由大量并行引擎驱动,使得跨海量数据源的分析查询更易管理。这些数据仓库各自的工作方式略有不同,但当您想要运行查询时,它们会利用并行化来分割数据并聚合结果,然后再返回您的查询。这些数据仓库还依赖于列式存储(按列而不是按行存储数据)来加快分析操作,因为这使您的数据库无需扫描与当前查询无关的行内信息。

您根据执行查询时使用的资源付费,但将数据插入这些仓库也很昂贵。如果您的组织需要实时数据(或接近实时数据),像这样的数据仓库并不是最有效的,因为每当添加新数据时,它们都需要重新索引,这需要时间。

虽然 BigQuery、Redshift 和 Snowflake 都是纯云端的,但 Vertica(开源产品)可以在云端或本地运行。

实时分析数据库

包括:Druid

像 Druid 这样的开源产品数据库,对于那些需要立即查询数据生成情况的组织来说很有吸引力。有了实时数据库,您就可以在数据进入数据引擎后立即运行分析查询,无需额外的处理或漫长的等待时间。

如果您的业务模式依赖于利用实时数据的能力(例如,金融服务或信息安全),那么像 Druid 这样的数据库值得探索。但是,管理实时数据管道可能会变得复杂——从生成数据到通过管道中不同工具处理数据,可能出问题的环节很多。考虑到这些系统的复杂性,尤其是在处理大量数据时,有专门的人员来监督您的实时数据库会非常有帮助。

用于临时分析:基于文件的数据库

包括:SQLite, H2

SQLite 和 H2 类似于传统的 RDBMS,例如 MySQL 或 Postgres——这两种类型都是关系型数据库——但是基于文件的数据库在数据库端不包含服务器。这些类型不是任何用于优化数据库的代码,而是存在于您的计算机上的一个文件。如果您正在使用 Metabase,您会将 SQLite 数据库存储在与 Metabase 服务器相同的位置,以便 Metabase 可以将其用于分析。

基于文件的数据库非常适合嵌入式和即席分析——例如不需要大量实时数据的一次性查询。虽然 SQLite 是世界上部署最广泛的数据库(主要是因为它的简单性),但基于文件的数据库在复杂分析方面的使用受到限制,基于文件的数据库可能不是您想要存储实时数据的地方。

查询引擎

包括:SparkSQL, Presto

查询引擎本身不是数据库,而是位于数据和最终结果之间。SparkSQL 和 Presto 是两个开源引擎,可以从各种来源(包括实时数据)摄取和查询数据。

与上面讨论的云数据仓库一样,像 Spark 和 Presto 这样的引擎将大致按照以下步骤对大量数据执行分析查询:

  1. 首先将工作分成更小的任务。
  2. 并行化查询——即,在这些更小的任务上同时运行。
  3. 聚合这些结果。
  4. 最后,返回原始查询的结果。

基于文档的数据库

包括:MongoDB

虽然上述所有选项都包含某些关系元素,但像MongoDB这样的非结构化 NoSQL 数据库的工作方式有所不同。MongoDB 不是将数据存储在表中,而是将数据保存在“文档集合”中,并允许您查询这些通常是 JSON 文件的文档。这意味着您在集合中保存的文档可以是相同的,也可以完全不相关,但没有原生方法像关系型数据库中的表那样进行连接

与关系型数据库不同,MongoDB 易于分片。这意味着您可以将集合的不同部分存储在完全独立的节点中(数据库的物理实例,例如单独的服务器或计算机),这有助于扩展您的数据库。

这有帮助吗?

感谢您的反馈!
分析师每周技巧
获取可行的见解
关于 AI 和数据的资讯,直接发送到您的收件箱
© . This site is unofficial and not affiliated with Metabase, Inc.