"join" dynamodb table 的推荐方法参考 table

Recommended way to "join" dynamodb table with reference table

假设我在 dynamodb 中得到一个名为 visits 的 table,它代表网站访问,其中一列是位置。

在 RDBMS 中我会:

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

我们想要做的查询是让我得到这个网站的所有访问(所以通过网站 id 是可以的)但是我需要每次访问的位置信息。像城市、国家等。在 Sql 中,这是通过简单的连接完成的。

DynamoDB 呢?我想我们可以将位置作为文档存储在 table 中(因此将其完全非规范化),但我确信这不是正确的方法。

你们遇到这种情况怎么办?

谢谢

非规范化是一种可行的方法。另一种方法是在 Dynamo 中保留引用 table,然后将其缓存在本地数据结构(例如 Java/C#/Python/whatever Map)或内存中的键中- 值存储(例如 Redis)。如果参考数据很小并且(几乎)完全静态(因为对非规范化数据的更新非常昂贵),则反规范化是可取的,而如果参考数据适度大,则缓存是可取的 and/or 可以更新(在后者中在这种情况下,我建议使用 Redis 之类的共享缓存,而不是每个服务器的数据结构,因为这将使 invalidate/update 缓存更容易)。 (如果参考数据很大,那么您可能最好为其进行第二次 Dynamo 提取,但听起来您的数据并非如此。)

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