我正在阅读本文https://www.infoq.com/articles/spring-data-intro,以了解数据服务层如何独立于数据库(RDBMS / NoSQL)。看起来没有办法将实体和存储库设计为独立于数据库。本文写于2012年。从那时起,我们是否已经实现了此功能?
答案 0 :(得分:0)
在真正回答你的问题之前,我不得不问:你为什么要那样做?三思而后行,因为抽象是有代价的,只是为了有一个"清洁"设计绝对不值得。
现在回答你的问题:
没有开箱即用的库或框架。
可能最接近它的是你明显知道的弹簧数据。如果您坚持使用持久存储独立接口,那么您的存储库将至少在某种程度上抽象使用持久性存储。但是:您必须提供不同类型的元数据(通常作为实体上的注释)才能使其工作。所以从这个意义上讲,这是一个真正漏洞的抽象。
当然,您可以自己动手:使用您需要的操作创建一个界面,并为您要使用的不同数据存储提供实现。此外,包括提供元数据的独立于存储的方式。
所以问题就变成了:为什么还没有人这样做呢?为什么你可能也不应该这样做?
很难:只是以所有(相关)SQL数据库都很难理解的方式编写SQL,see this for an example。
你的商店散失了很多力量。例如,RDBMSes非常适合加入东西。但是对于许多No-SQL数据库而言,加入基本上是不行的。所以你的API可能不应该提供这个功能。这基本上把所有东西都愚蠢到了共同点,当你拥有非常不同的数据存储时,它将会非常小。
这不值得。这导致了我的开场问题:为什么你还想要这样做呢?我当然看到使用切换不同的RDBMS。有些公司只希望在他们的数据中心使用某些供应商,因此有一个内存变量用于测试等等。但是将商店从例如Oracle转换为Hazelcast,然后转换为MongoDB转换为CSV?你为什么想这么做?这是什么商业价值?