数据库是网站建设工作中的根本,无论是电子商务型的营销型网站建设还是普通企业展示型网站建设都离不开数据库。当我们步入大数据时代时,数据库的角色更是举足轻重,但是在大多数网站制作人员的眼里,数据库就是Sql Server,MySql,Oracle,实际上,这些数据库都属于关系型数据库(RDBMS),属于同一类数据库,它们也不能满足所有应用的需求。在数据库的大家族里,还有其它成员也在某些特定场景下默默扮演着重要角色,接下来我们就如何在网站建设中合理地选择数据库进行讨论。
大多数RDBMS对于存储数据有两大好处。第一个是利用ACID属性确保了事务完整性,关于ACID的定义,我们在《数据库横向扩展》里已经阐述。第二个好处是在于表内和表间的关系型结构。为了最小化数据冗余,提高事务的处理能力,大多数联机事务处理(OLTP)系统中的表都被规范化为第三范式,即所有表中的所有记录都有相同的字段,所有非关键字的字段都不能只依赖于组合关键字的一部分,所有非主关键字字段必须依赖于主关键字。表中的每一列数据都要依赖于表中的其他数据列。表之间的关系通常以外键表示。虽然使用RDBMS有这两点好处,但它们也是限制了扩展性的原因。
为了确保ACID属性,扩展RDBMS比扩展其他数据存储难得多。为了在具有多个节点的RDBMS集群中确保数据一致性,要采用同步复制的功能才能保证所有数据在提交时被写入多个节点,这样对于一般中小型深圳网站建设公司而言不仅成本过高,也没有足够的人员安排来维护这些日益增多的数据库服务器。即便是采用Oracle RAC这样高级别的数据库集群,也会有一个中央数据库,但是数据库域的所有权却是所有节点共享的。因此,对于写请求,要把数据所有权转移到相应的节点,而对于读请求,则要一次从请求者发送到主节点,再从主节点发送到拥有要读数据的节点,再从它发回到请求者。最终,你会受到同步复制数据的节点数或它们的地理位置限制。
RDBMS中表内和表间的关系结构使得很难对数据库进行分片或分区操作。关于把工作分发到多台服务器上的原则请参考《云计算在网站制作中的应用》。把表分拆到多个数据库应用中,原来在单一数据中连接两个表的简单查询,就要被转换成两个查询来连接数据。
总而言之,网站建设时只有要求事务完整性或数据间有关系的数据,才需要使用RDBMS。既不要求数据关系,也不要求事务完整性的的数据,最好采用其他的存储系统。
在下面的文章中我们将讨论几个可用的解决方案,以及如何用它们来代替关系型数据库以达到更好的,性价比高的,扩展性高的系统。