推荐的方式来加入" dynamodb表与参考表

时间:2015-05-26 17:01:46

标签: amazon-dynamodb nosql

我们假设我在dynamodb中有一个名为visit的表格,代表网站访问,其中一列是位置。

在RDBMS中我会:

visits [id, website_id, ........, location_id ]
ref_locations [id, city, country, postcode, lat, long]

我们要做的查询是获取本网站的所有访问(因此网站ID很好)但我需要每次访问的位置信息。像城市,国家等。在Sql中,这是通过简单的连接完成的。

DynamoDB怎么样?我认为我们可以将位置存储为表格中的文档(因此完全非正规化)但我确信这不是正确的方法。

你们在这种情况下做了什么?

由于

1 个答案:

答案 0 :(得分:3)

非规范化是一种可行的方法。另一种方法是在Dynamo中保留引用表,然后将其缓存在本地数据结构(例如Java / C#/ Python /无论Map)或内存中的键值存储(例如{{3 }})。如果参考数据很小并且(几乎)完全静态(因为对非规范化数据的更新非常昂贵),则非规范化是优选的,而如果参考数据适度大和/或可以更新则优选缓存(在后一种情况下我是建议使用共享缓存,例如Redis而不是每服务器数据结构,因为这样可以更容易地使缓存无效/更新。 (如果参考数据很大,那么你可能最好只为它做一次Dynamo提取,但听起来不像你的数据那样。)

无论您选择哪种方法,我建议比较将参考数据存储为结构化数据或压缩二进制数据的基准 - 根据我的经验,压缩的存储和网络成本降低通常值得ag(un)的cpu成本zip(但我的经验主要是缓存JSON或XML,它可以获得良好的压缩效果)。