我应该在单个 DynamoDB table 中保留多少项目有最佳实践限制吗?
Is there a best practice limitation of how many items I should keep in a single DynamoDB table?
我正在为系统设置无服务器应用程序,我想知道以下内容:
假设我 table 处理公司。每个公司都可以有发票。每家公司大约有 6-8000 张发票。假设我有 14 个公司,那么我的 table.
中大约有 112 000 个项目
这样处理“可以”吗?我只会为我做的每个 Get 请求付费,而且我可以将很多项目查询到同一个 get 请求中。
- 我不会每次写入或获取项目时都获取每个项目。
那么,对于 table 中我最多应该拥有多少项,是否有建议?我可以一起烤一些东西,但我主要想要一个一般性的推荐。
Dynamo Db 甚至不会注意到 10 万个条目...
如 LifeOfPi 所述,条目应小于 400k。
这个问题表明明显缺乏对 what/why/how 使用 DDB 的理解。我建议你多学点东西。围绕 DDB 的 AWS Reinvent 视频非常有用。
在标准的 RDBMS 中,您需要从一开始就了解结构。然后访问该数据非常灵活。
DDB 恰恰相反,您需要了解您需要如何访问数据;结构并不重要。你应该得到这样的结果:
对于 100K 项和大多数应用程序,您可能会发现 Aurora serverless 更适合您的需求;特别是如果您有复杂的搜索 and/or 排序需求。
您可以在 table 中拥有的物品数量没有实际限制。每张发票有多少项目取决于您的应用程序的访问模式。你需要问,你的应用程序需要什么数据,什么时候需要这些数据,数据有多大,项目多久更新一次。比如1Kb WCU和4Kb RCU下一个item的所有数据进来,你不经常写,读的时候需要这个item的所有数据,就把它推到一个item也许。如果数据更大,或者其中的一部分被更频繁地写入,那么也许将其拆分。
包裹跟踪应用就是一个例子。您有关于包裹、尺寸、重量、来源地址、目的地地址等的初始信息。这可能是很多数据。当该包裹进入分拣设施时,它会被登记。你想更新你已经写过的整个项目吗?或者您只是编写一个具有相同 PK(项目集合)但不同 SK 的项目,然后是它进入分类设施的信息?当它离开分拣设施时,您想写入它离开的数据库、它在哪辆卡车上等。同样的问题。
现在,当您需要通过跟踪 ID 号 PK 显示运输信息时,您可以查询 DynamoDB 并获取该跟踪 ID 号的整个项目集合。因此,您会获得具有该 ID 的所有项目,因为您的应用程序会在客户的跟踪网站上显示大部分信息。
再次重申,这实际上取决于应用程序和您的访问模式,但您希望尝试只读取和写入您的应用程序需要的项目,何时需要它们,如何需要它们,而不是更多...... .within reason(存在过度切片数据这样的事情)。在我看来,这就是如何让像 DynamoDB 这样的 NoSQL 数据库成为性能最高、成本效益最高的数据库。
我正在为系统设置无服务器应用程序,我想知道以下内容:
假设我 table 处理公司。每个公司都可以有发票。每家公司大约有 6-8000 张发票。假设我有 14 个公司,那么我的 table.
中大约有 112 000 个项目这样处理“可以”吗?我只会为我做的每个 Get 请求付费,而且我可以将很多项目查询到同一个 get 请求中。
- 我不会每次写入或获取项目时都获取每个项目。
那么,对于 table 中我最多应该拥有多少项,是否有建议?我可以一起烤一些东西,但我主要想要一个一般性的推荐。
Dynamo Db 甚至不会注意到 10 万个条目...
如 LifeOfPi 所述,条目应小于 400k。
这个问题表明明显缺乏对 what/why/how 使用 DDB 的理解。我建议你多学点东西。围绕 DDB 的 AWS Reinvent 视频非常有用。
在标准的 RDBMS 中,您需要从一开始就了解结构。然后访问该数据非常灵活。
DDB 恰恰相反,您需要了解您需要如何访问数据;结构并不重要。你应该得到这样的结果:
对于 100K 项和大多数应用程序,您可能会发现 Aurora serverless 更适合您的需求;特别是如果您有复杂的搜索 and/or 排序需求。
您可以在 table 中拥有的物品数量没有实际限制。每张发票有多少项目取决于您的应用程序的访问模式。你需要问,你的应用程序需要什么数据,什么时候需要这些数据,数据有多大,项目多久更新一次。比如1Kb WCU和4Kb RCU下一个item的所有数据进来,你不经常写,读的时候需要这个item的所有数据,就把它推到一个item也许。如果数据更大,或者其中的一部分被更频繁地写入,那么也许将其拆分。
包裹跟踪应用就是一个例子。您有关于包裹、尺寸、重量、来源地址、目的地地址等的初始信息。这可能是很多数据。当该包裹进入分拣设施时,它会被登记。你想更新你已经写过的整个项目吗?或者您只是编写一个具有相同 PK(项目集合)但不同 SK 的项目,然后是它进入分类设施的信息?当它离开分拣设施时,您想写入它离开的数据库、它在哪辆卡车上等。同样的问题。
现在,当您需要通过跟踪 ID 号 PK 显示运输信息时,您可以查询 DynamoDB 并获取该跟踪 ID 号的整个项目集合。因此,您会获得具有该 ID 的所有项目,因为您的应用程序会在客户的跟踪网站上显示大部分信息。
再次重申,这实际上取决于应用程序和您的访问模式,但您希望尝试只读取和写入您的应用程序需要的项目,何时需要它们,如何需要它们,而不是更多...... .within reason(存在过度切片数据这样的事情)。在我看来,这就是如何让像 DynamoDB 这样的 NoSQL 数据库成为性能最高、成本效益最高的数据库。