我在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)。
答案 0 :(得分:0)
有很多方法可以实现这一点,以下是我通常使用的两种方法:
1)添加索引:您需要将LSI(本地二级索引)添加到表中,范围键为DateTime。
现在您可以通过传递哈希键来查询LSI,而对于DateTime,您可以使用> =或> =运算符来排序。
2)在应用程序级别进行排序:我个人使用此解决方案,因为我们无需为索引支付额外费用,根据Hash获取所有数据,然后在应用程序级别通过DateTime进行手动排序< / p>
我的另外一个answer有类似的问题。
希望有所帮助