2015-11-06 53 views
1

我在DynamoDB中存储推文。我使用鸣叫的id属性作为该范围的散列键和鸣叫的created_at属性。在DynamoDB中存储推文

我想查询表中的所有推文,以查找特定日期之后的所有推文。我收集到我需要为鸣叫的timestamp属性创建一个GSI(全局二级索引),以便我可以查询特定日期之后的所有推文,而不需要鸣叫的id属性。这是真的?如果是的话,我都是这么做的:(我很困惑,为什么我需要指定一个哈希键对GSI的一系列关键?)

enter image description here

+0

您不必为GSI设置Range键。 – garnaat

+0

@garnaat所以我应该为'Index Hash Key'编号,命名'Index Hash Key'时间戳,然后不指定索引范围键?这只是因为'索引名称'字段有一个'*'... – Apollo

+0

“名称”就是你想要给这个索引的名字,你在查询时需要使用它。我会选择类似timestamp-index的东西。您可以将时间戳本身作为索引散列键,并且由于GSI不需要唯一的索引键,您甚至可以拥有多个具有相同时间戳的项目。 – garnaat

回答

1

所以基本上你想在DynamoDB的属性上创建范围索引。运气不好,因为这不是作者想到的。我会解释。

DynamoDB需要项目为distributed evenly across hashes并且具有统一的负载。你的twitter_id哈希键肯定有帮助,但是当你想要询问你的范围键问题时,你会失败。

你看,如果你想速度 - 你想query东西作为查询=索引和扫描=没有索引。查询需要一个哈希键来查询 - 你不能查询没有一个。

你是正确的,你不能使用你原来的主键,这和你是正确的思维约GSI - 您可以通过通过创建GSI的哈希键,将有一个恒定的哈希*和时间戳范围。

如果你这样做,你是通过具有未分配的指数打破DynamoDB的表现。这可能会导致你头痛,并产生不良的吞吐量(你会花费比你消耗的更多)。

我在恒定散列*上放了一颗星,因为你可以做一些操作来创建几个哈希值并将它们组合到应用程序级别。

总之,可以用Dynamo做你想做的,但它不适合Dynamo。