问答题
请详细阅读有关数据架构方面的描述,回答问题。
某软件公司欲开发一个基于Web2.0的大型社交网络系统。就该系统的数据架构而言,李工决定采用公司熟悉的数据架构,使用通用的商用关系型数据库,系统内部数据采用中央集中方式存储。
该系统投入使用后,初期用户数量少,系统运行平稳。但6个月后,用户数出现了爆炸式增长,系统暴露出诸多问题,集中表现在以下几方面:
(1)用户执行读/写操作时,响应时间均变得很慢;
(2)随着系统功能的扩充,原有数据格式发生变化,又出现新的数据格式,维护困难;
(3)数据容量很快超过系统原有的设计上限,数据库扩容困难;
(4)软件系统不断出现宕机,整个系统可用性较差。
经过多次会议讨论,公司的王工建议采用NoSQL数据库来替代关系数据库,以解决上述问题。但李工指出NoSQL数据库出现时间不长,在使用上可能存在风险。公司技术人员对NoSQL数据库产品进行了认真测试,最终决定采用NoSQL数据库来替代现有的数据库系统。
问答题
分别解释产生问题(1)~(4)的原因。
【正确答案】其原因主要是以下4个方面。
(1)用户响应时间慢。大型社交网络系统要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常大,往往要达到每秒上万次读/写请求。关系数据库应付上万次SQL查询还勉强可以,但是应付上万次SQL写数据请求,硬盘I/O就已经无法承受了。特别是涉及多表连接操作,会导致响应变慢。
(2)数据格式变化。大型社交网络系统随着用户的使用,会不断地增加新的功能,导致原有数据格式发生变化,甚至出现新的数据格式。但关系数据库中采用元组方式组织数据,难以使用新型数据格式,难以维护。
(3)数据容量超过设计上限。对于大型社交网络系统,往往会在很短时间内产生海量数据。关系数据库多采用中央数据存储,使得数据容量受限于前期设计的上限,很难实现数据容量的横向扩展。
(4)系统可用性差:关系数据库采用中央数据存储,容易成为系统的性能瓶颈,单点故障很容易导致系统崩溃,负载过高往往导致系统出现宕机现象。
【答案解析】[解析] 本题主要考查考生对NoSQL数据库的理解与掌握情况。
随着互联网Web2.0网站的兴起,非关系型的数据库成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露出了以下很多难以克服的问题。
1.对数据库高并发读/写的需求
Web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读/写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是要应付上万次SQL写数据请求,硬盘I/O就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。
2.对海量数据的高效率存储和访问的需求
对于大型的SNS网站,每天用户产生海量的用户动态,以某SNS网站为例,该网站每个月产生2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表中进行SQL查询,效率是极其低下乃至不可忍受的。
3.对数据库的高可扩展性利高可用性的需求
在基于Web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像Web服务器和应用服务器那样简单地通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断地添加服务器节点来实现扩展呢?
在上面捉到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于Web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如以下情况。
①数据库事务一致性需求
很多Web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。
②数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的。并不要求这么高的实时性。
③对复杂的SQL查询,特别是多表关联查询的需求
任何大数据量的Web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大地弱化了。
因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。
NoSQL(Not Only SQL,不仅仅是SQL)提倡运用非关系型的数据存储,它打破了长久以来关系型数据库与ACID理论大统一的局面。NoSQL数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说,它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对进行存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
与关系型数据库相比,NoSQL数据库具有以下优点。
①易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也在无形之间,在架构的层面上带来了可扩展的能力。
②大数据量,高性能
NoSQL数据库都具有非常高的读/写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,表每次更新Cache就失效。它是一种大粒度的Cache,在针对Web2.0交互频繁的应用时,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能要高很多了。
③灵活的数据模型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦,这点在大数据量的Web2.0时代尤其明显。
④高可用
NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。
当然,NoSQL也存在很多缺点,例如,并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时问来检验,缺乏相关专家技术的支持等。
主要考查对题干(1)~(4)出现问题的分析与理解情况,考生一定要紧紧围绕大型社交网络的特点,即海量用户、大量实时操作等特征进行论述。
问答题
请针对问题(1)~(4),分别指出NoSQL数据库的哪些特点促使公司最终采用了NoSQL数据库。
【正确答案】,NoSQL数据库支持高并发数据访问,性能较高。
针对问题(2),NoSQL数据库的数据存储结构松散,能够灵活支持多种类型的数据格式。
针对问题(3),NoSQL数据库能够支持海量数据的存储,且易于横向扩展。
针对问题(4),NoSQL数据库基于分布式数据存储,不存在单点故障和性能瓶颈,系统可用性高。
【答案解析】问题2承接问题1,主要考查如何结合实际场景,描述如何采用NoSQL数据库解决上述问题。注意需要有的放矢,不要发散。
问答题
请指出该系统采用NoSQL数据库时可能存在的问题。
【正确答案】该系统采用NoSQL数据库时可能存在以下的问题。
(1)NOSQL数据库的现有产品不够成熟,大多数产品处于初创期。
(2)NoSQL数据库并未形成一定的标准,产品种类繁多,缺乏官方支持。
(3)NoSQL数据库不提供对SQL的支持,学习和应用迁移成本较高。
(4)NoSQL数据库支持的特性不够丰富,现有产品提供的功能比较有限。
【答案解析】问题3主要考查考生对NoSQL数据库缺点的理解。需要注意必须围绕题干中系统建设的特点和要求进行论述。