【问题标题】:How to Add a Column in DynamoDB如何在 DynamoDB 中添加列
【发布时间】:2014-10-25 16:48:16
【问题描述】:

有没有办法在亚马逊 AWS 的 DynamoDB 中的现有表中添加新列?

谷歌没有帮助,

http://docs.aws.amazon.com/cli/latest/reference/dynamodb/update-table.html?highlight=update%20table 中的 UpdateTable 查询没有任何与添加新列相关的信息。

【问题讨论】:

    标签: amazon-web-services nosql amazon-dynamodb


    【解决方案1】:

    DynamoDB 不需要架构定义,因此不存在“列”之类的东西。您可以添加一个具有新属性的新项目。

    【讨论】:

    • 所以,用户可以上传他们的“个人资料信息”和一个额外的字段,而 dynamo 会即时接受吗?还是我必须以管理员身份进入并添加它?
    • @Costa 只要您的代码在其 PutItem 调用中包含新属性,DynamoDB 就会接受它。没有其他记录具有该属性并不重要。
    • 如何从所有文档中删除一个属性?
    • 不是在单个操作中,我相信您需要为每个操作迭代并调用 UpdateItem
    • @HrushikeshDhumal 您可能看不到 UI 中的新字段,因为您没有查询它。 Dynamodb 将在项目中存储具有新属性的数据 - 除了哈希键(和排序键,如果存在)之外,不需要定义属性。
    【解决方案2】:

    好吧,让我们不要在关于“字段”和“列”之间区别的语义讨论中拖拖拉拉。 “列”这个词确实让我们想起了关系数据库,而 dynamodb 不是。本质上,这意味着 dynamodb 没有外键

    Dynamodb 确实有“主分区键”和“索引分区键”,就像关系数据库一样。

    添加数据时确实需要尊重这些键。但除了这些要求之外,您不必预定义字段(前面​​提到的那些分区键除外)。

    假设您是新手,一些额外的良好做法:

    • 为每条记录添加一个数字字段,以以秒为单位存储创建时间。 Dynamodb 具有可选的清理功能,需要在您的数据中使用此类字段。
    • 您不能在 dynamodb 中使用日期,因此您必须将其存储为数字字段或字符串。鉴于前面提到的注释,您可能更喜欢它们的数字类型。
    • 不要在其中存储大文档,因为最大提取大小为 16MB,最大记录大小为 400KB。幸运的是,AWS 也有一个 DocumentDB。

    【讨论】:

    • 有任何链接可以阅读更多关于以秒为单位存储创建时间的信息吗?谢谢。
    • @JuanitoFatas docs.aws.amazon.com/amazondynamodb/latest/developerguide/… ;例如,在 javascript 中,您可以使用 const ttl = Math.floor((new Date().getTime()) / 1000)
    • @JuanitoFatas 怎么样Date.now()
    • 根据文档,它应该在几秒钟内。所以你必须Math.floor(Date.now()/1000)
    【解决方案3】:

    我安装了 NoSQL Workbench,然后连接到现有的 DynamoDB 表并尝试通过添加新属性来更新现有的项目。 我发现我们只能添加具有这些类型之一的新属性 - “SS”、“NS”、“BS”(字符串集、数字集、二进制集)。 在 Workbench 中,我们可以为选择的操作生成代码。

    我扫描了我的 dynamodb 表,并为每个项目添加了类型为“SS”的新属性,然后我再次扫描并更新了最近添加的新属性类型 -“S”,以便创建具有主键的全局二级索引 (GSI) - “pk2NewAttr”。

    NoSQL Workbench 相关视频 - https://www.youtube.com/watch?v=Xn12QSNa4RE&feature=youtu.be&t=3666

    Python 中的示例“如何扫描所有 dynamodb 表”-https://gist.github.com/pgolding

    【讨论】:

      【解决方案4】:

      在亚马逊 AWS 的 DynamoDB 中向现有表添加新列的方法:

      我们可以通过两种方式将值存储在 DynamoDb 中, (i) 在 DynamoDB 的 RDBMS 结构类型中,我们可以通过执行相同的命令来添加新的 Coulmn,以保留“新列”条目,其中已在现有表中创建记录。我们可以将 DynamoDb 与具有某些列的值的记录/行一起使用,而其他列没有值。

      (ii) 在 NoSQL 类型的结构中;我们将 Json 字符串存储在 Column 中,以根据要求保留所有属性。这里我们正在生成一个 json 字符串,我们必须将新属性添加到 json 字符串中,然后可以将其插入到同一列中,但使用新属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 2018-10-10
        相关资源
        最近更新 更多