首页 文章

最佳DynamoDB实现结构

提问于
浏览
0

我正在处理一个保存应用程序,基本上用户可以转到文章并单击“保存”将其存储在他的 Profiles 中 . 应用程序当前正在使用dynamodb,而不是使用关系数据库 . 每篇文章都有一个特定类型的文章 . 结构当前用于此应用程序的方式是:

user-id [string][DynamoDBHashKey]
type-of-article [string]  [DynamoDBRangeKey]
json [string]

user-id是用户的唯一标识符,type-of-article很好..文章的类型,json是以json格式保存的所有文章 . json格式为:

[{article-id: timestamp}, {article-id: timestamp}]
  Article #1 ^             Article #2 ^

article-id是(再次)文章唯一标识符,timestamp是存储该文章的时间戳 .

Note 这是在dynamodb开始支持json文档之前完成的,如Map和Lists . 代码不是我的..已经完成..

因此,当应用程序需要从已保存的It中删除一篇文章时,调用dynamo来获取json修改json,然后再次存储它 . 什么时候要添加新文章,它会做同样的事情 . 现在,当我想显示按时间戳排序的所有文章时出现问题 . 我不得不打电话来获取所有类型并将它们合并到字典中以对它们进行排序 . (在用户配置文件中,我需要显示所有已保存的文章,无论何种类型,已排序)现在,应用程序需要超过700或900毫秒才能响应 .

我个人认为这不是解决这个问题的最好方法 . 所以我正在考虑重写以前的代码来实现dynamodb(List和Maps)的新功能 . 现在我对dynamodb结构的想法是这样的:

user-id [string]  [DynamoDBHashKey]
saved-articles [List]
    article-type_1
        article_1 [Map] {id: article-id, timestamp: date}
        article_2 [Map] {id: article-id, timestamp: date}
    article-type_2
        article_1 [Map] {id: article-id, timestamp: date}

但是我对dynamodb相对较新,我制作了一些测试代码,使用列表和 Map 将其存储在发电机中 . 我使用低级api和对象持久性模型来完成它 .

现在,我的问题是:这是一个更好的方法还是不是为什么?什么是更好的方法 .

这样我认为我可以使用低级别的Api来获取文章类型#2的已保存文章 . 或者,如果我需要它们,我只需称呼它 .

1 回答

  • 1

    我会坚持使用类似NoSQL的解决方案 . 对于NoSQL数据库,如果您有嵌套数据模型和/或更新现有记录,那么这些通常是您的数据模型可以优化的指标 . 我真的看到你的应用程序使用的2个对象,'用户'和'文章' . 我会通过执行以下操作来避免嵌套数据模型并更新现有记录:

    'user' table

    • 用户ID为哈希键

    'article' table

    • article id作为哈希键

    • 时间戳作为范围键

    • 用户ID(用于下面描述的全局二级索引)

    • 文章类型和任何其他属性都是非关键属性

    你还可以在文章表上有一个全局二级索引,它允许你按用户ID搜索文章,这看起来像是某种东西(假设你想要按日期排序用户的文章):

    • 用户ID为哈希键

    • 时间戳作为范围键

    • article id作为投影属性

    使用此模型,您永远不需要返回并编辑现有记录,只需添加“已编辑”为新记录的记录,然后将具有最新时间戳的记录作为当前版本 .

    NoSQL要记住的一件事是存储空间便宜,读取便宜,但编辑现有记录通常是昂贵且不合需要的操作 .

相关问题