让我们把你的问题分成几部分。
1.全局二级索引和表有什么区别。
表:在 dynamo db 中,表只是数据的存储工具,与 rdbms 不同,它不必维护任何类型的约束和与其他表的关系。
GSI :它是 dynamo db 提供的一项功能,有助于以更快的方式从表中检索数据。
2。为什么要使用全局二级索引,为什么不创建另一个表。
由于 dynamo db 是 NoSql db,我们不能像使用 oracle 等传统 RDBMS 那样进行查询。为了达到查询的目的,我们需要对我们想要查询的表的那些属性建立索引。如果我们不将索引设为 GSI 或 LSI,并且我们想要提取一些信息,我们将不得不扫描整个表。
如果我们创建另一个表,那么我们也需要在某个时间点查询该表。
3。当使用 gsi 在表上发生写入时,我必须同时写入表和索引。
虽然我不确定,但我们可以放心地假设数据不会以原始格式单独写入表和索引。他们一定在他们的数据库中做了某种优化。所以与普通的数据库写入相比,所涉及的成本并不完全相同。
另外我们,开发者,不需要写写在GSI和表中,它是由dynamo db自己管理的,我们只需要写在表中。
4.使用 gsi 有什么好处?
a) 与 LSI 不同,GSI 保持索引与表松散耦合。我们可以在需要时单独创建/删除它们。所以比LSI好
b) 由于它提供哈希和范围组合,因此可以以更优化的方式完成查询。
c) 与全表扫描相比(在没有索引的情况下是不可避免的),它更快且成本更低。
希望对你有帮助:)