Amazon之前已经发布了SimpleDB 服务(http://aws.amazon.com/simpledb/),最近又发布了DynamoDB 服务(http://aws.amazon.com/dynamodb/),从Amazon的介绍来看,DynamoDB是加强版的SimpleDB服务,不限数据大小,可以自动scale,提供更好的性能等,而SimpleDB唯一超越DynamoDB的就是其index everything,所有的attribute都被索引到,不过用户可以利用DynamoDB自己做这件事情。
DynamoDB提供很多特性,下面分别写写看法:
Fast, Predictable Performance :这个仁者见仁,智者见智,大家都说自己性能好,而且性能跟业务关系密切,好不好只有用了才知道。
Easy Administration:这个就是RESTful API,很普遍了。
Built-in Fault Tolerance:这个是平台型服务必备的功能,一般都能做到Auto-restore,DynamoDB还做到了跨数据中心同步,属于比较高级的了。
Flexible:NoSql的共性
Strong Consistency, Atomic Counters:强一致性是当前NoSql的主流,看Dynamo的文章知道其本身保证的是KV的最终一致性,所以刚刚推出的这个Service应该是在其上加了增强一致性的限制。AtomicCounter应该是为了顺应web潮流退出来的,因为很多应用需要类似的统计,不过如果提供一个通用的transaction接口,用户是可以自己实现AtomicCounter的。Dynamo还提供了多种数据类型,不知道这些数据类型是在底层存储层解析的,还是类似HBase使用字节拼凑的,个人感觉,虽然拼凑稍微麻烦了一点,但是性能更好。
Cost Effective:这个不用说了,云计算的主要目的之一。
Secure:最初DynamoDB是为Amazon内部设计的,所以并没有提供任何安全安全相关的功能,可是一个服务要open,那就必须考虑安全了。其也可以跟强大的AWS Identity and Access Management结合。
Integrated Monitoring:通过AWS Management Console可以很容易的监控应用的状态,可以通过API拿到这些状态从而做一些决定,比如报警。
以上两点是我觉得Amazon做的非常好的两点,说道NoSql服务大家以为就是提供读写就行了,这当然重要,但远远不是全部,安全和内部状态监控也是非常大的一块,直接关系产品的生死,想想CSDN密码泄露,如果一个平台出现了类似问题,后果是不可想象的。
Amazon Elastic MapReduce Integration:这点也是Dynamo service的过人之处,现在online/offline结合的应用越来越多,但是之前的很多系统却无法提供,只能通过online数据拷贝到offline存储,再启动offline分析,时间差太大。当然,这个功能其实主要省去的是数据拷贝的时间和存储的成本,在online访问繁忙的时候,offline也是肯定做不了的。
再说说Dynamo service的数据模型,其提供Table/Item/Attribute的概念,对应到传统数据库,就是表/行/单元格。每个NoSql数据库都会试图向传统靠齐,这主要考虑的学习成本和迁移代价,不过迁移成本和代价显然不是提供行列的概念就能解决的,来看看Dynamo service对PrimaryKey的规则定义:
1. 可以只有一列作为primary key,则该列作为hash的输入,也就是用来分Partition
2. 可以由两列作为composite primary key,则第一列仍然作为hash输入,用来分partition,而第二列及其之后的列就可以提供range的查询了。如果想设置3列作为primary key呢?对不起,自己拼吧。
上面的这种模型要实现Scan不容易,Dynamo虽然提供了全局Scan,但是局部Scan就无法做到了,因为不知道第一列primary key的全局信息,这点比起HBase,BigTable这样的按range划分的系统功能就弱一些,不过问题似乎也不大,因为除非做全局性的分析,对于绝大部分应用来说,hash partition也够了。
还有一个值得关注的是Dynamo service将数据存储在固态硬盘上,这使得性能更好,其增加的成本也不算大,不过这是不是意味着固态硬盘的时代就要来临了?