首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GSI与表的差异

GSI与表的差异
EN

Stack Overflow用户
提问于 2015-10-14 03:12:45
回答 3查看 1.9K关注 0票数 5

我很难理解全球二级指数和表格之间的区别。

  • 为什么我要使用全局二级索引,为什么不直接创建另一个表呢?
  • 我必须为两者指定读写吞吐量。当在具有GSI的表上发生写时,我必须同时写入表和索引。那么,我的问题是,为什么GSI不创建另一个表,而不是创建一个全球二级索引?
  • 我使用GSI有什么好处?
EN

回答 3

Stack Overflow用户

发布于 2015-10-15 15:42:21

我来试试这个。

有一件事是,您得到了最终一致的数据视图,并且它还可以充当一种“事务性”模型。

假设您希望跟踪用户/组关系。这可能不是最好的例子,但我认为它可以说明几点。

假设您的用例您希望能够为用户提供Query所有组,为组提供Query所有用户。在这个简单的设置中,您可能会想到有两个表:

  1. UsersToGroups与hash+range of userId+groupId
  2. GroupsToUsers和hash+range of groupId+userId.

如果您需要更新客户端需要的任何关系:

  1. 写入UsersToGroups表(散列:userId,范围:groupId)
  2. 写入GroupsToUsers表(散列:groupId,范围:userId)

如果你的第二次写作失败了怎么办?如果第二个写失败,如何回滚第一个写?你怎么知道你的第二次写作失败了,比如说如果连接失败了?

处理这些问题并不有趣。

使用GSI,您可以有一个表,这取决于您想要如何管理它。如果不是使用两个表,那么假设我使用一个表和一个GSI。

  1. UsersToGroups与hash+range of userId+‘`groupId
  2. GroupsToUsers + hash+range of groupId+userId

如果您需要更新客户端需要的任何关系:

  1. 写到UsersToGroups

就是这样。你只需提出一个请求。如果写入成功,则可以保证索引(最终)具有相同的数据。根据查询此索引的频率或需要传播多少数据,您可以相应地调整吞吐量。

这个简单的例子假设userIdgroupId是唯一的,当它们被投射到索引时不会发生冲突,但是我认为它在解释至少一些有用性方面做得很好。

有关更多信息,请参见 documentation

票数 7
EN

Stack Overflow用户

发布于 2015-10-14 03:48:26

让我们把你的问题分成几部分。

1.全局辅助索引与表.之间的区别是什么?

表:在dynamo db表中,它只是一种数据存储工具,与rdbms不同,它不需要维护任何类型的约束和与其他表的关系。

GSI :它是dynamo提供的一个特性,它帮助以更快的方式从表中检索数据。

2.为什么我要使用全局辅助索引,为什么不创建另一个表.

因为dynamo是一个NoSql db,所以我们不能像使用oracle这样的传统关系数据库那样进行查询。为了达到查询的目的,我们需要对要查询的表的属性有索引。如果我们不做索引,不管是GSI还是LSI,并且我们想要提取一些信息,我们就必须扫描整个表。

如果我们创建另一个表,那么我们还需要在某个时候查询该表。

3.当使用gsi对表进行写入时,必须同时写入表和索引.

虽然我不确定,但我们可以安全地假设数据不会以原始格式分别为表和索引编写。他们一定是在数据库中做了某种优化。因此,与普通的数据库写入相比,所涉及的成本并不完全相同。

另外,我们开发人员不需要写GSI和表--它是由dynamo db自己管理的,我们只需要在表中写。

4.使用gsi有什么好处?

与LSI不同,GSI将索引与表松散耦合。我们可以在需要时单独创建/删除它们。所以它比LSI更好

( b)由于它提供了散列和范围组合,所以查询可以以更优化的方式完成。

( c)与全表扫描(在没有索引的情况下是不可避免的)相比,它要快得多,成本也低得多。

希望它有帮助:)

票数 2
EN

Stack Overflow用户

发布于 2015-10-15 03:52:05

当在具有GSI的表上发生写时,我必须同时写入表和索引。那么,我的问题是,为什么GSI不创建另一个表,而不是创建一个全球二级索引?

不,你不需要同时给桌子和GSI写信。DynamoDB自动为您维护索引。也就是说,当您写入表时,GSI将自动更新。

我使用GSI有什么好处?

您将获得通过GSI键“查询”数据的能力。

非常详细的解释和大量的例子就在那里http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33115991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档