如何使用全局和本地二级索引将数据加载到Dynamo DB表?

时间:2015-04-27 06:17:41

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

我使用AWS控制台在Dynamo数据库中创建了一些表,并定义了一些全局和二级索引。

现在的问题是如何使用java的AWS SDK在这些表中加载数据。 我查看了Dynamo DB的开发人员指南(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html),但是当您的表具有全局二级索引时,我找不到如何加载数据。

使用数据加载表的代码是:

  Table table = dynamoDB.getTable(tableName);
  Item item = new Item().withPrimaryKey("Name", "Amazon DynamoDB")
                        .withString("Category", "Amazon Web Services")
                        .withNumber("Threads", 2)
                        .withNumber("Messages", 4)
                        .withNumber("Views", 1000);
  table.putItem(item);

现在假设在我的表中我将视图定义为全局第二个索引。 所以相同的代码将起作用或者有一些不同的方法来处理这种用例?

2 个答案:

答案 0 :(得分:1)

您无法直接写入GSI,即使它们是为表定义的。

相反,DynamoDB会自动将项目插入,更新和删除传播到GSI,具体取决于每个GSI中设置的ProjectionType。只要您在CreateTable操作中定义了GSI,或者在UpdateTable操作中添加了GSI,GSI就会反映您放入基表的项目,具体取决于ProjectionType

答案 1 :(得分:1)

如果您的表具有二级索引(本地或全局),则会在表中插入数据时自动创建/维护它们。 DynamoDB将自动管理您的索引,确保它们与表中的内容保持一致。

然而,另一个完全不同的问题(你应该小心)是如何正确地将数据加载到DynamoDB表中:

  

有时您将其他数据源中的数据加载到   DynamoDB。通常,DynamoDB会将您的表数据分区为多个   服务器。将数据上传到表格时,如果获得更好的性能   您同时将数据上载到所有分配的服务器。对于   例如,假设您要将用户消息上载到DynamoDB表。   您可以设计一个使用散列和范围类型主键的表   其中UserID是哈希属性,MessageID是范围   属性。

有关Distribute Write Activity During Data Upload

的更多详情

在这里,您可以找到有关辅助索引的其他信息,以补充您已知的内容:

  

为了有效访问表格中的数据,Amazon DynamoDB会创建和   维护主键属性的索引。这允许   通过指定主键快速检索数据的应用程序   值。但是,许多应用程序可能会受益于一个或   更多二级(或备用)密钥可用,以实现高效   使用主键以外的属性访问数据。讲话   这样,您就可以在表上创建一个或多个二级索引   发出针对这些索引的查询或扫描请求。

     

辅助索引是包含子集的数据结构   表中的属性以及支持Query的备用键   操作。使用辅助索引,不再限制查询   到表主键;你也可以使用。检索数据   由二级索引定义的备用密钥。一张桌子可以有   多个二级索引,使您的应用程序可以访问   许多不同的查询模式。

     

辅助索引中的数据由属性组成   从表中投射或复制到索引中。当你创建一个   在二级索引中,您可以定义索引的备用键   与您希望在索引中投影的任何其他属性。   DynamoDB将这些属性与。一起复制到索引中   表中的主键属性。然后,您可以查询或扫描   索引就像查询或扫描表一样。

Improving Data Access with Secondary Indexes in DynamoDB部分应提供有关如何正确定义GSI的有用详细信息(包括投影等概念)。