本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!

  我喜欢带着目标来学习新知识。因此学习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-- }  » java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb          /d/workspaces/workspaces-nodejs/dynamodb_local_2013--
-- ::27.416:INFO:oejs.Server:jetty-8.1..v20130726
-- ::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 <port-no.>] [-inMemory] [-delayTransientStatuses]
[-dbPath <path>][-sharedDb] [-cors <allow-list>]
-cors <arg> Enable CORS support for javascript against a
specific allow-list list the domains separated
by , use '*' for public access (default is
'*')
-dbPath <path> 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 <port-no.> Specify a port number. Default is
-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 <arg>  用于运行javascript的跨域访问。如果启动用了这个参数,那么就必须提供allow参数。 默认情况下是*,即允许所有请求。

  -dbPath <path> 设定存放数据库数据文件的路径。如果不指定,那么就使用当前目录存放数据。请注意:此选项和--inMemory冲突,不可同时使用

-delayTransientStatuses 启用DynamoDB延时操作。DynamoDB Local在本地执行时,几乎所有操作都是实时完成的,没有延时。但在实际的DynamoDB Web Service中,是存在一定延时的。因此如果需要更加接近实际DynamoDB的场景,就建议使用此项参数。但请注意,此项参数只能尽可能的接近实际情况,但不会百分百的模拟实际情况。

  -help 没啥好说的,输出帮助信息。内容请见上面。

  -inMemory DynamoDB Local可以将数据保存到本地,也可以将数据保存到内存中。上面的-dbpath就是保存到本地,这里就是保存到内存。至于区别嘛,就是一个可以持久化,一个没法持久化。呵呵,除此之外,没啥区别。

  -optimizeDbBeforeStartup 如果启用了此项参数,就可以在DynamoDB Local启动时首选初始化底层数据库。背后的事情,就是将持久化的数据加载到服务中。因此使用此项参数时,必须同步使用-dbPath参数。

  -port <port-no.> 默认端口是8000.如果8000被占用了,就可以通过这个参数绑定其他端口。

  -sharedDb  DynamoDB默认为每个用户标示一组数据库文件。用户之间是隔离,无法访问的。但通过这个参数,就可以允许其他用户访问此用户的数据库。

  

  好了,说完参数的用法,开发人员就可以愉快的使用DynamoDB了。

  

  剩下的一点时间,简单说一下DynamoDB Local和实际的DynamoDB Web service有什么不同:

  •   DynamoDB Local不判别用户注册区域和AWS账户有效性
  •   DynamoDB Local没有吞吐量限制。API中的相关参数都会被忽略。例如,用户可以无限制的使用CreateTable,一天之内无限的UpdateTable。所有的吞吐量限制在Local模式都会被忽略。
  •   DynamoDB的执行速度,仅仅与本地机器配置有关。即便采用了延时参数,那么有些操作也会比实际DynamoDB Web Service要快得多。例如CreateTable和DeleteTable几乎都是瞬间完成,数据库中的表几乎都是ACTIVE状态。只有当UpdateTable影响到全局二级索引时,会有短暂的CREATING和DELETING状态,很快就会恢复为ACTIVE状态。而在实际DynamoDB服务中,这些都会消耗大量的时间。
  •   在DynamoDB Local模式中,会有很强的读一致性。这是因为所有本地操作都是在本地完成的,几乎可以忽略脏数据的影响。除非用户的机器性能有点低....
  •   Local模式不记录占用的容量。如果API要求返回此值,那么就是nulls
  •   Local模式也不记录项目记录信息。 如果API要求返回,那么也是nulls
  •   在实际的DynamoDB Web Service中,每次只会返回1MB的数据。在Local模式,同样存在此项限制。但在查询索引时有一些区别,DynamoDB Web Service仅计算Key和Value所占数据量,而Local会计算所有项目数据。
  •   在使用DynamoDB数据流时也有区别:DynamoDB Web Service所创建的分片会受到表分区的影响。而在Local模式中,不存在表分区。所有的分片都是临时,因此在Local模式中,程序不应过分依赖分片结果。

  

  恩。好了,DynamoDB Local的基本情况讲解完毕了,下节课可以尝试在Nodejs中使用DynamoDB了。

  OK,下课。起来~

