使用S3作为数据库还是数据库(例如)

时间:2019-05-13 08:09:36

标签: mongodb amazon-web-services amazon-s3

由于设置简单且成本低廉,我正在考虑使用AWS S3存储桶而非NoSQL数据库将简单的用户设置保存为JSON(约30个文档)。

我研究了以下不使用数据库的缺点,这些缺点与我的用例无关:

  • 列出存储桶/文件将花费您的钱。
  • 没有更新-您无法更新文件,只能替换它。
  • 没有索引。
  • 版本更改将使您花费$$。
  • 没有搜索
  • 没有交易
  • 没有查询API(SQL或NoSQL)

使用S3存储桶代替数据库还有其他缺点吗?

2 个答案:

答案 0 :(得分:4)

您“正在考虑使用AWS S3存储桶而不是NoSQL数据库”,但事实是Amazon S3实际上是 一个NoSQL数据库。

这是一个非常大的键值存储。密钥是文件名,值是文件的内容。

如果您的需求仅仅是“使用此键存储值”和“使用此键检索值”,那么它将很好用!

实际上,由于Amazon.com上的旧订单(已有一年多的历史)是只读的(无退货,无变化),因此显然已存档到Amazon S3。

虽然比DynamoDB慢,但Amazon S3的存储成本肯定要低得多!

答案 1 :(得分:3)

上下文:我们将S3用于某些“数据库”( lit。键/值结构化存储)。

应该注意的是,S3实际上确实具有搜索功能,并且根据您如何构造数据而以S3 Select的形式进行查询(如果有时间的话,还可以是Athena)。

但是,最大的缺点/体系结构挑战是S3最终是一致的(这实际上是您无法“更新”文件的原因)。这体现在您的体系结构需要容忍的某些行为中:

  • 操作是通过键缓存的,因此,如果您尝试获取一个不存在的对象,然后创建它-在一段时间内*对该对象的任何获取将返回该对象不存在。
  • 没有全局缓存,因此您可以在一段时间内*覆盖同一对象的两个不同版本。
  • 列表操作提供了一个半不稳定的迭代器。如果您要对要更新的存储桶中的大量对象进行 list ,则很可能您不会在迭代器末尾访问所有对象。
AWS故意未定义

* 时间段,但是从观察来看,时间段很少超过一分钟。