我使用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);
现在假设在我的表中我将视图定义为全局第二个索引。 所以相同的代码将起作用或者有一些不同的方法来处理这种用例?
答案 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的有用详细信息(包括投影等概念)。