2017-01-02 34 views
0

我有消息表中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)。

回答

0

有很多,你可以做到这一点的方式,下面是我一般采用两种方法:

1)添加索引:你需要LSI(本地二级索引)与范围内添加到您的表键为DateTime。

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

2)排序在应用程序级:我个人使用该解决方案,因为我们不必支付额外的量指数,由日期时间

那里得到在应用程序级,然后手动排序基于Hash的所有数据是我的另一个answer有类似的问题。

希望有帮助

+0

@ Harshal Bulsara ..对于LSI范围键为'date_time',然后分区键..? – ArunValaven

+0

@ Harshal Bulsara ..为了添加'date_time'作为排序键,我需要删除正常属性中的'date_time' ...?如果我在LSI中创建分区键作为'conversation_id',那么我还需要将putitem也放入此字段中。 – ArunValaven

+0

没有你的哈希键将与你的表格键相同,并且你不需要修改任何东西。当表格数据改变时,dynamodb将更新LSI –

相关问题