数据库类型

了解不同类型的数据库及其工作原理。

在构建数据堆栈时,有很多数据库和数据源选项需要考虑。 无论您是数据领域的新手还是只是需要复习一下,这里都会介绍 Metabase 支持的主要参与者。

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

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

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

如果您的组织时间或资源有限,或者缺乏构建 ETL 的数据专家,那么像 MySQL、Postgres、SQL Server 或 Oracle Database 这样的关系型数据库系统是一个很好的选择。 许多使用 Metabase 的组织只是通过连接其关系数据库来实现这一点,以便他们可以立即开始获得见解。 这些数据库非常适合用作软件的应用程序数据库。 Metabase 软件可以使用 Postgres 或 MySQL 作为其生产数据库

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

这四个系统都是事务性数据库,并非专门为分析查询而构建。 虽然您可以通过这四个引擎中的任何一个完成分析查询,但这可能需要大量的额外硬件(额外的 RAM、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 很容易分片。 这意味着您可以将集合的不同部分存储在完全独立的节点中(数据库的物理实例,如单独的服务器或计算机),这有助于扩展数据库。

下一步:数据仓库 vs 数据湖 vs 数据集市

您可能会经常听到这些术语,因此这里提供了一些关于数据仓库、数据湖和数据集市之间差异的背景信息。

下一篇文章