GithubHelp home page GithubHelp logo

hhy5277 / node-dynamodb Goto Github PK

View Code? Open in Web Editor NEW

This project forked from totemstech/node-dynamodb

0.0 2.0 0.0 373 KB

DynamoDb Driver for Node.js

License: MIT License

Makefile 0.30% JavaScript 99.70%

node-dynamodb's Introduction

Basics

A Simple, efficient and complete DynamoDB driver for Node.js, with:

  • Syntactic sweeteners/mapping to handle Amazon DynamoDB's JSON format in NodeJS
  • Efficient and transparent authentication and authentication refresh using Amazon STS
  • Integrated retry logic similar to Amazon's own PhP, Java libraries
  • Currently in production in multiple independent organizations with more than 80 write/s, 60 read/s
  • Support for all exposed DynamoDB operations

Discussion Group: http://groups.google.com/group/node-dynamodb

Usage

var ddb = require('dynamodb').ddb({ accessKeyId: '',
                                    secretAccessKey: '' });

Available options for the constructor are the following:

  • accessKeyId: the AWS AccessKeyId to use
  • secretAccessKey: the AWS SecretAccessKey associated
  • endpoint: the Region endpoint to use (defaults to: dynamodb.us-east-1.amazonaws.com)
  • agent: The NodeJS http.Agent to use (defaults to: undefined)
  • sessionToken: forced temporary session credential (defaults to: undefined)
  • sessionExpires: forced temeporary session credential (defaults to: undefined)

CreateTable

ddb.createTable('foo', { hash: ['id', ddb.schemaTypes().string],
                         range: ['time', ddb.schemaTypes().number] },
                {read: 10, write: 10}, function(err, details) {});

// res: { "CreationDateTime": 1.310506263362E9,
//        "KeySchema": { "HashKeyElement": { "AttributeName": "AttributeName1",
//                                           "AttributeType": "S"},
//                       "RangeKeyElement": { "AttributeName": "AttributeName2",
//                                            "AttributeType": "N"} },
//        "ProvisionedThroughput":{ "ReadCapacityUnits": 5,
//                                  "WriteCapacityUnits": 10 },
//        "TableName":"Table1",
//        "TableStatus":"CREATING" }

ListTables

ddb.listTables({}, function(err, res) {});

// res: { LastEvaluatedTableName: 'bar',
          TableNames: ['test','foo','bar'] }

DescribeTable

ddb.describeTable('a-table', function(err, res) {});

// res: { ... }

PutItem

// flat [string, number, string array or number array] based json object
var item = { score: 304,
             date: (new Date).getTime(),
             sha: '3d2d6963',
             usr: 'spolu',
             lng: ['node', 'c++'] };

ddb.putItem('a-table', item, {}, function(err, res, cap) {});

GetItem

ddb.getItem('a-table', '3d2d6963', null, {}, function(err, res, cap) {});

// res: { score: 304,
//        date: 123012398234,
//        sha: '3d2d6963',
//        usr: 'spolu',
//        lng: ['node', 'c++'] };

DeleteItem

ddb.deleteItem('a-table', 'sha', null, {}, function(err, res, cap) {});

UpdateItem

ddb.updateItem('a-table', '3d2d6963', null, { 'usr': { value: 'smthg' } }, {},
               function(err, res, cap) {});

ddb.consumedCapacity();

BatchGetItem

ddb.batchGetItem({'table': { keys: ['foo', 'bar'] }}, function(err, res) {
    if(err) {
      console.log(err);
    } else {
      console.log(res);
    }
 });

// res: { ConsumedCapacityUnits: 1.5,
          items: [...] };

BatchWriteItem

//ddb.batchWriteItem(PutRequest, DeleteRequest, cb)
ddb.batchWriteItem({'table': [item1, item2]}, {'table': ['foo', 'bar']}, function(err, res) {
    if(err) {
      console.log(err);
    } else {
      console.log(res);
    }
 });

// res: { UnprocessedItems: { ... } };

Query

ddb.query('test', '3d2d6963', {}, function(err, res, cap) {...});

// res: { count: 23,
//        lastEvaluatedKey: { hash: '3d2d6963' },
//        items: [...] };

Scan

ddb.scan('test', {}, function(err, res) {
    if(err) {
      console.log(err);
    } else {
      console.log(res);
    }
 });

// res: { count: 23,
//        lastEvaluatedKey: { hash: '3d2d6963' },
//        items: [...] };

More complete usage can be found in the examples directory

Run the Tests

Put in your environment:

export DYNAMODB_ACCESSKEYID=YOURACCESSKEYID
export DYNAMODB_SECRETACCESSKEY=YOURSECRETKEYID
export DYNAMODB_TEST_TABLE1=test

Make sure you have a test table created and available with sha as a hash key (string). Make sure to select Hash as the Primary Key Type. Then run:

make test

If you are getting one of these errors:

  • User: ... is not authorized to perform: dynamodb:PutItem on resource you need to add AmazonDynamoDBFullAccess to the user in IAM policy editor.

License

Distributed under the MIT License.

Contributors

@karlseguin (Karl Seguin)
@imekinox (Juan Carlos del Valle)
@phstc (Pablo Cantero)
@cstivers78 (Chris Stivers)
@garo (Juho Mäkinen)
@tax (Paul Tax)
@alexbosworth (Alex Bosworth)
@jimbly (Jimb Esser)
@n1t0 (Anthony Moi)
@krasin
@aws-ew-dev

node-dynamodb's People

Contributors

alexbosworth avatar alexgorbatchev avatar aws-ew-dev avatar benvan avatar cstivers78 avatar glaciannex avatar imekinox avatar jimbly avatar krasin avatar lloydwatkin avatar tax avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.