云数据库一词来自英文“cloud database”(简称cloudDB),又称“database for the cloud”。在正式发表的文献上最早见于2008年。
云数据库服务一词来自英文“cloud database-as-a-service”,又称“database-as-a-service for the cloud”。在正式发表的文献上最早见于2011年。
继2006年亚马逊(Amazon)公司推出云计算平台EC2后,很多公司纷纷推出云计算平台,例如,Aamzon的AWS、微软的Windows Azure和谷歌(Google)的AppEngine等。很多运行于这些云计算平台的应用程序需要访问数据库。传统数据库是针对物理机开发和优化的,而云计算平台则是基于虚拟机,将数据库部署在虚拟机上需要解决很多挑战,早期的尝试有Amazon在2008年开发的SimpleDB 。早期解决的主要问题是大规模用户的并发访问延迟和大规模系统的可用性,因此,这一时期开发的云数据库主要是基于键值模型的NoSQL数据库。
由于很多应用对事务和关系模型的需求,在2009年左右,学术界和产业界都投入很大力量来开发基于关系模型的云数据,学术界的尝试有加州大学圣塔芭芭拉分校(UCSB)的ElasTrasS (2009)和麻省理工学院(MIT)的Relational Cloud (2011)等,产业界的系统有Google的MegaStore (2008)和微软的SQL Azure Database (2009)等。之后,各大云平台提供商和数据库厂商相继推出丰富的云数据库产品。
①良好的弹性。能够平滑地支持访问量的突变,包括突增和突减。
②动态可扩展。可以满足不断增加的数据存储和访问需求。
③高可用性。能够对用户很好地隐藏节点失效等故障,提供不间断服务。
④使用代价低。用户采用按需付费的方式使用云计算平台的各种软、硬件资源,通过资源共享节省成本。
⑤易用性。用户不必自己部署和维护数据库,也不必自己维护数据库运行所需要的机器、存储、网络等。
根据数据模型,云数据库主要有两大类:
①基于键值模型的NoSQL数据库。典型代表有Google的BigTable及其开源实现HBase、Amazon的Dynamo和SimpleDB、雅虎(Yahoo)的PNUTS等。
②基于关系模型的关系数据库。典型代表有微软的SQL Azure、Amazon的RDS和AMI、Google的Cloud SQL、Oracle的Database Cloud Service、EnterpriseDB的Postgres Plus Cloud Database、MongoDB的mLab等。
早期的云数据库以NoSQL为主,主要原因是在大规模云计算平台上难以同时保证一致性、可用性和容忍网络分区,从而难以实现关系数据库所必须的事务一致性(ACID),代价太高。NoSQL数据库是以放松一致性和牺牲对事务的支持,来获得良好的扩展性和高可用性的。
后来人们提出了多种方法来解决大规模云计算平台的事务一致性,例如Google的分布式数据库Spanner是基于原子钟来确定事务之间的顺序的。
①多租户的高效支持。给定一组数据库访问负载,确定它们的数据库需要多少台机器,目标是在保证查询响应时间的前提下,以最少的机器服务最多的负载。
②弹性可扩展。支持数据库的大小和负载大小动态可变。通常技术是使用虚拟机来部署数据库,动态监测负载和数据库的状态,进行动态数据库迁移,例如,A.J.埃尔莫尔(A.J.Elmore)提出云平台上数据库的在线迁移技术。
③数据安全。为了不让没有许可的人获取或修改数据,云数据库通常采用数据加密和身份验证等技术。
④系统运维。支持大量用户的大规模云数据库的运维非常复杂,为简化运维,主要技术包括自动化的状态监测、故障定位、性能瓶颈定位、数据库性能调优工具。
一方面,云数据库的出现极大地改变了企业管理数据的方式,大量的中小企业更愿意采用云数据库产品,数据库市场份额面临重新分配。另一方面,云数据库面临很多新的挑战和问题,由此催生新一代的数据库技术。
联系客服