php - Redshift 作为替代或补充

标签 php postgresql amazon-web-services amazon-redshift

一位同事使用 PHP 框架构建了一个 Web 应用程序,我们可以在其中配置一些对其他系统的 API 调用。它们在夜间运行以将新数据拉入 Postgres 数据库。由于 Postgres 是一个 OLTP 数据库而不是为分析而设计的,所以我开始阅读有关 Redshift 的内容。但我只是想不通所有这些是如何组合在一起的。

哦,对于分析,我们会看看 PowerBI,它可以将 DirectQuery 与 Redshift 结合使用。但在我看来,Postgres 没有这样的东西。

所以对于我的问题,我会将所有内容分为四个部分:

  • 应用程序(登录、配置 api 调用的接口(interface))
  • 应用程序的用户数据(用户、api 调用的架构)
  • 数据(来自 API 的答案供以后分析)
  • 数据仓库(分析数据的存储)
Solution | Application | Userdata   | Data          |  Datawarehouse
-------- | ----------- | ---------- | ------------- |  ----------------
Now      |  PHP        |  Postgres  | Postgres      |  
1.       |  PHP        |  Postgres  | Postgres      |  Redshift
2.       |  PHP        |  Postgres  |               |  Redshift
3.       |  PHP        |  Redshift  |               |  Redshift 

所以问题是:哪种可能的解决方案是“正确”的?我可以使用我们拥有的基础架构并添加 Redshift。但后来我的存储成本翻了一番。我可以将应用程序数据存储在较小的数据库中,并将来自 API 的数据直接存储到 Redshift 中,或者将 Redshift 用作唯一的数据库。

最佳答案

这两个系统都有不同的后端基础设施,并且用于某些非常特定的目的。虽然在处理少量数据时它们可能可以互换使用,但在涉及大量读/写时会发生巨大变化。

这里我假设当你说你正在使用 Postgres 时,你的大概是行方向。

对于写入批量数据,行数据库是首选,因为它是写入密集型的,而如果您的操作涉及查询多行(分析目的的典型要求),则使用列数据库。最好的组合始终是将事务数据存储在面向行的数据库上,将分析目的所需的一些表迁移到列式数据库并在那里运行分析查询。这听起来可能很荒谬且代价高昂,但如果某些公司不想妥协交易数据或分析数据,这正是他们执行的方式。

如果您的公司是一家涉及繁重(财务)交易的基于产品的公司,并且您还捕获了 user_persona,请将它们分别拆分为面向行和列的架构。

A row DB is write intensive. When application makes bulk transactional write statements, it has to be written on tables without any lag. I'm sure, you'll have multiple master_slave configuration as well, thus the data has to be replicated to slaves as well and that too, at the real time.

现在必须了解分析数据与交易数据有很大不同。交易数据并不庞大——假设它将在订单表中创建一行,并将 user_id 映射到每个下订单的一些基本 order_details;但分析数据——每次用户登陆应用程序时都会生成屏幕上的点击模式、发送的通知的详细信息等;体积庞大,不能像我们存储交易数据那样存储。

A columnar orientation (as in Amazon RS) is read intensive - a typical requirement for analytical data since a large number of rows will be retrieved for a given user_set - details of all the notifications sent, or all the screens browsed / clicked by the user. A columnar DB is tailor made to suit such requirements.

列式数据库中的批量写入很慢;但由于它现在主要处理分析数据 - 没有实时数据并不重要。分析需要时间和数据,直到 current_date-1 或延迟 n 小时,始终可以引用以绘制用户角色。

对于拥有大量数据集的大公司,需要权衡取舍。我希望您现在可能对如何着手有了一个模糊的想法。

关于php - Redshift 作为替代或补充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42411509/

相关文章:

SQL order and limit then order the limited 结果

mysql - 如果我们通过同一字段的不同值进行搜索,可以在 SQL 查询中将 OR 替换为更短的条件吗

amazon-web-services - 在 Cloudformation 中将 Cloudfront "Cache Based on Selected Request Headers"设置为 All

EC2 上安装的浏览器无法访问 Tomcat6

amazon-web-services - 如果我已经有一个指向同一位置的公共(public) ELB,我是否还需要内部 ELB?

php - 当选项已被选择时显示 div

php - SQL IS NOT NULL 作为 CASE 语句中的值

php - 将日期导入 MySQL

php - 将 float 转换为 HH :MM format

postgresql - 在 Postgresql 中将儒略日期转换为日历日期