Как правильно сканировать таблицу на DynamoDB? - PullRequest
0 голосов
/ 27 июня 2019

Как видно из заголовка, я хочу знать, какой способ сканирования таблицы в Amazon DynamoDB является наилучшим: поиск по другому полю, чем по первичному ключу.

Я искал об этом и много читал, но я нашел это решение для меня:

let DynamoDBServiceObj = new AWS.DynamoDB({apiVersion: '2012-08-10'});

let params = {
   ExpressionAttributeValues: {
       ':hash' : { S: req.param('wildcard') }
   },
   ProjectionExpression: 'directory',
   FilterExpression: 'qrCode = :hash',
   TableName: 'business'
};

let business = await DynamoDBServiceObj.scan(params).promise();
if (business.Count == 1) return res.ok();
else return res.view('404');

Это работает для меня, но я также читал, что выполнение сканирования на столе - плохая идея с точки зрения производительности и цены. Но как это сделать тогда?

  • Какой правильный способ сканирования таблицы, поиск по другому , чем первичный ключ?

  • В чем разница между DocumentClient и DynamoDB Object ?

  • Я всегда использую .get () для получения того, что я хочу на DynamoDB. Это хорошо или плохо практика ?

Я читаю эти посты и полагаю, что GSI - это решение, но я не понимаю, как оно работает.

1 Ответ

2 голосов
/ 27 июня 2019

Как вы сказали, сканирование таблицы не очень хорошая идея, и вы уже читали об этом.Я бы предложил две вещи.

  1. Используйте составной первичный ключ (если вы этого еще не сделали).Использование комбинации ключа разделения и ключа сортировки дает вам больше возможностей запрашивать (а не сканировать) вашу таблицу в зависимости от ваших шаблонов частого доступа.

  2. Если вам все еще нужно запросить таблицу поатрибут, отличный от тех, которые включены в ваш составной первичный ключ, вы правы, что GSI является решением.Вы можете проверить этот пост о том, как работает GSI. Выберите первичный индекс для Глобального вторичного индекса Вы можете рассматривать GSI как копию вашей таблицы с другим первичным ключом.

...