在这篇文章中,我想向大家介绍马克·帕卢奇,他除了其他项目外,也是我们Hibernate OGM项目的贡献者之一。
-
你好,马克。你愿意介绍一下自己,并告诉我们你现在正在做什么吗?
我是马克·帕卢奇,我在Pivotal Software公司担任Spring Data工程师。我是JSR 365 EG (CDI 2.0)的成员,lettuce Redis驱动程序的项目负责人,我还运营几个其他开源项目。我在业余时间喜欢玩物联网项目。在我加入Pivotal之前,我从2000年代初以来作为自由职业者在各种项目中工作,使用Java SE/EE和Web技术。现在我的重点是Spring Data,尤其是Redis、Cassandra和MongoDB。
-
你为Hibernate OGM Redis模块做出了很多贡献。你能告诉我们一些关于Redis的信息吗?
我不是第一个提出在Hibernate OGM中添加Redis支持的人。实际上,Seiya Kawashima在他的pull-request中做得相当不错,但在某个时候,Hibernate OGM的开发和PR分道扬镳了。我遇到了这个pull-request,并从那里接手了它。
Redis是一种内存数据结构存储,用作数据库、缓存和消息代理。它起源于键值存储,但通过支持列表、集合、散列等各种数据结构而发展。尽管Redis主要运行在单线程上,但它的速度非常快。其性能源于简洁的实现以及所有操作都在内存中完成。这并不意味着Redis没有持久性。默认情况下,Redis配置为将数据存储在磁盘上,且磁盘I/O是异步的。Redis通过其多才多艺的特性,支持了大量的用例,如缓存、队列、远程锁定、仅存储数据等。对我来说,一个重要的观点是,我永远不会使用Redis来存储无法恢复的数据,因为从Redis中删除数据非常简单,但将其用作半持久性存储则是完美的。
-
您也是开源项目Lettuce的作者。它与Hibernate OGM有何不同?
Hibernate OGM和Lettuce是目标不同的项目。Lettuce是Redis的驱动程序/Java绑定。它通过同步、异步和响应式API绑定,为Java开发者提供了访问Redis API的方式。如果你需要,可以直接使用Lettuce调用Redis API,并充分利用Redis的功能。任何JDBC驱动程序都位于与Lettuce相似的概念层,除了某些特定功能。Lettuce不需要连接池和断开连接的处理,因为它允许用户从自动重连和线程安全的连接中受益。Hibernate OGM Redis使用这个基础设施,并在Lettuce之上提供其数据映射功能。
-
您认为Hibernate OGM相比直接使用NoSQL API为应用程序开发者提供了哪些好处?
每个NoSQL数据存储都有自己的非常具体的API。本地API要求开发者不仅熟悉数据存储的特性,还要熟悉其API。Redis API包含超过150个命令,这些命令通过子命令组合可扩展到650多个命令。
每个Redis命令都非常具体,且独立运行。Redis命令文档提供了关于命令的详细说明,但用户需要花费相当多的时间才能熟悉原生API。
Hibernate OGM将JPA规范中的元素应用到NoSQL数据存储中,并提供了一个Java EE/JPA开发者熟悉的API。Hibernate OGM降低了入门门槛。Hibernate OGM旨在将数据映射到NoSQL数据存储中。将简单的JPA实体映射到底层数据存储中通常没问题,但有时,如关联或事务,则不适合映射到MongoDB和Redis。Hibernate OGM的用户需要了解底层持久化技术,以便熟悉其概念和优势,以及它们的局限性。
我还看到了Hibernate OGM统一配置机制的巨大优势。每个数据存储驱动程序都有自己的配置方法。Hibernate OGM将这些风格统一到一个常见的方法中。我对于Hibernate OGM的一个愿望列表项目是支持JDNI/WildFly配置,以实现与JDBC数据源相似的灵活性。
-
您计划在Spring Data中也支持Hibernate OGM吗?
Hibernate OGM和Spring Data都遵循支持NoSQL数据存储的理念。Hibernate OGM采用NoSQL数据存储的几个特性来增强其围绕JPA的数据映射。JPA是一种固有的关系型API,其中涉及的概念并不一定适用于NoSQL世界。Spring Data提供了各种流行数据存储的模块,以不同的方式提供对支持存储的一致编程模型,但并不试图将所有内容都强制转换为单个抽象API。Spring Data模块在NoSQL数据存储API之上提供了多个层次的抽象。NoSQL数据存储的核心概念通过一个API暴露,该API看起来和感觉都像Spring端点。Hibernate OGM已经可以与Spring Data JPA一起使用。一个好的用例是Spring Data Repositories抽象,它提供了一个统一的接口来访问来自各种数据存储的数据,无需用户编写查询语言,并利用存储特定的功能。
感谢Mark抽出时间。能在这里见到您非常荣幸。要联系Mark,您可以关注他的Twitter。