Tag: amazon dynamodb

在sorting时stream式传输大数据

我有大量的数据,因此我不能把它全部放在内存中,而且总是出现内存不足的错误。 显然其中一个解决scheme将使用Node.JS中的stream; 但是stream式传输是不可能的(就我所知),sorting是我应用于数据的function之一。 是否有任何algorithm可能分而治之algorithm,我可以使用stream和sorting的组合(这是我的function之一,我的数据?)

KeyConditionExpression错误和空错误响应

我使用Lambda作为后端,并且即时执行所有的DynamoDB操作。 我有一个用户表Users ,我想通过它的散列键Username来查询它 在我的paramsvariables上使用KeyConditionExpression语句,但出现以下错误: 有2个validation错误:\ n * MissingRequiredParameter:Missing>必要的键'KeyConditions'中的参数\ n * UnexpectedParameter:Unexpected> key'KeyConditionExpression'in params 所以是的,我尝试了以下遗留声明: var userQuery = { TableName:"Users", KeyConditions:{ Username:{ ComparisonOperator:'EQ', AttributeValueList:[{S:"some_username"}] } } }; 出于某种原因,我得到查询callback空的错误,看起来像这样: dynamo.query(userQuery,function(err,data){ if(err) console.log("error "+JSON.stringify(err,null,2)); else console.log("pass "+JSON.stringify(data,null,2)); }); 我已经从字面上尝试了一切,变得绝望了。 我似乎无法查询任何表,但我可以扫描和使用putItem没有问题。 我的策略也有查询参数。 { "Version": "2012-10-17", "Statement": [ { "Sid": "my_Stmt_num", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], […]

在哪里调用DynamoDB的实例? 每次请求一次或一次?

我有麻烦在哪里创build我的应用程序多个用户与应用程序交互的dynamodb实例。 我应该在程序加载并创build客户端时创build它,还是应该将其放入到我的路由中,以便对数据库进行调用,因此对login路由的每个请求都将创build一个实例? var express = require('express'); var app = express(); var AWS = require('aws-sdk'); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); //Is this the right place. Outside of where the database call is being made var dynamodbDoc = new AWS.DynamoDB.DocumentClient(); app.post('/login', function (req, res) { //OR should I create a new instance of AWS.DynamoDB.DocumentClient() here every […]

如何从AWS DynamoDB – JS lambda中的函数返回查询结果

我有一个愚蠢的问题,让我疯狂。 我有一个AWS lambda函数,可以调用Dynamo db。 我想有ddb.Scan操作到一个函数得到结果,然后将其传递给事件,但我不能返回函数内的结果… var aws = require('aws-sdk'); var ddb = new aws.DynamoDB(); function getName(userid) { ddb.scan({ TableName: "Users", ScanFilter: { "userid": { "AttributeValueList": [ {"S": userid} ], "ComparisonOperator": "EQ" } } }, function (err, data) { return data.Items[0].username; }); }; exports.handler = function (event, context) { var userid= '4vwe6jd56es59q'; var username = getName(userid); […]

在Dynamo dB的获取操作中,“在参数中缺less必需的键”键

我正在写node.js中的lambda函数来从dynamodB中获取项目。 表是employee,其中emo_Id是分区键。 下面是我写的代码片段: var table = "Employee_Test"; var emp_Id=event.emp_Id; var emp_Name=event.emp_Name; var params = { TableName: table, KeyConditionExpression: "#eId = :Id", ExpressionAttributeNames:{ "#eId": "emp_Id" }, ExpressionAttributeValues: { ":Id":emp_Id }} 我得到的错误是:“消息”:“在参数”,“代码”:“MissingRequiredParameter”中缺less所需的密钥'钥匙', 我知道这个错误的解决方法是在代码中添加:Key:{“emp_Id”:emp_Id}。 但是,如果我必须查询在特定date之后join的员工,那么我不能提供emp_Id作为参数。 在AWS发行说明中,我发现我们可以禁用参数validation, https://aws.amazon.com/releasenotes/6967335344676381我试过这个,但是这也不起作用。 有人可以帮忙吗? 谢谢Shweta

DynamoDB – 如何在一次更新中创build映射并为其添加属性

我想创build一个新的地图,如果它不存在,然后添加一个属性到该地图。 像这样的东西: SET #A = if_not_exists(#A, :emptyMap), #A.#B = :somevalue 但是,上述给我的错误说Two document paths overlap with each other 我唯一想做的事情是做两个更新,一个创build任何空的地图,然后再设置属性。 有一种方法可以在单个更新中完成吗? 更新 另一个用例是创build包含其他地图的地图。 目前我能想到创build以下的唯一方法是3个独立的更新调用来创build地图,如果有必要,然后另一个更新调用来添加属性: { Entities: { A: { B: {} } }, } 一定会有更好的办法。

我如何在我的node.js应用程序中使用AWS DAX

我有一个sails.js应用程序,我已经使用mongodb作为持久层和redis作为caching。 不过,我想转移到AWS DAX,以便我可以在caching中保存大型数据集,并且我想使用dynamodb作为mongodbreplace。 sails.js有dynamodb水线适配器但我不知道如何在我的应用程序上使用AWS DAX 。 我发现在aws dynamodb文档中的 java的一个例子但不知道如何在我的node.js应用程序上使用。 非常感谢您提供任何帮助。

按优先级和组值sorting结果,然后筛选结果

这是我的DynamoDB当前数据: 我的目标是创build一个查询过滤结果在组集(像“默认”),然后按优先级进行sorting,然后筛选结果为那些login到== true和状态==空闲。 在SQL中,它会是这样的 SELECT * FROM userstatustable WHERE group == "default" AND loggedIn == true AND status == "idle" ORDER BY priority DESC LIMIT 1 我将如何创build一个查询来做到这一点? 以下是我对DynamoDB表的serverless.yml文件描述。 userStatusTable: #This table is used to track a users current status. Type: AWS::DynamoDB::Table Properties: TableName: ${self:custom.userStatusTable} AttributeDefinitions: #UserID in this case will be created once and constantly […]

在dynamodb预期的约束,以防止重复

我是DynamoDB的新手,我无法在node.js和DynamoDB中使用以下scheme: 我想插入一个用户在用户表中,但我不希望这个成功,如果用户的电子邮件地址已经存在。 以下代码能够成功插入新用户: var item = { id: { S: uuid.v4()}, email: { S: 'my@email.com' } }; dynamodb.putItem({ TableName: 'user', Item: item, Expected: { email: { Exists: false } } }, function (err, data) { if (err) { return callback(err); } callback(); }); 我认为预期值会通过引发ConditionalCheckFailedException错误来防止用户表中的重复电子邮件地址。 不是这种情况; 上面的代码将一致插入重复的电子邮件。 我尝试添加“ID”作为额外的预期字段,但这并没有改变行为。 当我修改代码的时候,我得到一个ConditionalCheckFailedException,所以ID是固定的,而不是生成的UUID; var item = { id: { S: […]

parsingDynamoDB请求

我的目标是recursion地从dynamo.getItem方法parsingDynamoDB请求。 不幸的是,我在DynamoDB SDK for Node.js中找不到类似的方法。 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html 我正在寻找从结果中删除types的有效方法。 在DynamoDB中,键是属性的单字母名称,如“N”,“S”,“M”。 这些types的描述: N means DynamoDB Number type S means dynamoDB String type M means DynamoDB Map type (object with properties) 目前的JSON结构是: { "id":{ "N":"4" }, "number":{ "N":"1" }, "data":{ "M":{ "aaa":{ "S":"AAA" }, "lv2":{ "M":{ "lv3":{ "M":{ "ccc":{ "N":"111" } } }, "bbb":{ "S":"BBB" } } } } […]