Nodejs课堂笔记-第四课 Dynamodb为何物

本文由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-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 [email protected]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来查看,如下图所示:

[email protected]:~/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 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 <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,下课。起来~

时间: 2024-10-13 17:56:22

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

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

最近小半年一直在忙于研究Docker源码,也在写相关的分析文章.但受限于某些条件不能发布到网上,甚为郁闷.而最近几天,接到新的开发任务,需要使用nodejs.之前一直听说过nodejs,但从来没有真正使用过. 因此,在博客中就记录下学习过程,权当课堂笔记了. OK,第一节课开始了. 正所谓:工欲善其事,必先利其器.因此在google上面搜索一般,发现nodejs开发人员都比较推崇Web-storm这个IDE.并且说这款IDE是"js 开发神器".站在巨人们的肩膀上,可以少走不少弯路.因

法语学习笔记--第四课(家庭)

第四课 La famille --------------您--------------------- vous 您,你们 是 être je suis    nous sommes tu es    vous êtes il est    ils sont elle est    elles sont ------------------------ 有 avoir je -> j'ai    nous avons tu as     vous aveg il a    ils ont ell

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

本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 上节课,我们打造了一下IDE工具-web storm的显示界面.至少现在回到熟悉的sublime text界面了.这节课就开始正式学习nodejs了. 当我在web-storm创建了一个nodejs工程之后,首先浏览了一下工程结构,如下图所示: Nodejs 的工程结构还是较为简单的.各个目录功能基本都能猜个八九不离十.但在最下面的package.json文件引起了我的注意

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(四)

照例继续本周笔记.这次我没啥废话了... --------------笔记开始--------------- 投影矩阵与消灭矩阵 首先是上次没证的若干OLS性质.基本都是公式.我就照抄原来econometrics做的笔记了.权当复习了...对计量有兴趣的.线性代数还不错的,建议去看<Microeconometrics- Methods and Applications>(?A. Colin Cameron / Pravin K. Trivedi ). 先定义两个矩阵,这两个矩阵会在某种程度上s

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

目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据库连接两种方法和区别 连接池Pooling connections 创建 其它连接池配置选项 释放 使用示例 断线重连 其它... 简介和安装 Node.js与MySQL交互操作有很多库,具体可以在 https://www.npmjs.org/search?q=mysql  查看. 我选择了feli

Linux学习笔记 第四课

************************************************** mkdir,rmdir,rm,cp,mv,chown,chmod都有-v选项 可视化  都用了别名 提示,避免提示都用绝对路径 /bin/cp /bin/mv /bin/rm /bin/chown /bin/chmod ************************************************** 一.目录相关命令(mkdir.rmdir.rm.cp.mv) 二.文件相关命

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

sailsjs框架用了一段时间了,感觉如果功能复杂了,非常难以处理,想用一下单元测试,看是否能解决问题. sailsjs的官方文档使用的是mocha,我搜索了一些资料,主要参考了朴灵的<深入浅出nodejs>的单元测试一章.sailsjs的官方文档以及github上的一个例子https://github.com/bredikhin/sailsjs-mocha-testing-barrels-fixtures-example. 1)系统环境如下 Windows 8.1 X64 nodejs 0.

Linux基础学习笔记-第四课:NANO、开关机

nano: 调出帮助:F1或者Ctrl+G ^代表Ctrl,M代表Alt 关机:应有的步骤 检查系统使用状态: who :检查在线用户 netstat -a:检查网络连接 ps -aux :检查后台程序执行情况 通知在线用户关机时间:shutdown命令 数据写入硬盘:sync 关机或重启:shutdown / restart / halt / poweroff / init 0 shutdown -h now :立即关机 shutdown -h 20:25 : 20:25分关机 shutdow

课堂笔记(四)

同 行 评 审 1. 同行评审:(Peer Review)是一种通过作者的同行来确认缺陷和需要变更区域的检查方法.需要进行同行评审的特定产品在定义项目软件过程的时候被确定并且作为软件开发计划的一部分被安排了进度. · 需要前期准备.计划和时间进度表 · 越早越好 1. 同行评审的作用:· 早期发现缺陷:· 去除缺陷:· 降低成本:· 提高质量. 2. 同行评审的类型:· 正规检视:(Inspection)最严格,要求有规范的流程,参 加者经过正式培训: · 技术评审:(Technique Rev