如何在DynamoDB中根据插入的顺序获取项目..?

时间:2017-01-02 08:23:06

标签: php codeigniter primary-key amazon-dynamodb

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

主分区键=> conversation_id

主要排序键=> id

其他属性=> messagedate_timesender_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)。

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一点,以下是我通常使用的两种方法:

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

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

2)在应用程序级别进行排序:我个人使用此解决方案,因为我们无需为索引支付额外费用,根据Hash获取所有数据,然后在应用程序级别通过DateTime进行手动排序< / p>

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

希望有所帮助

相关问题