擅长:python、mysql、java
<P>考虑创建一个全局二级索引,其中包含<EM >仅< EEM>未处理的项。您可以通过添加/删除GSI主键来添加/删除GSI中的项。例如,考虑下面的表结构:</P>
<p><a href="https://i.stack.imgur.com/LVEsq.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/LVEsq.png" alt="enter image description here"/></a></p>
<p>请注意,只有<code>file_id</code>3和4定义了GSIPK。GSI在逻辑上如下所示:</p>
<p><a href="https://i.stack.imgur.com/kxvum.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/kxvum.png" alt="enter image description here"/></a></p>
<p>DynamoDB只会将项投影到该项上存在GSIPK的索引中。您的lambda可以从GSI读取数据,做一些工作,将<code>processed</code>属性设置为<code>true</code>,并删除<code>GSIPK</code>值。这将有效地从二级索引中删除该项</p>
<p>对DynamoDB进行的<code>update</code>调用如下所示:</p>
<pre><code> const params = {
TableName: YOUR_TABLE_NAME_HERE,
Key: {
PK: FILE_ID_HERE
},
UpdateExpression: "SET #processed = :true REMOVE #gsipk",
ExpressionAttributeNames: {
"#processed": "processed",
"#gsi1pk": "GSIPK",
},
ExpressionAttributeValues: {
":true": true
}
};
ddbClient.update(params);
</code></pre>