amazon-web-services - nosql/dynamodb 哈希和范围用例

标签 amazon-web-services nosql amazon-dynamodb

这是我第一次使用 NoSQL 数据库,所以我真的很困惑。我真的很感激我能得到的任何帮助。

我想在我的表中存储包含公告的数据。本质上,每个公告都有一个 ID、一个日期和一个文本。

例如,公告的 ID 可能为 1,日期为 2014/02/26,文本为“这是一个示例公告”。较新的公告总是比旧的公告具有更大的 ID 值,因为它们是稍后添加到表中的。

我想在这个表上运行两种类型的查询:

  • 我想检索按日期排序的公告文本。
  • 我想检索最近发布的 x 条公告的文本和日期(比如最近发布的 3 条公告)。

  • 所以我设置了具有以下属性的表:
    ID(数字)作为主键,以及
    日期(字符串)作为范围

    这适合我的用例吗?如果是这样,我应该运行什么样的查询/读取/请求/扫描/什么(我也对这里的术语感到困惑)来完成我想做的两种类型的查询?

    任何帮助将不胜感激。谢谢!

    最佳答案

    你走在正确的轨道上。

    至于排序,DynamoDB 将按范围键排序,因此日期可以工作,但我建议将其存储为数字,可能是自 Unix 纪元以来的毫秒数,而不是字符串。这将使根据创建日期按升序或降序获取公告变得微不足道。

    有关本地与全局二级索引及其提供的功能的概述,请参阅此答案:Optional secondary indexes in DynamoDB

    就检索所有项目而言,您需要执行扫描。扫描不如查询有效,但由于所有 Dynamo 都在 SSD 上,因此它们仍然相对较快。通过查询获得的扫描无法获得单位数毫秒的性能,因此如果有一种方法可以将公告与用户 ID 相关联,那么您可能会获得比扫描更好的性能。

    请注意,您不能在创建表后修改表架构(散列键、范围键和索引)。有多种方法可以手动迁移表或导入/导出它,但重点是您应该预先仔细考虑当前和 future 的查询需求,并设计表以支持它们。但是,添加或停止存储非键或非项目属性非常容易,这提供了很好的灵活性。

    最后,尽量避免将 Dynamo 视为关系型。使用 Dynamo,在很多情况下,您最好对某些数据进行反规范化或复制,以换取快速查询性能。

    关于amazon-web-services - nosql/dynamodb 哈希和范围用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056638/

    相关文章:

    amazon-web-services - 如何从 EC2 服务创建/访问不同 AWS 账户中的多个 Dynamo DB 表?

    mongodb - 1 :1 and group chat schema in NoSQL/MongoDB

    sql - 像SQL一样设计Redis数据库表?

    amazon-dynamodb - 您可以使用 dynamodb 流来拥有像 firebase 这样的实时触发器吗?

    ruby-on-rails - 我们如何设计 Dynamo 数据库以保持两个实体的关系

    java - 从正在运行的实例中获取弹性 IP

    php - 将本地存储的文件移动到 amazon S3

    amazon-web-services - 使用单个构建规范文件在 CodeBuild 中运行批量构建

    mongodb - CAP 背景下的 Mongo 和 Cassandra?

    java - 强制删除使用带版本号的乐观锁的表