Postgresql 为什么要在一些RDBMS(如Postgres)上镶木地板

Postgresql 为什么要在一些RDBMS(如Postgres)上镶木地板,postgresql,apache-spark,parquet,Postgresql,Apache Spark,Parquet,我正在为我的公司构建一个数据架构。一个包含内部和外部数据的简单ETL,旨在构建静态仪表板和其他用于搜索趋势的工具 我试着一个接一个地思考ETL过程的每一步,现在我在质疑加载部分 我计划使用Spark(开发者上的LocalExcecutor和Azure上的一项生产服务),所以我开始考虑将Parquet应用到Blob服务中。我知道拼花地板相对于CSV或其他存储格式的所有优势,我真的很喜欢这项技术。我读到的大多数文章都是关于使用df.write.parquet(…)进行Spark finish的 但是

我正在为我的公司构建一个数据架构。一个包含内部和外部数据的简单ETL,旨在构建静态仪表板和其他用于搜索趋势的工具

我试着一个接一个地思考ETL过程的每一步,现在我在质疑加载部分

我计划使用Spark(开发者上的LocalExcecutor和Azure上的一项生产服务),所以我开始考虑将Parquet应用到Blob服务中。我知道拼花地板相对于CSV或其他存储格式的所有优势,我真的很喜欢这项技术。我读到的大多数文章都是关于使用
df.write.parquet(…)
进行Spark finish的

但是我不明白为什么我可以开始一个Postgres然后把所有的东西都保存在这里。我知道我们每天的数据量不是100次,但我想在一家快速发展的公司里建立一些经得起未来考验的东西,通过业务、日志和指标,我们开始记录越来越多的数据

更有经验的开发人员有什么优点/缺点吗


编辑:这条推文也让我质疑:

主要的权衡是成本和事务语义

使用DBMS意味着您可以事务性地加载数据。您还可以持续支付这两项费用。在托管DBMS中,相同数量的数据的存储成本将比在托管DBMS中更高

在DBMS上扩展处理也比较困难(Azure提供的最大规模的Postgres服务器似乎有64个VCPU)。通过将数据存储到RDBMs中,您可能会比使用Spark+blob存储更快地遇到IO或计算瓶颈。然而,对于许多数据集来说,这可能不是一个问题,正如tweet所指出的那样,如果您可以使用SQL在数据库中完成所有工作,那么它将是一个更简单的体系结构


如果您将拼花文件存储在blob存储上,那么在不重新生成大量数据的情况下更新现有数据是很困难的(我不知道Azure的详细信息,但通常不能以事务方式完成)。计算成本与存储成本是分开的

使用原始文件格式在Hadoop中存储数据效率极低。Parquet是一种行-列文件格式,非常适合快速查询大量数据。如上所述,从Spark向Parquet写入数据非常简单。另外,使用分布式处理引擎(Spark)将数据写入分布式文件系统(Parquet+HDFS)可以使整个流程无缝。这种体系结构非常适合OLAP类型的数据

另一方面,Postgres是一个关系数据库。虽然它有利于存储和分析事务性数据,但它不能像HDFS那样轻松地进行水平扩展。因此,当从Spark向Postgres写入/查询大量数据时,数据库可能成为瓶颈。但是如果你正在处理的数据是OLTP类型,那么你可以考虑这个架构。
希望这能有所帮助

我不太了解PostgreSQL,所以我不知道该怎么做,但我可以为拼花地板做准备。Pro-节省空间,对于高度并行化的输出更有效。Con-无法处理加载到列中的不同数据类型。@afeldman:DBMS称为PostgreSQL,或简单地称为PostgresHanks,以获取此答案。我想我会选择RDBM和我们目前拥有的体积,然后在以后准备拼花+水滴的架构。我现在将在文档中写下这一点。问题更多的是,在性能和成本方面,什么更适合“小”大数据。现在,建立Hadoop集群对我们来说太大了,但我们可能也会在一年内完成。我不想在一年内从头开始重做所有堆栈,但更改存储是可以管理的。现在我们需要ETL过程,我们需要批处理过程以有效的方式分析数据。根据我的阅读,存储为拼花地板是必须的(不一定在Hadoop上,Blob存储在这里就足够了),但我认为,我们现在不需要它。我不确定。