我有一个 DynamoDB 结构如下。
- 我有患者的患者信息存储在其文档中。
- 我的索赔信息存储在其文件中。
- 我的付款信息存储在其文件中。
- 每个索赔都属于患者。患者可以有一项或多项索赔。
- 每笔付款都属于患者。患者可以有一笔或多笔付款。
我只创建了一个 DynamoDB 表,因为所有的 aws dynamodb 文档都表明如果可能只使用一个表是最好的解决方案。所以我最终得到以下结果:
在这个表中,ID 是分区键,EntryType 是排序键。每项索赔和付款都持有其所有者。我的访问模式如下:
- 列出数据库中的所有患者,并按创建日期对患者进行分页。
- 列出数据库中的所有声明,并按创建日期对声明进行分页。
- 列出数据库中的所有付款,并按创建日期排序付款。
- 列出特定患者的索赔。
- 列出特定患者的付款。
我可以通过两个全局二级索引来实现这些。我可以使用 GSI 将 EntryType 作为分区键,将 CreationDate 作为排序键,以列出按创建日期排序的患者、索赔和付款。我还可以使用另一个 GSI 和 EntryType 分区键和 OwnerID 排序键列出患者的索赔和付款。
我的问题是这种方法只给我带来了创建日期的排序。我的患者和索赔有更多的属性(每个大约 25 个),我还需要根据他们的每个属性对它们进行排序。但是 Amazon DynamoDB 有一个限制,即每个表最多可以有 20 个 GSI。因此,我尝试动态创建 GSI(根据请求动态创建),但这也以非常低效的方式结束,因为它将项目复制到另一个分区以创建 GSI(据我所知)。那么,按照患者姓名、索赔描述以及他们拥有的任何其他字段对患者进行分类的最佳解决方案是什么?