我们在 DynamoDB 中有 2 个表:
1.组织用户:
分区键:OrgId
排序键:entryId
表目前有 55,000 个项目,大小为 16MB。
2.用户:
PartitionKey:用户的电子邮件
用户 ID 上还有一个 GSI。
与第一张桌子尺寸相似
我们有一个内部工具,其中有一个供用户搜索的栏。在服务器端,它向扫描 OrgUser 表的端点发送请求 -> 然后我们使用 GSI 查询第二个表(我们从第一个表获取 userId)以获取用户的电子邮件。目前该请求大约需要 10 秒。
我们正在努力寻找改进这一点的方法,并已尝试过:
1.对 Orguser 表使用并行扫描而不是顺序扫描。然而,我们担心这是一个创可贴修复,因为在某些时候,即使我们增加线程工作线程的数量,我们也会得到收益递减的结果。另外,还有读取单位的问题。
2.研究将表记录提取到 opensearch 管道中,并使用 opensearch 搜索用户的 id、name 和 email。
因此,寻找有关更长期而不是创可贴的解决方案的建议和建议。谢谢!
我认为 DynamoDB 不是适合搜索用例的产品。此外,您必须扫描一个表,然后使用其结果查询另一个表,这一事实让我相信您的数据模型低于标准。
你说得对,Scan 是不可持续的,你的 API 根本无法很好地扩展。