992
技术社区[云栖]
《Spring Data实战》——第1章 Spring Data项目 1.1为Spring开发人员提供的NoSQL数据访问功能
本节书摘来自异步社区《Spring Data实战》一书中的第1章,第1.1节,作者: 【美】Mark Pollack , Oliver Gierke , Thomas Risberg , Jon Brisbin , Michael Hunger着,更多章节内容可以访问云栖社区“异步社区”公众号查看
第一部分 背景知识
第1章 Spring Data项目
Spring Data项目是在“Spring One 2010开发者大会”上创建的,该项目起源于当年早些时候Rod Johnson(SpringSource)和Emil Eifrem(Neo Technologies)共同参与的一场黑客会议。他们试图把Neo4j图形数据库整合到Spring框架中,并评估了各种不同的方式。这次会议最终为初始版本的Spring Data Neo4j模块奠定了基础,这个新的SpringSource项目旨在迎合大众对于NoSQL数据存储日益增长的兴趣,而这种趋势一直持续到了今天。
从创立之初,Spring就为传统的数据访问技术提供了完善的支持。不管是使用JDBC、Hibernate、JDO、TopLink还是iBatis作为持久化技术,Spring都大大简化了数据访问层的实现。这种支持主要包括简化基础配置、资源管理并将异常转换成Spring的DataAccessExceptions。这种支持多年以来已经逐渐成熟,最新版本的Spring也对这一层提供了很好的支持。
过去涉及数据持久化时,关系型数据库是可供选择的主要工具,所以Spring对传统数据访问的支持只把关系数据库作为唯一的目标。但随着NoSQL的问世并成为工具箱中可行的替代方案,从支持开发人员的角度来看就有了新的领域需要补充。另一方面,对于传统关系型存储的支持也还有许多需要改善的地方。这两个方面是Spring Data项目的主要驱动力。Spring Data包含NoSQL存储的专有模块以及为关系型数据库提供更好支持的JPA和JDBC模块。
1.1 为Spring开发人员提供的NoSQL数据访问功能
尽管用NoSQL这个术语统称一系列的新型数据存储,但所有的这些存储都有不同的特性和使用场景。具有讽刺意味的是,正是这种缺失特性的特点(缺乏对运行SQL 查询的支持)命名了这一系列数据库。由于这些存储的特征非常不同,所以它们的Java驱动要使用完全不同的API才能充分发挥其特性和功能。如果试图对这些差异进行抽象的话,就会失去每种NoSQL数据存储能带来的收益。图形数据库应该用来存储高度关联的数据;文件数据库应该存储树状以及聚合状的数据结构;如果需要类似缓存的功能和存取模式,那应该选择键/值(key/value)存储。
Java EE(企业版)领域通过JPA提供了持久化API,这个API或许可以当作NoSQL数据库前端实现的候选方案。但是令人遗憾的是,规范的前两句话已经预示了这一点似乎不可能实现:
本文档是关于在Java EE和Java SE中管理持久化和对象/关系映射的Java API规范。这项成果的技术目标是为Java应用开发人员提供一个对象/关系映射机制,借助它可以使用域模型来管理关系型数据库。
这一主题在规范的后面有清晰的体现,它定义了与关系型持久化领域紧密关联的概念和API。@Table注解对NoSQL数据库而言没有太大的意义,@Column或@JoinColumn也是如此。在MongoDB这样的存储中如何实现事务API呢?要知道在这些环境中并没有提供跨多文档操作的事务语义。因此在NoSQL存储之上实现JPA层,最好采用一个基于配置文件的API。
另一方面,所有NoSQL存储提供的特殊功能(地理空间功能、map-reduce操作、图形遍历)都需要以专有的方式去实现,因为JPA并没有为它们提供抽象。因此我们可能会以“两边不讨好”(worst-of-both-world)的局面收场:有的部分可以通过JPA来实现,另外还需要使用专有的特性来重新启用与特定存储相关的功能。
上文排除了采用JPA作为这些存储的抽象API的可能性。Spring生态系统中的各种项目为开发人员带来了高效率以及一致的编程模型,我们依然希望将其用于简化对NoSQL存储的使用。为此,Spring Data团队发布了如下使命宣言:
针对NoSQL和关系型存储,Spring Data提供了基于Spring的熟知且一致的编程模型,同时保留特定存储的特性和功能。
因此,我们决定采取略有不同的方法。不再试图以单一的API将所有存储抽象化。相反,Spring Data项目对不同的存储实现都提供一致的编程模型,并使用了在Spring框架中大家已熟悉的模式和抽象。这样,在使用不同的存储时,会有一致的体验。
最后更新:2017-05-31 12:01:59