查询dynamodb shell中的最后10个项目

时间:2016-03-13 15:14:23

标签: javascript node.js amazon-dynamodb

我正在学习Dynamodb,为此我在http://localhost:8000/shell

安装了shell附带的本地服务器

现在..我创建了下表:

var serverUpTimeTableName = 'bingodrive_server_uptime';
var eventUpTimeColumn = 'up_time';

var params = {
    TableName: serverUpTimeTableName,
    KeySchema: [ // The type of of schema.  Must start with a HASH type, with an optional second RANGE.
        { // Required HASH type attribute
            AttributeName: eventUpTimeColumn,
            KeyType: 'HASH',
        },
    ],
   AttributeDefinitions: [ // The names and types of all primary and index key attributes only
        {
            AttributeName: eventUpTimeColumn,
            AttributeType: 'N', // (S | N | B) for string, number, binary
        },
    ],
    ProvisionedThroughput: { // required provisioned throughput for the table
        ReadCapacityUnits: 2,
        WriteCapacityUnits: 2,
    }
};
dynamodb.createTable(params, callback);

所以我创建了一个只有一个名为up_time的哈希键的表,它实际上是表中唯一的项目。

现在我想获取最后10次插入的时间。

到目前为止,我创建了以下代码:

var serverUpTimeTableName = 'bingodrive_server_uptime';

var eventUpTimeColumn = 'up_time';

var params = {
    TableName: serverUpTimeTableName,
    KeyConditionExpression: eventUpTimeColumn + ' != :value',
    ExpressionAttributeValues: {
        ':value':0
    },
    Limit: 10,
    ScanIndexForward: false
}
docClient.query(params, function(err, data) {
if (err) ppJson(err); // an error occurred
else ppJson(data); // successful response

});
好的......很少有事情需要注意:

  1. 我真的不需要KeyCondition。我只想要最后10个项目,所以我使用Limit 10作为限制,ScanIndexForward:false作为逆序。
  2. 哈希键的键表达式不支持
  3. !=NE。似乎我必须在查询中使用某种索引..对此感到困惑。
  4. 所以..非常感谢有关这个问题的任何信息。

1 个答案:

答案 0 :(得分:4)

一些现代术语:Hash现在称为Partition,Range现在称为Sort。
谢谢亚马逊。

您需要了解Query - ing是对哈希键的操作。要启动查询,您必须提供哈希键。由于您的表的主键只是哈希键(而不是哈希值+范围),因此您无法查询它。您只能Scan才能查找商品。扫描并不需要任何有关表中项目的知识。

继续......当你说"最后10项"你实际上想要一个条件,因为你正在过滤日期属性,你还没有定义任何索引,所以你不能让引擎为你提供10个结果。如果它是范围键元素,您可以通过使用向后索引(ScanIndexForward:false)查询前10个有序元素 - 再次,而不是您的模式。

在您当前的表格中 - 您究竟想要做什么?您目前只有一个属性也是哈希键,所以10个项目看起来像(没有订单,没有重复):

12312
53453
34234
123
534534
3101
11

你可以将它们移动到范围键并拥有一个全局哈希键" stub"只是为了启动您正在进行的查询,但是由于您拥有热门分区而无法获得最佳性能,因此违反了DynamoDB的指导原则。目前还不确定这会让你烦恼,但值得一提的是。