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

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

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

包括: Microsoft SQL Server, MySQL, Oracle Database, PostgreSQL
所有这四个关系数据库管理系统(RDBMS)已经存在了几十年,并且可以很好地处理全方位的数据库需求 - 插入记录,读取,更新,删除记录。在这四个中,MySQL和PostgreSQL是开源的。
如果您的组织时间或资源不足,并且手头没有任何数据专家可以构建断续器,像我的命令行管理、Postgres、SQL Server 或甲骨文数据库是一个很好的选择。许多使用Metabase的组织只需连接其关系数据库即可做到这一点,这样他们就可以立即开始获得见解。这些数据库非常适合用作您的应用程序数据库,比如选择Postgres for your元数据库应用程序数据库.
传统的关系数据库可以处理数十万条记录的分析查询,几乎没有问题,但是如果您的组织需要大幅扩展(想想数百万条或更多),那么您的RDBMS可能会达到上限。这在很大程度上取决于数据仓库的配置方式,以及是否使用 ETL 进程来聚合数据,以便数据库必须读取更少的行。
这四个系统是事务数据库,并且不是专门为分析查询而构建的。虽然您可以通过这四个引擎中的任何一个完成分析查询,但它可能需要大量额外的硬件(额外的RAM,CPU和更快的磁盘)来跟上数据量的增长,并且很快就会变得非常昂贵。随着规模的扩大和分析查询变得越来越复杂,无论您在问题上投入了多少硬件,它们都可能会运行缓慢。在这一点上,可能是时候考虑另一种专门为大数据和分析查询构建的技术了。

查询大数据:数据仓库

包括:BigQuery, Redshift, Snowflake, Vertica
数据仓库能够对大量数据执行分析查询。产品如大查询, AWS Redshift,雪花眩晕能够处理大数据,因为它们由大量并行引擎提供支持,使跨海量数据源的分析查询更易于管理。这些数据仓库各自的工作方式略有不同,但当你想要运行查询时,它们将利用并行化来拆分数据并在返回查询之前聚合结果。这些数据仓库还依赖于列式存储(按列而不是按行存储数据)来加快分析操作,因为这样数据库就不必扫描行中与当前查询无关的信息。
您需要根据执行查询时使用的资源付费,但将数据插入这些仓库也会变得昂贵。如果您的组织需要实时数据(或接近实时数据),则像这样的数据仓库不是最有效的,因为每当添加新数据时,它们都需要重新编制索引,这需要时间。
虽然BigQuery,Redshift和Snowflake完全基于云计算,但Vertica(开源)可以在云中或本地运行。

实时分析数据库

包括: Druid
像开源产品Druid这样的数据库吸引了那些需要在生成数据后立即查询数据的组织。借助实时数据库,您可以在数据进入数据引擎后立即运行分析查询,而无需额外的处理或漫长的等待时间。
如果您的商业模式依赖于利用实时数据(例如,金融服务或信息安全)的能力,那么像Druid这样的数据库值得探索。但是,管理实时数据的管道可能会变得复杂 - 在生成数据的任何内容和通过管道中的不同工具处理数据之间可能会出现很多问题。鉴于这些系统的复杂性,特别是当您处理大量数据时,让人员随时监督您的实时数据库将是一个很大的帮助。

对于即席分析:基于文件的数据库

包括: SQLite, H2
SQLite和H2类似于MySQL或Postgres等传统RDBMS-两种类型都是关系数据库-但基于文件的数据库在数据库端不包含服务器。这些类型不是用于优化数据库的任何代码,而是位于计算机上的文件。如果您使用的是元数据库,则将 SQLite 数据库存储在与元数据库服务器相同的位置,以便元数据库可以利用它进行分析。
基于文件的数据库非常适合嵌入和即席分析,例如不需要大量或实时数据的一次性查询。虽然 SQLite 是世界上部署最广泛的数据库(主要是因为它的简单性),但使用基于文件的数据库进行复杂分析是有限的,并且基于文件的数据库可能不是您想要保留实时数据的地方。

查询引擎

包括:SparkSQL,Presto
像SparkSQL和Presto这样的查询引擎,都是开源产品,它们本身并不是数据库,而是位于数据和最终结果之间。这些引擎可以从各种源(包括实时数据)引入和查询数据。
与上面讨论的云数据仓库一样,Spark和Presto等引擎将大致按照以下步骤对大量数据执行分析查询:

  1. 首先将工作划分为较小的作业。
  2. 并行化查询,即在这些较小的作业中同时运行查询。
  3. 聚合这些结果。
  4. 最后,传递原始查询的结果。

    基于文档的数据库

    包括: MongoDB
    虽然上述所有选项都包含一些关系元素,但非结构化的NoSQL数据库,如MongoDB工作方式不同。MongoDB不是将数据存储在表中,而是将数据保存在文档的”集合”中,并允许您查询这些文档,这些文档通常是JSON文件。这意味着您保存在集合中的文档可以相同或完全不相关,但没有本机方法可以加入它们就像在关系数据库中使用表一样。
    与关系数据库不同,MongoDB很容易分片。这意味着您可以将集合的不同部分存储在完全独立的节点(数据库的物理实例,如单独的服务器或计算机)中,这有助于扩展数据库。

    谷歌分析呢?

    元数据库支持谷歌分析,但它不是上面列出的选项中的数据库或数据仓库。相反,Google Analytics是一个数据源 - 关于网络流量和活动的数据 - Metabase点击Google Analytics API以连接和同步该数据。如果您使用Google Analytics来收集SEO统计信息和网站活动,将其连接到Metabase可以帮助您更深入地了解该信息。