DynamoDB是AWS提供的一套Serverless数据库,理论上具有极好的伸缩性,无需开发人员关心分库分表。
但是它和Mysql、PostgreSQL等数据库不同,它本身是个云数据库,无法在开发者本地运行。因此开发者在开发过程中如何连接数据库,就成为了一个问题。
如果能在本地运行DynamoDB,开发的时候会方便很多。
AWS提供了一套可以本地运行的 mini 版本,DynamoDB Local,你可以在这个网址中查看它的介绍以及下载它:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html
DynamoDB Local安装起来还是比较麻烦,需要jre,对于前端开发者来说,有个更方便使用的基于JS的版本:dynalite https://www.npmjs.com/package/dynalite。
安装dynalite:
$ npm i -g dynalite
启动 dynalite:
$ dynalite
它会默认监听4567端口,也可以使用--port
选项改变默认端口
本地的DynamoDB启动之后,还需要配置下程序中的连接参数。
如果使用的是 aws-sdk,可以用如下的方式:
var AWS = require('aws-sdk')
var dynamo = new AWS.DynamoDB({endpoint: 'http://localhost:4567'})
dynamo.listTables(console.log.bind(console))
如果是用的 dynamoose,则可以用这样的配置:
import * as dynamoose from 'dynamoose'
dynamoose.local('http://localhost:4567')
顺便提一下,推荐使用dynamoose来操作DynamoDB,避免直接与DynamoDB繁琐的查询语法打交道,提高编程效率。
如果在使用serverless-offline本地运行代码,则还可以加入如下的判断,在本地模式自动使用本机的数据库:
import * as dynamoose from 'dynamoose'
if (process.env.IS_OFFLINE) {
// 如果是离线模式,就设置下DynamoDB使用本地连接
dynamoose.local('http://localhost:4567')
}
现在本地的数据库搭建和连接都有了,还差一个管理工具。
万能的npm仓库中有一个名为 dynamodb-admin 的包,可以用来做这个事。
https://www.npmjs.com/package/dynamodb-admin
用法如下:
$ npm install -g dynamodb-admin
# For Windows:
$ export DYNAMO_ENDPOINT=http://localhost:4567
$ dynamodb-admin
# For Mac/Linux:
$ DYNAMO_ENDPOINT=http://localhost:4567 dynamodb-admin
它会提供一套还算美观的界面,具备增删改查的能力。