NoSQL 数据库:DynamoDB 介绍
jopen
12年前
DynamoDB 是 Amazon最新发布的 NoSQL 产品。DynamoDB是一个性能好、可靠高且具有可扩展性的 NoSQL 云数据库服务,DynamoDB集15年分布式非关系性数据库开发之精粹,又通过内部使用考验,是AWS团队精心打造的产品。
DynamoDB有以下几个特性:
- 稳定的性能保证。为了保证高性能,DynamoDB采用固态硬盘(SSD)进行存储,对于一般的请求,DynamoDB在十毫秒内就可以完成,而且处理请求的速度不会随着数据量的增加而减慢。
- 读/写流量限制预设(Provisioned Throughput)。这个概念和我们经常接触的按带宽收费非常相像,用户必须指定对数据库的读/写带宽,Amazon会按用户设置的读/写带宽收费。但与传统的带宽收费不同,用户可以随时通过控制台或者API更改数据库的读/写流量的限制。
- 自动扩容。DynamoDB不会对用户的数据规模大小做任何限制,后台会默默地把用户的数据分布到各个机器上去。
- 强一致性。用户可以通过参数指定要读的数据是否需要一致性。这里需要注意的是,如果读的数据全是要求强一致性的话,那么在设置读流量上限时需要设置成实际读流量的两倍。
- 完全分布式,无中心化架构。一个表上的数据可以分布到几百台机器上。
- Schema free。都叫NoSQL了,Schema必须free。
- 和Amazon Elastic MapReduce深度整合。在EMR上可以调用DynamoDB的数据进行MapReduce,并将计算结果保存到S3,同时也可以用EMR对DynamoDB做备份。
- 容灾。容错、完善的监控、安全、物美价廉、管理方便,这些都是云服务应该做到的。
- 大家第一眼看到Provisioned Throughput时,都会觉得这个概念比较别扭。为什么要给自己限制读/写流量呢?但仔细分析之后大家会发现Provisioned Throughput是迫不得已的做法,而且前三个特性其实也与之有着不可分割的关联。
- DynamoDB是一个共享型的数据库云服务。所谓共享型的数据库云服务,是指一台机器上的CPU、内存及磁盘资源会给多用户使用。共享型服务最大的问题在于资源的公平性,如何保证一个用户对资源的使用不会影响到其他用户?例如,用户A在DynamoDB上保存了10GB的数据,假设这10GB 数据全部保存在同一台机器上,而且这台机器的读性能只有1GB/秒。此时,如果用户每秒要读1GB数据,必然会影响到其他用户对同台机器上的数据访问,因为一台机器的吞吐量是固定的。这样就没有办法做到每个用户每个请求都有稳定的性能保证。正如各种MySQL共享服务会根据用户预购买的数据空间来限定每秒的请求数来解决资源公平性一样,DynamoDB利用Provisioned Throughput来解决资源公平性。如果用户的读/写请求量变大,就得提高读/写请求的带宽上限,付更多的钱,DynamoDB同时会根据用户购买的带宽将数据分散到更多的机器上。目前,单表最多支持10000个1KB读/写(相当于10MB/s的读写),单用户最多20000个1KB读/写(相当于 20MB/s的读写)。如果需求增加,则需要填表单独申请。同时还有更多详细的规定,具体详见用户手册(其实所有的规定都是受到资源公平性以及后台具体实现的约束)。