数据库类型
了解不同类型的数据库及其工作原理。
在构建您的数据栈时,有许多数据库和数据源可供选择。这里为您梳理了 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、Snowflake和Vertica这样的产品能够处理大数据,因为它们由海量并行引擎驱动,使得跨海量数据源的分析查询更加易于管理。这些数据仓库的运作方式略有不同,但当您想运行查询时,它们会利用并行化将数据分割并聚合结果,然后再返回您的查询。这些数据仓库还依赖于列式存储(按列而不是按行存储数据)来加速分析操作,因为这可以避免数据库扫描与当前查询无关的行内信息。
您需要为执行查询时使用的资源付费,但将数据插入这些仓库也很昂贵。如果您的组织需要实时数据(或接近实时),那么像这样的数据仓库不是最有效的,因为它们在添加新数据时需要重新索引,这需要时间。
虽然 BigQuery、Redshift 和 Snowflake 仅限云端使用,但 Vertica——它是开源的——可以在云端或本地运行。
实时分析数据库
包括:Druid
像 Druid 这样的数据库(一个开源产品)吸引那些需要即时查询数据的组织。使用实时数据库,您可以在数据进入数据引擎后立即运行分析查询,无需额外的处理或长时间的等待。
如果您的业务模式依赖于利用实时数据的能力(例如,金融服务或信息安全),那么像 Druid 这样的数据库值得探索。但是,管理实时数据管道可能会很复杂——在生成数据的源头与数据通过管道中各种工具的处理过程之间,有很多环节可能出现问题。考虑到这些系统的复杂性,尤其是在处理大量数据时,有人员负责监督您的实时数据库将大有帮助。
用于临时分析:基于文件的数据库
包括:SQLite, H2
SQLite 和 H2 与 MySQL 或 Postgres 等传统 RDBMS 类似——这两种类型都是关系型数据库——但基于文件的数据库在数据库端没有服务器。这些类型不是用于优化数据库的代码,而是一个存在于您计算机上的文件。如果您使用 Metabase,您会将 SQLite 数据库存储在 Metabase 服务器的同一个位置,以便 Metabase 可以利用它进行分析。
基于文件的数据库非常适合嵌入式应用和临时分析——例如不需要大量实时数据的单次查询。虽然 SQLite 是全球部署最广泛的数据库(很大程度上归功于其简洁性),但基于文件的数据库在复杂分析方面的使用是有限的,并且基于文件的数据库可能不是您希望保留实时数据的地方。
查询引擎
包括:SparkSQL, Presto
查询引擎本身并不是数据库,而是位于您的数据和最终结果之间。SparkSQL 和 Presto 是两个开源引擎,可以从多种来源(包括实时数据)摄取和查询数据。
与上面讨论的云数据仓库类似,Spark 和 Presto 等引擎大致按照以下步骤执行大数据分析查询
- 首先将工作分成较小的作业。
- 并行化查询——即,在这些较小的作业中同时运行它。
- 聚合这些结果。
- 最后,交付您原始查询的结果。
文档数据库
包括:MongoDB
虽然以上所有选项都包含某种关系元素,但像MongoDB这样的非结构化 NoSQL 数据库的工作方式不同。MongoDB 不以表的形式存储数据,而是将数据保存在“文档”的“集合”中,并允许您查询这些文档,而这些文档通常是 JSON 文件。这意味着您保存在集合中的文档可以是相同或完全不相关的,但没有原生方法可以像关系数据库中的表那样连接它们。
与关系型数据库不同,MongoDB 很容易分片。这意味着您可以将集合的不同部分存储在完全独立的节点(数据库的物理实例,如独立的服务器或计算机)中,这有助于扩展数据库。