数据库类型
了解不同类型的数据库及其工作原理。
在构建您的数据栈时,有许多数据库和数据源选项需要考虑。无论您是数据领域的新手,还是只是需要复习一下,这里都列出了 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、Snowflake 和 Vertica 这样的产品能够处理大数据,因为它们由大量并行引擎驱动,使得对海量数据源的分析查询更易于管理。这些数据仓库的工作方式略有不同,但当您想要运行查询时,它们会利用这种并行化来拆分数据并聚合结果,然后再返回您的查询。这些数据仓库还依赖于列式存储(按列而非按行存储数据)来加速分析操作,因为这使您的数据库无需扫描行内与当前查询无关的信息。
您将根据执行查询时使用的资源付费,但将数据插入这些仓库的成本也很高。如果您的组织需要实时数据(或接近实时),像这样的数据仓库并不是最有效的,因为每次添加新数据时它们都需要重新索引,这会花费时间。
虽然 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 等引擎将大致按照以下步骤对海量数据执行分析查询
- 首先将工作划分为更小的任务。
- 并行化查询——即同时在这些较小的任务上运行。
- 聚合这些结果。
- 最后,交付原始查询的结果。
文档型数据库
包括:MongoDB
尽管上述所有选项都包含一些关系型元素,但像 MongoDB 这样的非结构化 NoSQL 数据库的工作方式有所不同。MongoDB 不会将数据存储在表中,而是将数据保存在文档“集合”中,并允许您查询这些文档,这些文档通常是 JSON 文件。这意味着您在集合中保存的文档可以是相同或完全不相关的,但没有像关系型数据库中那样进行连接的本机方法。
与关系型数据库不同,MongoDB 易于分片。这意味着您可以将集合的不同部分存储在完全独立的节点(您的数据库的物理实例,例如独立的服务器或计算机)中,这有助于扩展您的数据库。
下一篇:数据仓库 vs 数据湖 vs 数据集市
您可能会经常听到这些术语,所以这里提供了关于数据仓库、数据湖和数据集市之间区别的一些背景信息。