寻找最 efficient/cost 有效的方法来查询我的 DynamoDB table
Looking for the most efficient/cost effective way to query my DynamoDB table
在我的网站上,我有一个表单,其中包含以下字段:全名、电子邮件、phone# 和消息(下图)。
有人填写表格后,我想查询我的 table 以查看是否有任何项目具有相同的电子邮件地址,或者 phone # 用户提供给表格的。如果有一个项目具有相同的 email/phone # 那么我想检索该项目的“sharedID”,然后在 table 中使用提交的表单信息和检索到的 ID 创建一个新项目。
目前,我正在执行 dynamoDB 查询来实现此目的(代码如下)。但是,我认为我需要在查询中包含主键 (id)。但是,这是一个问题,因为在查询时无法知道项目的 id(因为 id 是随机生成的)。
const checkForSameEmailOrPhone = () => {
const params = {
TableName: "customers",
ProjectionExpression: "sharedID",
FilterExpression: "email_address = :givenEmail or phone_number = :givenNumber",
ExpressionAttributeValues: {
":givenEmail": "xample@example.com",
":givenNumber": '7777777'
}
};
docClient.query(params, function(err, data){
if (err) {
console.error('Error in GetItem', err);
} else {
console.log('data', data);
function createItem() {
const uniqueId = nanoid();
let params = {
TableName :"customers",
ConditionExpression: "attribute_not_exists(z)",
Item:{
"id": uniqueId,
"email_address": "address@email.com",
"full_name": "a name",
"phone_number": "822222222",
"message": "different",
"sharedId": data?.Items[0]?.id || uniqueId
}
};
docClient.put(params, function(err, data) {
if (err) {
console.error('sdk ERROR', err);
} else {
console.log('success');
}
});
};
createItem();
}
});
};
话虽如此,我想知道是否有人可以帮我找到一个成本 effective/efficient 的解决方案来检索包含相同电子邮件和 phone # 用户在表格.
您应该创建全局二级索引并将要查询的字段用作分区键。 table 可以有多个 GSI,最佳做法是只向索引添加必要的字段(这样在查询数据时使用较少的读取容量单位)。
您可以在官方 documentation
中阅读更多关于索引的信息
在我的网站上,我有一个表单,其中包含以下字段:全名、电子邮件、phone# 和消息(下图)。
有人填写表格后,我想查询我的 table 以查看是否有任何项目具有相同的电子邮件地址,或者 phone # 用户提供给表格的。如果有一个项目具有相同的 email/phone # 那么我想检索该项目的“sharedID”,然后在 table 中使用提交的表单信息和检索到的 ID 创建一个新项目。
目前,我正在执行 dynamoDB 查询来实现此目的(代码如下)。但是,我认为我需要在查询中包含主键 (id)。但是,这是一个问题,因为在查询时无法知道项目的 id(因为 id 是随机生成的)。
const checkForSameEmailOrPhone = () => {
const params = {
TableName: "customers",
ProjectionExpression: "sharedID",
FilterExpression: "email_address = :givenEmail or phone_number = :givenNumber",
ExpressionAttributeValues: {
":givenEmail": "xample@example.com",
":givenNumber": '7777777'
}
};
docClient.query(params, function(err, data){
if (err) {
console.error('Error in GetItem', err);
} else {
console.log('data', data);
function createItem() {
const uniqueId = nanoid();
let params = {
TableName :"customers",
ConditionExpression: "attribute_not_exists(z)",
Item:{
"id": uniqueId,
"email_address": "address@email.com",
"full_name": "a name",
"phone_number": "822222222",
"message": "different",
"sharedId": data?.Items[0]?.id || uniqueId
}
};
docClient.put(params, function(err, data) {
if (err) {
console.error('sdk ERROR', err);
} else {
console.log('success');
}
});
};
createItem();
}
});
};
话虽如此,我想知道是否有人可以帮我找到一个成本 effective/efficient 的解决方案来检索包含相同电子邮件和 phone # 用户在表格.
您应该创建全局二级索引并将要查询的字段用作分区键。 table 可以有多个 GSI,最佳做法是只向索引添加必要的字段(这样在查询数据时使用较少的读取容量单位)。 您可以在官方 documentation
中阅读更多关于索引的信息