日期:2014-05-16  浏览次数:20423 次

Amazon DynamoDB应用—为table指定Provisioned Throughput

     本来想写一篇笔记,用来对整个Amazon DynamoDB作一个大概的描述的,后面在网上找了找,基本上都有了,再写的话对大家的帮助不大,所以就不记了,如果大家需要了解的话,我给大家推荐篇blog吧,当然,最详细的资料是在官方网站,但只有english。 http://www.programmer.com.cn/11081/ 

     下面我主要说下DynamoDB中的Provisioned Throughput,这是一个非常重要的功能设置,使用前,你得清楚的了解它是什么,具有哪些特点。

        当你在Amazon DynamoDB中申请创建一个table时,Amazon会针对该table提供一个Provisioned Throughput 输入框,让你指定该table的Throughput 值,下面,我将详细介绍下有关Provisioned Throughput的一些特点。 
 
        什么是Provisioned Throughput?为什么需要Provisioned Throughput?
       试想,你所创建的table是放在Amazon云平台上的某一台服务器上的,由于是云平台,而这台服务器不可能给你一个人用,还会提供给其他的用户使用(为了方便描述,我们称A吧),假如你突然想要访问你所创建的table,也就是从服务器上读写数据,而这时,很不巧的是用户A也在访问他所所创建的资源,而且访问量还很大,占用了该服务器几乎所有资源,如磁盘读写带宽什么的。此时,你就无法访问你的table,或者说访问效率很低。
      所以,为了解决以上出现的问题,Amazon DynamoDB提供了Provisioned Throughput机制。当你在创建一个table后,Amazon会根据该table上所指定的Provisioned Throughput大小为你保留一定的资源和读写容量来满足你读写表的低延迟性。
    
     怎么计算table的 Provisioned Throughput
 
      Provisioned Throughput包含了两个方面的度量设置,它们的单位分别是读容量单位和写容量单位:
     读容量单位: 对于table中的一个大小小于1KB的item,每秒钟执行1次强一致性读操作,或者每秒执行2次最终一致性读操作;
     写容量单位: 对于table中的一个大小小于1KB的item,每秒钟执行1次写操作;
     针对上面两个单位概念,我再详细描述下 : 假如你table中的item小于1KB,则每个读容量单位将会提供给你 1 read/秒 的容量,每个写容量单位将会提供给你 1 write/秒 的容量。 例如,你的item 是 512 bytes,你需要从table中每秒读取 100个item,则你需要为该table指定100个读容量单位; 假如你的table中的item大于1KB,你需要重新计算读容量单位数量。例如,如果table中国的item是1.5KB,你想要从table中每秒读取 100个item,此时,你需要为该table指定200 (2(向上调整到整数计算)*100)个读容量单位。
   
     最后有一点,有两点比较重要,得注意:
     1.  DyanmoDB是一个分布式系统,你保存在DynamoDB table中的数据会分布在多台机器上,table的 Provisioned Throughput并不是说你每台机器都有Provisioned Throughput所设的大小,每台机器为该table保留的Provisioned Throughput= Provisioned Throughput/N, N为机器的数量。
     2. 就是 你为一个table指定一定数据量的Provisioned Throughput,假如为N,并不能保证你读写表时,它一秒钟就能为你写或读出N个item,它只是针对该表,为你保留能读写N个item的容量以及资源,具体能不能读出N个item,还与你的table的设计的合理性以及访问的数据有关联。假如你读去的数据全部都集中在某一台机器上,那它的实际Provisioned Throughput仅仅是此台机器上为该table保留的Provisioned Throughput。这就是所谓的没有充分利用好 table的Provisioned Throughput,所以在设计DynamoDB的table时,一定得根据业务数据的访问特性,尽量将你要同时访问的数据均匀的分布在多台服务器上。