数据库类型

了解不同类型的数据库及其工作方式。

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

全能型工作马:传统的关系数据库管理系统

包括:Microsoft SQL Server、MySQL、Oracle数据库、PostgreSQL

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

如果您的组织时间或资源短缺,或者缺乏任何数据专家来构建ETL,则MySQL、Postgres、SQL Server或Oracle数据库这样的关系数据库系统是一个不错的选择。许多使用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类似于MySQL或Postgres这样的传统关系型数据库管理系统——这两种类型都是关系型数据库——但基于文件的数据库在数据库方面不包含服务器。这些类型不是任何用于优化数据库的代码,而是存储在你电脑上的文件。如果你使用Metabase,你将在与Metabase服务器相同的地方存储SQLite数据库,这样Metabase就可以用来分析。

基于文件的数据库非常适合嵌入式和即兴分析——比如一次性查询,不需要大量的实时数据。虽然SQLite是世界上部署最广泛的数据库(很大程度上是因为其简单性),但对于复杂分析使用基于文件的数据库有限,并且基于文件的数据库可能不是你存放实时数据的地方。

查询引擎

包括: SparkSQL, Presto

查询引擎本身不是数据库,而是在你的数据和最终结果之间。SparkSQL和Presto是两个可以查询来自各种来源数据的开源引擎,包括实时数据。

与上面讨论的云数据仓库类似,Spark和Presto将按照以下步骤在大数据量上执行分析查询

  1. 首先将工作分解成更小的任务。
  2. 并行化查询——即在那些更小的任务上同时运行。
  3. 汇总这些结果。
  4. 最后,交付原始查询的结果。

基于文档的数据库

包括: MongoDB

尽管上述所有选项都包含一些关系元素,但像MongoDB这样的非结构化NoSQL数据库工作方式不同。MongoDB不是在表中存储数据,而是在文档“集合”中保存数据,并允许您查询这些文档,这些文档通常是JSON文件。这意味着您在集合中保存的文档可以是相同的或完全不相关的,但与关系数据库中的表相比,没有内置的方式来进行连接

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

下一节:数据仓库与数据湖与数据集市

您可能会听到这些术语被频繁使用,因此这里将提供关于数据仓库、数据湖和数据集市之间区别的背景信息。

下一篇文章