我们有一个带有 MySQL DB(在 AWS RDS 上)的 Ruby on Rails 应用程序。我们的一些表有大约 1 亿条记录,而且这个数字每个月都在迅速增加。这些表中的大多数记录都处于非活动状态,并且仅在用户可以访问的某些报表中偶尔访问。
我们现在面临几个问题:
- 即使使用索引优化,这些表的查询时间也显着增加
- 由于表很大,在紧急情况下从备份恢复需要很长时间
我们的要求是:
- 数据需要无限期地保存在某个地方
- (快速)读取数据
- 自创建记录以来经过一段时间后无需进一步的写访问
- 低成本
因此,我们计划执行以下操作:
- 在一条记录“不活动”之后(这主要取决于自创建以来经过的一段时间),我们将在 DynamoDB 中创建一条记录,以镜像我们 sql db 中的数据。
- 几天后,我们从 mysql db 中删除 sql 记录
- 然后仍然可以通过 dynamodb 读取记录
我们的问题是这种方法是否是传统的,是否有更好的方法来实现我们想要的。任何输入将不胜感激。
DynamoDB 非常适合这一点。将表类设置为“标准 - 不频繁访问”,因为您计划拥有大量与读取/写入相关的数据。您将获得非常快速的读取访问(以毫秒为单位检索),使用按需模式,您甚至无需支付费用,除非您进行检索,并且您可以设置它并忘记它。
DynamoDB 是最好的吗?这取决于您尚未量化的细节。如果“快速”读取您的意思是一两秒钟,那么您有更多选择。“低成本”是否意味着您宁愿运行自己的服务器来节省几块钱?再说一次,你有更多的选择。
标准 IA 价格为 10c/GB,如果每个项目约为 1KB,那么您将看到 100,000,000 * 1KB = 100 GB = 10 美元/月的存储空间。
如果您以每秒 10 次检索的速度读取,则读取费用为 10 RCU * $0.00013/RCU-hr = $0.94/月。
初始加载后没有写入成本(如果每个项目为 1 KB,则使用预置模式的 1 亿个项目约为 18 美元)。