假设我是一个订阅服务,并且我有一个表格,每一行代表客户数据。
我想构建一个使用每日客户数据快照的系统。每日快照包含当前所有现有客户的数据(即,将有新客户的行,而未订阅的客户将不会出现在此数据中)。我还需要使用开始时间和结束时间来跟踪每个客户订阅的持续时间。如果客户重新订阅,则该开始和停止时间的另一个条目将更新为该客户。示例记录/模式如下所示。
{
"CustomerId": "12345",
"CustomerName": "Bob",
"MagazineName": "DatabaseBoys",
"Gender": "Male",
"Address": "{streetName: \"Sesame Street\", ...}",
"SubscriptionTimeRanges": [{start:12345678, end: 23456789}, {start:34567890, end: 45678901},...]
}
CustomerId
或MagazineName
来获取记录SubscriptionTimeRanges
数组/ JSON blob 我知道DynamoDB会很快处理这种用例,并且记录模式正好位于NoSQL小巷。我可以使用全局二级索引/本地二级索引来解决一些问题。我在使用Redshift时在PostgreSQL上有一些经验,但是我主要处理批量插入而无需修改数据。现在我需要数据修改方面。我认为RDS Postgres会很好,但是很想听听您的想法或意见。
P.S。不要太在意“订阅”系统的设计,这是我为类似要求设置示例时可以想到的最佳并行示例。:)
答案 0 :(得分:1)
这是一个主观的问题,但从客观上讲,DynamoDB不是为扫描而设计的。它可以做到,但需要循环执行重复的请求,从最后一个中断的地方开始每个请求。对于大型数据集来说,这不是很快的事情,因此也有parallel scan,但您必须弄乱线程,并因此消耗大量表吞吐量。
另一方面,使用SDK对DynamoDB进行原型设计和测试很容易且便宜。
但是由于每天需要扫描数据以及潜在的联接需求,因此我强烈倾向于使用关系数据库。
答案 1 :(得分:0)
每天处理25万行数据可能不足以使用 Amazon Redshift 。它具有数百万到数十亿行的最佳选择,通常在您要全天进行查询时使用。
如果 RDS数据库满足您的需求,那就去吧!如果您希望节省成本,则可以全天在Amazon S3中累积记录,然后每天只加载和处理一次数据,并在不需要时关闭数据库。 (或者甚至终止它并在第二天启动一个新的,因为似乎您不需要访问历史数据。)
Amazon Athena 甚至可以满足您的需求,从S3读取每日数据,甚至不需要持久数据库。