在单个DynamoDB表上使用多个全局索引是否有效?

时间:2019-02-05 09:50:45

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

存在下表中描述的数据集。下表中仅提供Sr.no供参考

|sr.no|    id    | tis |data-type|   b.id   |idType_2|  var_2 |     
|-----|----------|-----|---------|----------|--------|--------|
|  1  |abc-def-gi|12345|  a-type |1234567890| 843023 | NULL   |
|-----|----------|-----|---------|----------|--------|--------| 
|  2  |1234567890|12346|  b-type |    NULL  |  NULL  |40030230|
|-----|----------|-----|---------|----------|--------|--------|
|  3  |abc-def-gj|12347|  a-type |1234567890| 843023 |  NULL  |

查询类型

  1. 输入id,如果data-typea-type,则返回字段tis,b.id,id_type2引用sr.no=1
  2. 输入id,如果data-typeb-type,则返回字段var_2参考sr.no=2
  3. 输入id_type2的{​​{1}}返回字段id,tis,b.id
  4. 输入sr.no=1,3根据data-type返回id

注意

    每天每天100k次插入
  • tis between 12345 and 12347sr.no=1,3数据,并使用唯一的a-type
  • idsr.no=2数据是一组固定的 数据。

以下关键方法对这样的数据集有效吗?还有其他方法可以用来存储和从DynamoDB检索数据吗?

b-type处理查询1,2。

Partition Key = id处理查询3

GSI1=id_type2 and GSI1SK=id处理查询4

2 个答案:

答案 0 :(得分:0)

这是我的想法:

1)如果您拥有的数据具有不同的访问模式,则应考虑将数据分成不同的表

2)如果将数据一起访问,则将其存储在一起-这意味着,如果每当您读取某个建模实体的a型数据时,您还需要读取同一实体的一个或多个b型记录,将所有这些记录放在同一分区键下的同一表中

在您的示例中,要想一想起来,类型a和类型b数据的ID是不同的。这意味着将类型a和类型b都存储在同一张表中,您将获得0收益。使用两个不同的表。

3)不能一起访问的数据根本不会从放在同一表中受益,实际上,在更极端的情况下有可能成为问题

关系数据库与非关系数据库之间的主要区别在于,在非关系存储中,您没有跨表联接,因此,关系数据库的宗旨之一是数据规范化,而非关系存储则倾向于相反的情况。关系。

答案 1 :(得分:0)

此问题通过以下方法来创建,即不创建任何GSI的以下实例 DynamoDB

创建GSI时,会将写入主表中的所有数据复制到GSI表中,因此WriteCost为x GSI数。如果您有1个GSI,则为PrimaryWrite + GSIWrite;如果您有2个GSI,则为Primary + GSI1 + GSI2。另外,写入GSI与主数据库相同,因此,如果以1000 WCU写入主数据库,则对GSI的写入也是如此,因此1GSI总计为2000 WCU,2 GSI总计为3000WCU。 >

我们做什么

application_unique_id as hash key
timestamp as sort key

其余键都存储为属性(只要有有效的哈希键和排序键,DynamoDB就支持动态JSON)。

我们使用了连接到表的DynamoDB流上的 Lambda函数,将数据写入ElasticSearch集群。

由于DynamoDB拥有所有跟踪点,并且是保留和查询这些跟踪点的最佳场所,因此我们每天对最新快照数据进行索引。

这样,我们就知道哪一天发送了什么数据(因为dynamodb不允许用户导出哈希键列表)。我们可以在ElasticSearch内完成所有其余的计划查询和比较查询。

DynamoDB解决了亚毫秒级延迟级别的查询时间序列数据 ElasticSearch解决了在数据之上进行所有比较和过滤操作的问题。

将DynamoDB ttl设置为30天,ElasticSearch不支持ttl,但是一旦索引创建日超过30天,我们就会删除每日索引。