其实我是 dynamodb 的新手,文档对我来说很难掌握。虽然我不知道它是否有效,或者我是否遵循最佳实践,但我已经有了一个工作系统。所以任何帮助都将不胜感激。
我正在使用类似于以下结构的json对象:
**标题必须唯一
{
{
"title": "a title",
"des": "a description,
"published:1495147723000
}, {
"title": "a title 2",
"des": "a description 2,
"published:1495146489000
},
....
}
整个表格最多只包含200个项目。在这200件物品中,我需要的物品只在特定时间段之间发布。为了实现这一点,我正在使用这样的设置。我只是想知道是否有其他有效的方法来做这件事。
我的dynamodb表格模板:
{
TableName: 'Table',
AttributeDefinitions: [{
AttributeName: "title",
AttributeType: "S"
},
{
AttributeName: "published",
AttributeType: "N"
}
],
KeySchema: [{
AttributeName: "title",
KeyType: "HASH"
},
{
AttributeName: "published",
KeyType: "RANGE"
}
],
GlobalSecondaryIndexes: [{
IndexName: "findByTime",
KeySchema: [{
AttributeName: "title",
KeyType: "HASH"
},
{
AttributeName: "published",
KeyType: "RANGE"
}
],
Projection: {
ProjectionType: "ALL"
},
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
}],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
};
现在,我正在通过这样的扫描获取项目:
docClient.scan(
{
TableName: "Table",
IndexName: "findByDate",
FilterExpression: "feedTime BETWEEN :lastUpdate AND :now",
// rangeKeyConditionExpression: "feedTime >= :ft",
ExpressionAttributeValues: {
":now": Date.now(),
":lastUpdate": Number.parseInt(lastRefreshed)
},
ScanIndexForward: false
},
(e, r) => {
if (e) {
reject(e);
}
resolve(r);
}
);
答案 0 :(得分:0)
您根本不需要全局二级索引。您可以直接查询表。仅当您希望散列键和范围键与主表不同时,才使用全局二级索引。目前,您支付的费用是配置容量的两倍。
使用扫描来获取记录似乎很好。