Redshift 作为替换或添加
Posted
技术标签:
【中文标题】Redshift 作为替换或添加【英文标题】:Redshift as replacement or addition 【发布时间】:2017-02-23 09:20:37 【问题描述】:一位同事使用 php 框架构建了一个 Web 应用程序,我们可以在其中配置一些对其他系统的 API 调用。它们在夜间运行,以将新数据拉入 Postgres 数据库。由于 Postgres 是一个 OLTP 数据库,而不是用于分析,我开始阅读有关 Redshift 的信息。但我就是想不通这一切是如何结合在一起的。
哦,对于分析,我们会看看 PowerBI,它可以将 DirectQuery 与 Redshift 结合使用。但在我看来,Postgres 没有这样的东西。
所以对于我的问题,我将把所有内容分成四个部分:
应用程序(登录、配置 api 调用的接口) 应用的用户数据(用户、api 调用的架构) 数据(来自 api 的答案供以后分析) 数据仓库(用于分析数据的存储) 解决方案 |应用 |用户数据 |数据 |数据仓库 -------- | ------------ | ---------- | ------------- | ---------------- 现在 | PHP | Postgres | Postgres | 1. | PHP | Postgres | Postgres |红移 2. | PHP | Postgres | |红移 3. | PHP |红移 | |红移所以问题是:“正确”的解决方案是什么?我可以使用我们拥有的基础架构并添加 Redshift。但后来我将存储成本增加了一倍。我可以将应用程序数据存储在一个较小的数据库中,并将来自 API 的数据直接存储到 Redshift,或者使用 Redshift 作为唯一的数据库。
【问题讨论】:
但是你的问题是什么?你如何定义“正确”的?正确的依据是什么? 【参考方案1】:这两个系统都有不同的后端基础设施,并用于一些非常特定的目的。虽然它们在处理少量数据时可以互换使用,但在涉及批量读取/写入时会发生巨大变化。
这里我假设当你说你正在使用 Postgres 时,你的大概是 Row 方向。
对于写入批量数据,首选行 DB,因为它是写入密集型的,如果您的操作涉及查询多行(分析目的的典型要求),则使用列 DB。最佳组合始终将事务数据存储在面向行的数据库上,将分析所需的一些表迁移到列式数据库并在那里运行分析查询。这可能听起来很荒谬且代价高昂,但如果某些公司不想与交易数据或分析数据妥协,这就是他们的执行方式。
如果您的公司是一家涉及大量(金融)交易的基于产品的公司,并且您也捕获了 user_persona,请将它们分别拆分为面向行和列的架构。
行数据库是写密集型的。当应用程序进行批量事务时 写语句,它必须写在没有任何滞后的表上。我是 当然,你也会有多个 master_slave 配置,因此 数据也必须复制到从属设备,而且在 实时。
现在必须明白,分析数据与交易数据有很大不同。交易数据并不庞大——假设它会在订单表中创建一行,并将为每个下达的订单映射user_id
和一些基本的order_details
;但分析数据——屏幕上的点击模式、发送通知的详细信息等会在用户每次登陆应用时生成;体积庞大,无法像我们存储交易数据那样存储。
柱状方向(如在 Amazon RS 中)是读取密集型的 - 分析的典型要求 数据,因为将检索给定的大量行 user_set - 发送的所有通知或所有屏幕的详细信息 用户浏览/点击。柱状 DB 是量身定制的 这样的要求。
柱状数据库中的批量写入很慢;但由于它现在主要处理分析数据 - 没有实时数据并不重要。分析需要时间和数据直到 current_date-1
或延迟 n
小时,始终可以参考绘制用户角色。
对于拥有大量数据集的大公司,需要进行权衡。我希望你现在可能对如何去做有一个模糊的想法。
【讨论】:
【参考方案2】:您的问题不是很清楚您打算如何使用数据库,但最好的建议是尝试对所有内容都使用“普通”数据库(在您的情况下为 PostgreSQL)。
如果您发现您的分析耗时过长并且数据库中有数百万或数十亿行,那么您可以考虑使用 Amazon Redshift 来加快分析速度查询。如果您的查询是只读的,您还可以考虑使用Amazon Athena,它可以直接从存储在 Amazon S3 中的文件中读取数据。
【讨论】:
【参考方案3】:Postgres 数据库在这种情况下的用途是什么?
我建议将 API 调用的输出直接写入 S3,然后从那里将它们加载到 Redshift。
如果这些 API 响应采用 JSON 格式(可能),您可能需要将它们扁平化为 CSV 以加载到 Redshift。 Redshift 的 JSON 加载非常有限。
【讨论】:
以上是关于Redshift 作为替换或添加的主要内容,如果未能解决你的问题,请参考以下文章
HIVE 或 PIG 作为 Amazon Redshift 的替代品?
AWS Glue to Redshift:是否可以替换,更新或删除数据?
AWS Glue to Redshift:是不是可以替换、更新或删除数据?
如何在 Python 中 Redshift 的卸载命令中添加列标题?