Nodejs课堂笔记-第四课 Dynamodb为何物的更多相关文章

  1. Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 因为一直做Linux有关的开发工作,所以不习惯在Windows平台编译和测试 ...

  2. Nodejs课堂笔记—第一课:修改Webstorm的默认主题

    最近小半年一直在忙于研究Docker源码,也在写相关的分析文章.但受限于某些条件不能发布到网上,甚为郁闷.而最近几天,接到新的开发任务,需要使用nodejs.之前一直听说过nodejs,但从来没有真正 ...

  3. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  4. Nodejs课堂笔记-第二课 package.json的作用

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 上节课,我们打造了一下IDE工具-web storm的显示界面.至少现在回到 ...

  5. Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)

    目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...

  6. NodeJs学习笔记(四)---单元测试

         sailsjs框架用了一段时间了,感觉如果功能复杂了,非常难以处理,想用一下单元测试,看是否能解决问题.     sailsjs的官方文档使用的是mocha,我搜索了一些资料,主要参考了朴灵 ...

  7. IP通信基础课堂笔记----第四章(重点中的重点)

    IPv4编址方法 一个IPv4地址可表示为一个32位的二进制数. IP地址前面的网络部分表示一个网段,后面部分(主机位)表示这个网段上的一台设备. 常用IP地址分为四类:A.B.C.D. 每类的网络地 ...

  8. Nodejs学习笔记(四)—与MySQL交互(felixge/node-mysql)

    简介和安装 Node.js与MySQL交互操作有很多库,具体可以在 https://www.npmjs.org/search?q=mysql  查看. 我选择了felixge/node-mysql,用 ...

  9. 【04】【转】Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)

    目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...

随机推荐

  1. Angular 学习笔记——ng-disable

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  2. URL相对路径和URL绝对路径

    经常在页面中引用图片,html页面等,自己常常弄错相对路径和绝对路径,今天写下此文总结一下.    直接举例说明吧. 在 D:\例子\html下有这么几个文件和文件夹     1.若引用的资源和本身在 ...

  3. php 处理 form 表单提交多个 name 属性值相同的 input 标签

    一 问题 在公司的开发过程中,遇到了一个问题:如何处理 form 表单提交了多个 name 属性值相同的 input 标签?源码如下(源码是在 form 表单之中的): <!--{loop $a ...

  4. oracle经常使用函数(1)

    1.返回与指定的字符相应的十进制数 select ascii('A') A,ascii('z') a,ascii('12') 一打,ascii(' ') kg from dual; 2.返回与指定十进 ...

  5. ubuntu安装rpm格式软件包

    转载自:http://os.51cto.com/art/200708/53942.htm ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb.用alien转 ...

  6. ubuntu 安装时出错 sudo apt-get update Reading package lists… Error

    安装过程出错 首先出现问题sudo apt-get updateReading package lists… Error!E: Encountered a section with no Packag ...

  7. maven依赖json-lib失败

    © 版权声明:本文为博主原创文章,转载请注明出处 项目中需要使用到JSONArray,因此到将json-lib的依赖加入pom.xml中,但是一直下载失败 <dependency> < ...

  8. Hibernate学习之二级缓存

    © 版权声明:本文为博主原创文章,转载请注明出处 二级缓存 - 二级缓存又称“全局缓存”.“应用级缓存” - 二级缓存中的数据可适用范围是当前应用的所有会话 - 二级缓存是可插拔式缓存,默认是EHCa ...

  9. 篇一、安装配置Android Studio

    系统:Mac 10.10 Java JDK:官方JDK1.8 IDE:Android Studio 1.2 Android SDK:24.2 模拟器:genymtion 安装 Mac版本的Androi ...

  10. nginx的proxy_pass到$host的问题

    今天在配置一个location的时候,希望使用一个变量如$host来指示nginx代理: location /test/ { proxy_pass http://$host; } 如你想不到,这个配置 ...