【问题标题】:How to fetch items based on inserted order in DynamoDB..?如何根据 DynamoDB 中的插入顺序获取项目..?
【发布时间】:2017-05-16 08:37:09
【问题描述】:

我在 dynamodb 中有包含以下字段的消息表:

主分区键 => conversation_id

主排序键 => id

其他属性 => message,date_time,sender_id

+------------------+----------+----------------------+------------------------+----------+
| conversation_id  | id       | message              | date_time              | sender_id|
+----------------------------------------------------+------------------------+----------+
| p1OS9E           | S04Ln    | Hi.. how are you..?  | 2016-11-30 06:58:11 pm | 11       |
| p1OS9E           | JZkSo    | Work finished..?     | 2016-11-30 06:58:13 pm | 11       |
| p1OS9E           | EN9N4    | I am fine.           | 2016-11-30 06:58:12 pm | 12       |
|                  |          |                      |                        |          |
| a0zgOO           | jmDdm    | In online..?         | 2016-12-40 08:43:12 pm | 51       |
| a0zgOO           | mAEdY    | Yes.. say..          | 2016-12-40 08:43:14 pm | 34       |
| a0zgOO           | aWKrp    | Come to play..       | 2016-12-40 08:43:12 pm | 51       |
+------------------+----------+----------------------+------------------------+----------+

根据分区键查询项目时,结果返回无序(不按插入顺序)。 排序键id,AttributeType 是`string',随机生成的代码,使主键唯一

首先我使用date_time 作为排序键,但如果在相同的conversation_id 和相同的date_time 内,将输入一条消息。所以可能会发生数据丢失。

如何按照插入消息的顺序(基于时间)获取我的项目..?

注意:我使用的是 PHP(Codeigniter MVC)。

【问题讨论】:

    标签: php codeigniter primary-key amazon-dynamodb


    【解决方案1】:

    有很多方法可以实现,以下是我常用的两种方法:

    1) 添加索引:您需要将 LSI(本地二级索引)添加到表中,范围键为 DateTime。

    现在您可以通过传递哈希键来查询 LSI,对于 DateTime,您可以使用 >= 或 >= 运算符来排序。

    2) 在应用程序级别排序:我个人使用此解决方案,因为我们不必为索引支付额外费用,根据哈希获取所有数据,然后在应用程序级别按日期时间手动排序

    我的另一个answer 也有类似的问题。

    希望对你有帮助

    【讨论】:

    • @Harshal Bulsara.. LSI 范围键为date_time,然后是分区键..?
    • @ Harshal Bulsara.. 为了将date_time 添加为排序键,我需要删除普通属性中的date_time...?如果我在 LSI 中创建分区键为conversation_id,那么我还需要将项目放入该字段..?
    • 不,您的哈希键将与您的表键相同,并且您不需要修改任何内容,dynamodb 将在表数据更改时更新 LSI
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    相关资源
    最近更新 更多