欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

NoSQL革命仍需要等待多时

程序员文章站 2022-06-08 10:48:34
...

最近在数据库领域内,出来了一个爆炸性的新闻。有专家提出了NoSQL的开源项目。简单的说,就是他们要推翻原先的关系型数据库的

  最近在数据库领域内,出来了一个爆炸性的新闻。有专家提出了NoSQL的开源项目。简单的说,就是他们要推翻原先的关系型数据库的模型,设计一个不需要SQL语句的数据库系统。笔者对此是采取反对的态度,或者说是在近期内不看好其前景。

  一、NoSQL项目提出的背景。

  NoSQL的支持者喜欢这个NoSQL项目,,主要是看其在性能上的优势。NoSQL支持者称,NoSQL技术可以打破传统关系型数据库的性能瓶颈。如通过NoSQL架构可以省去将Web或者Java 应用和数据转换成SQL友好格式的时间,减少SQL语句解析与优化的时间,让应用程序的速度变得更加快捷。

  确实基于SQL的关系型数据库,在性能上确实存在一些瓶颈。但是这大部分并不是这个门SQL技术所造成的。而是因为在设计数据库的时候,表与表之间的关系、表的索引或者表空间的部署等等没有设计好做造成的。所以关系型数据库性能不理想,并不能全部怪罪到这么技术上。通常情况下,对原有的数据库设计进行优化,往往可以在很大程度上提升数据库的性能。所以说,NoSQL这个项目的背景是站不住脚的。

  二、NoSQL革命仍然需等待。

  根据目前的情况来看,笔者对于NoSQL项目的前景并不是很看好。或者说,对其前途感到很悲观。NoSQL项目很难跟传统的关系型数据库相抗衡。甚至其想达到MySQL这个开源数据库的高度都很难。

  1、 NoSQL很难实现数据的完整性。

  当NoSQL这个项目开始以来,笔者也适当的关注过。但是笔者了解了这个项目后,对它的印象并不是很好。因为根据笔者的了解,很多关系型数据库中优秀的、实用的功能,在NoSQL数据库却无法实现。如在任何一个关系型的数据库中,都可以很容易的实现数据的完整性。如在Oracle数据库中,可以轻而易举的实现实体完整性(通过主键或者非空约束来实现)、参照完整性(通过主键、外键来实现)、用户定于完整性(通过约束或者触发器来实现)。通过这些机制,可以实现数据的完整性。如可以设置某表中某一个列的值是唯一的而且不能够为空。或者说在某表中引用外键的话,在另一张表中这个值必须存在。无论在删除或者更新的时候,都必须存在。

  NoSQL支持者也承认关系型数据库在数据完整性上的作用是不可替代的。但是他们却反驳说,企业可能用不到这么复杂的功能。对于这一点笔者不敢认同。现在企业的任何一个应用,基本上都需要用到数据完整性。如现在大部分应用至少都需要有一个用户认证的过程。为此在系统实现的过程中,需要在数据库中保存用户名。由于这个用户名涉及到用户的认证问题,为此用户名必须要唯一。此时就需要用到唯一性约束。在关系型数据库中,只需要在表格设计过程中,将用户名设置为唯一即可。而在NoSQL中,还需要通过代码来实现唯一性。本来很容易就可以实现,现在却要绕个弯取实现,这有点不可思议。由于在NoSQL项目中很难实现数据的完整性,而在企业应用中这个数据完整性又是少不了的。为此笔者认为,NoSQL项目很难在企业中普及开来。至少在短时间内,NoSQL革命仍然需等待。

  2、 缺乏强有力的技术支持。

  到目前为止,NoSQL项目都是开源的。所以说他们缺乏供应商技术人员提供的正式支持。在这一点,NoSQL项目与大多数的开源项目一样,不得不从社区中寻求支持。但是,NoSQL项目比其他的开源项目要难得的多。首先NoSQL项目是一个数据库系统的项目。或者说,是一些网络应用的最基层的设备。如果其出错的话,后果很严重。由于缺乏正式的官方支持,万一数据库运行出现了错误,后果是很严重的。而且到时候用户也是投诉无门的。所以,现在NoSQL项目基本上还是属于研究的阶段,如果要正式投入到企业中使用,被数据库管理员所接受,至少其稳定性上要有所改善。或者说,当问题出现时,数据库管理员要能够及时修复运行故障。由于缺乏强有力的技术支持,数据库管理员担心故障出现时难以迅速解决,所以很多管理员都拒绝使用NoSQL项目,即使其是开源免费的。如NoSQL项目的组织者Oskarsson也坦言,他们自己的公司现在使用的也不是NoSQL数据库,甚至在短期内也没有这个打算。他们现在使用的虽然是开源的数据库系统,但是仍然是基于SQL的关系型数据库。像NoSQL项目的组织者都不敢轻易在企业中部署这个NoSQL数据库,那么其他数据库管理员谁敢做第一个吃螃蟹的英雄吗?这不是拿自己的前途开玩笑。

NoSQL革命仍需要等待多时