使用 GSI 列出 table 中所有项目的 DynamoDB
DynamoDB for listing all items in the table using GSI
我在 dynamodb
中有一个这样的 table
name(PK)
key(SK)
description
read
user
Read User
read
account
Read Account
write
user
Write User
我想列出 table 中的所有数据,但我不想对 table 执行扫描。所以我在tableallIndex
上加了一个索引。它的值将始终相同(例如all
)
name(PK)
key(SK)
description
allIndex
read
user
Read User
all
read
account
Read Account
all
write
user
Write User
all
现在我可以使用 allIndex
进行查询以列出 table 中的所有数据。好处是所有数据都将驻留在 dynamodb 的 GSI 中的同一分区中。我想知道这样做是否是个好主意?还是会导致 GSI 上出现热分区?
scan
是适合您的用例的选项。
当您过滤应用程序中的数据子集时,query
优于 scan
。 scan
操作可能很昂贵,因为它必须读取数据库中的每个项目。如果您只是获取一些项目,这是一个坏主意。但是,如果您的访问模式需要您读取整个数据库,scan
是 最佳选择。
我在 dynamodb
中有一个这样的 tablename(PK) | key(SK) | description |
---|---|---|
read | user | Read User |
read | account | Read Account |
write | user | Write User |
我想列出 table 中的所有数据,但我不想对 table 执行扫描。所以我在tableallIndex
上加了一个索引。它的值将始终相同(例如all
)
name(PK) | key(SK) | description | allIndex |
---|---|---|---|
read | user | Read User | all |
read | account | Read Account | all |
write | user | Write User | all |
现在我可以使用 allIndex
进行查询以列出 table 中的所有数据。好处是所有数据都将驻留在 dynamodb 的 GSI 中的同一分区中。我想知道这样做是否是个好主意?还是会导致 GSI 上出现热分区?
scan
是适合您的用例的选项。
query
优于 scan
。 scan
操作可能很昂贵,因为它必须读取数据库中的每个项目。如果您只是获取一些项目,这是一个坏主意。但是,如果您的访问模式需要您读取整个数据库,scan
是 最佳选择。