这是一个糟糕的 DynamoDB 数据库模式吗?
Is this a bad DynamoDB database schema?
在观看了一些关于 DynamoDB 及其最佳实践的视频后,我决定试一试;但是,我不禁觉得我正在做的事情可能是一种反模式。据我了解,最佳做法是利用尽可能少的表,同时利用 GSI 进行一些 'heavy' 提升。不幸的是,我正在处理一个实际上没有严格定义的访问模式的用例,因为我们仍处于早期开发阶段。
我们可能会看到的一些早期访问模式是:
- 检索特定游戏的获胜次数:剪刀石头布、拳击等。[1 快速查找]
- 检索用户拥有的硬币数量。 [1 快速查找]
- 检索某人购买的所有物品(不关心日期)。 [不确定?]
- 可能检索与用户关联的所有属性(rps wins、box wins、coins 等)。 [我真的不知道。]
此外,我们可能需要完成 2 个操作。例如,如果用户赢得特定游戏,他们可能会收到“硬币”。实际上,我们需要将硬币添加到用户的“硬币”属性并更新他们在游戏中的获胜次数。
你认为我应该重新审视这个策略吗?此外,我们可能会开始创建 'logs' 与各种游戏和每个人的游戏相关联。
在没有完全了解您的应用程序访问模式的情况下设计 DynamoDB 数据模型是 anti-pattern。
花时间定义您的实体(用户、游戏、订单等)、它们之间的关系以及您的应用程序密钥访问模式。当您刚开始时,这可能是一项艰巨的工作,但在使用 DynamoDB 时做到这一点绝对至关重要。我们(或您,或任何人)还能如何评估您是否正确使用 DDB?
当我第一次使用 DDB 时,我以与您描述的类似方式处理了这个过程。我习惯于使用 SQL 数据库,在那里我可以定义一些表并依靠 SQL 的魔力来支持我的访问模式,因为我对应用程序访问模式的理解不断发展。我很快意识到,如果我想使用 DynamoDB,这是行不通的!
相反,我从我的应用程序的 front-end 开始。我勾勒出应用程序中的不同页面,并确定了应用程序中最重要的概念。诚然,我可能没有涵盖我的应用程序中的 所有 访问模式,但该练习确实确定了我需要拥有一个可用应用程序的最少访问模式。
如果您需要快速制作应用程序原型以更好地了解您的访问模式,请考虑使用您和您的团队已有的技能。如果您已经了解使用 SQL 数据库进行数据建模,那么现在就开始吧。一旦您更好地了解您的访问模式并确定您的应用程序可以从使用 NoSQL 数据库中受益,您可以随时重新访问 DynamoDB。
在观看了一些关于 DynamoDB 及其最佳实践的视频后,我决定试一试;但是,我不禁觉得我正在做的事情可能是一种反模式。据我了解,最佳做法是利用尽可能少的表,同时利用 GSI 进行一些 'heavy' 提升。不幸的是,我正在处理一个实际上没有严格定义的访问模式的用例,因为我们仍处于早期开发阶段。
我们可能会看到的一些早期访问模式是:
- 检索特定游戏的获胜次数:剪刀石头布、拳击等。[1 快速查找]
- 检索用户拥有的硬币数量。 [1 快速查找]
- 检索某人购买的所有物品(不关心日期)。 [不确定?]
- 可能检索与用户关联的所有属性(rps wins、box wins、coins 等)。 [我真的不知道。]
此外,我们可能需要完成 2 个操作。例如,如果用户赢得特定游戏,他们可能会收到“硬币”。实际上,我们需要将硬币添加到用户的“硬币”属性并更新他们在游戏中的获胜次数。
你认为我应该重新审视这个策略吗?此外,我们可能会开始创建 'logs' 与各种游戏和每个人的游戏相关联。
在没有完全了解您的应用程序访问模式的情况下设计 DynamoDB 数据模型是 anti-pattern。
花时间定义您的实体(用户、游戏、订单等)、它们之间的关系以及您的应用程序密钥访问模式。当您刚开始时,这可能是一项艰巨的工作,但在使用 DynamoDB 时做到这一点绝对至关重要。我们(或您,或任何人)还能如何评估您是否正确使用 DDB?
当我第一次使用 DDB 时,我以与您描述的类似方式处理了这个过程。我习惯于使用 SQL 数据库,在那里我可以定义一些表并依靠 SQL 的魔力来支持我的访问模式,因为我对应用程序访问模式的理解不断发展。我很快意识到,如果我想使用 DynamoDB,这是行不通的!
相反,我从我的应用程序的 front-end 开始。我勾勒出应用程序中的不同页面,并确定了应用程序中最重要的概念。诚然,我可能没有涵盖我的应用程序中的 所有 访问模式,但该练习确实确定了我需要拥有一个可用应用程序的最少访问模式。
如果您需要快速制作应用程序原型以更好地了解您的访问模式,请考虑使用您和您的团队已有的技能。如果您已经了解使用 SQL 数据库进行数据建模,那么现在就开始吧。一旦您更好地了解您的访问模式并确定您的应用程序可以从使用 NoSQL 数据库中受益,您可以随时重新访问 DynamoDB。