Поиск значения DynamoDB перед вставкой с использованием "put" - PullRequest
0 голосов
/ 06 августа 2020

Я пишу маршруты REST API для регистрации пользователей в таблице динамо-базы данных, перед вставкой каждой записи я хотел бы выполнить быстрое сканирование всех записей в таблице пользователей, чтобы предотвратить дублирование.

какой метод Будет ли наиболее подходящим в таких случаях запрос или сканирование, или быстрая и экономичная альтернатива? и как я могу реализовать этот лог c в моем коде


AWS.config.update(config.aws_remote_config);
docClient = new AWS.DynamoDB.DocumentClient();
const tableName = 'user';

]router.post(
  '/',
  [
    check('name', 'Name is a required field').not().isEmpty(),
    check('email', 'Please include a valid email').isEmail(),
    check(
      'password',
      'please enter a password with 6 or more characters'
    ).isLength({ min: 6 }),
  ],

  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }
    const { name, email, password } = req.body;
    try {

      //saving in dynamo db
      let awsuser = {
        _id: uuidv4(),
        name: name,
        email: email,
        password: await bcrypt.hash(password, salt),
        createdOn: moment().unix(),

      };
//****
      docClient.put(
        {
          TableName: tableName,
          Item: awsuser,
        },
        async (err, data) => {
          if (err) {
            console.log(err);
            return res.status(err.statusCode).send({
              message: err.message,
              status: err.statusCode,
            });
          } else {
            return res.status(200).send(awsuser);
          }
        }
      );
    } catch (err) {
      console.log(err.message);
      //req.status(500).send('server error');
    }
  }
);

module.exports = router;

1 Ответ

0 голосов
/ 06 августа 2020

Сканирование неэффективно, остается запрос.

Однако для запроса потребуется, чтобы у вас был глобальный вторичный индекс (GSI), определенный по электронной почте. Но у GSI есть свой отдельный набор затрат на хранение и использование.

Лично я бы подумал об использовании электронной почты в качестве идентификатора и первичного ключа таблицы, а не UUID. Тогда вам не нужен GSI, и вы можете проверить существующую запись с помощью только GetItem ().

...