我喜欢带着目标来学习新知识。因此学习nodejs过程中,不喜欢只看枯燥的语法和概念,喜欢做一些有实际应用意义的事情。这样写出来的代码更加的接地气,同时边写边学可以避免学习疲劳,算是寓教于乐。
所以在第四节课中,我开始尝试在nodejs中使用DynamoDB。为什么选择DynamoDB呢? 一方面它是目前云环境中最具代表性的NoSql数据库,另外一方面它在国外实在非常火,估计国内也会慢慢升温。因此后下手不如先下手,现在就开始接触使用DynamoDB,免得以后被动。
在使用DynamoDB之前,我们先了解一下DynamoDB。
Amazon DynamoDB 是一项快速灵活的 NoSQL 数据库服务,适合所有需要一致性且延迟低于 10 毫秒的任意规模的应用程序。它是完全托管的云数据库,支持文档和键值存储模型。其灵活的数据模型和可靠的性能令其成为移动、Web、游戏、广告技术、物联网和众多其他应用的不二之选。
如果使用DynamoDB,那么就要再Amazon中创建DynamoDB实例。哎,这都是钱啊。 虽说学习都是要成本的, 但这个成本有点高。Amazon也想到了这个问题,因此提供了一个DynamoDB Local版本,用于开发和测试。 Amazon也算业界良心~
OK,那就使用DynamoDB Local版本吧。 在Amazon中是这样介绍DynamoDB Local的,请看下面:
DynamoDB Local版本是一个自由免费下载,可以在本地计算机中运行的DynamoDB服务工具。通过DynamoDB Local,开发人员可以在本地使用DynamoDB API脱离真实的DynamoDB Web服务来开发应用。但可以获取到几乎和使用真实DynamoDB Web服务相同的效果。开发人员可以在本地任意的创建表,修改数据。这些变化都会被DynamoDB Local记录并跟踪起来。有了DynamoDB,开发人员就可以完全脱离DynamoDB Web服务,甚至连网络连接都可以不需要了。
DynamoDB Local如此之好,但只能用于本地开发和测试用途。当应用发布上线之时,还是需要将数据库切换到真实的DynamoDB Web Service中。但仅仅是需要切换数据库服务而已,应用中的代码都不需要做任何变更。
DynamoDB Local介绍完了,我们看一下如何下载和使用DynamoDB Local。
点击这里下载DynamoDB Local。请注意:目前DynamoDB Local仅支持JRE6.X及其以上版本。如果读者当前机器JRE版本过低,呵呵,执行upgrade吧。
下载下来的DynamoDB Local是一个压缩包。解压后放在任意目录都可以(说是这样说,但还是建议放到一个比较好找的目录为好。免得时间一长,找不到。)
打开一个终端,或者CMD窗口。切换到解压后的目录。执行下面的命令,简单测试一下是否正常:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
正常情况下,会显示dynamodb服务已经绑定到本地的8000端口。如下图:
{ dynamodb_local_2013-12-12 } » java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb /d/workspaces/workspaces-nodejs/dynamodb_local_2013-12-12
2015-09-11 09:27:27.416:INFO:oejs.Server:jetty-8.1.12.v20130726
2015-09-11 09:27:27.549:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8000
或者是下面的输出:
Initializing DynamoDB Local with the following configuration:
Port: 8000
InMemory: false
DbPath: null
SharedDb: true
shouldDelayTransientStatuses: false
CorsParams: *
这取决于JDK版本。
DynamoDB可以接受其他命令参数,主要有以下几个:
-cors value
-dbPath value
-delayTransientStatuses
-help
-inMemory
-optimizeDbBeforeStartup
-port value
-sharedDb
如果想看DynamoDB的使用说明,可以执行java -jar DynamoDBLocal.jar -help来查看,如下图所示:
docker@docker-cloud-r720:~/team/andy/nodejs/src/dynamodb$ java -jar DynamoDBLocal.jar -help
usage: java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar
[-port ] [-inMemory] [-delayTransientStatuses]
[-dbPath ][-sharedDb] [-cors ]
-cors Enable CORS support for javascript against a
specific allow-list list the domains separated
by , use '*' for public access (default is
'*')
-dbPath Specify the location of your database file.
Default is the current directory.
-delayTransientStatuses When specified, DynamoDB Local will introduce
delays to hold various transient table and
index statuses so that it simulates actual
service more closely. Currently works only for
CREATING and DELETING online index statuses.
-help Display DynamoDB Local usage and options.
-inMemory When specified, DynamoDB Local will run in
memory.
-optimizeDbBeforeStartup Optimize the underlying backing store database
tables before starting up the server
-port Specify a port number. Default is 8000
-sharedDb When specified, DynamoDB Local will use a
single database instead of separate databases
for each credential and region. As a result,
all clients will interact with the same set of
tables, regardless of their region and
credential configuration. (Useful for
interacting with Local through the JS Shell in
addition to other SDKs)
但实际情况中发现,在JDK1.8中,执行help命令不显示。在其他JDK版本中,可以正常显示。暂不清楚是否和JDK有关系,但不影响DynamoDB的使用。
下面开始讲解各个参数:
-cors 用于运行javascript的跨域访问。如果启动用了这个参数,那么就必须提供allow参数。 默认情况下是*,即允许所有请求。
-dbPath
-delayTransientStatuses 启用DynamoDB延时操作。DynamoDB Local在本地执行时,几乎所有操作都是实时完成的,没有延时。但在实际的DynamoDB Web Service中,是存在一定延时的。因此如果需要更加接近实际DynamoDB的场景,就建议使用此项参数。但请注意,此项参数只能尽可能的接近实际情况,但不会百分百的模拟实际情况。
-help 没啥好说的,输出帮助信息。内容请见上面。
-inMemory DynamoDB Local可以将数据保存到本地,也可以将数据保存到内存中。上面的-dbpath就是保存到本地,这里就是保存到内存。至于区别嘛,就是一个可以持久化,一个没法持久化。呵呵,除此之外,没啥区别。
-optimizeDbBeforeStartup 如果启用了此项参数,就可以在DynamoDB Local启动时首选初始化底层数据库。背后的事情,就是将持久化的数据加载到服务中。因此使用此项参数时,必须同步使用-dbPath参数。
-port
-sharedDb DynamoDB默认为每个用户标示一组数据库文件。用户之间是隔离,无法访问的。但通过这个参数,就可以允许其他用户访问此用户的数据库。
好了,说完参数的用法,开发人员就可以愉快的使用DynamoDB了。
剩下的一点时间,简单说一下DynamoDB Local和实际的DynamoDB Web service有什么不同:
恩。好了,DynamoDB Local的基本情况讲解完毕了,下节课可以尝试在Nodejs中使用DynamoDB了。
OK,下课。起来~