有什么方法可以提供兼容mysql,mongodb 两种数据库。比如同时兼容两种数据库驱动,并且做到底层跟上层解耦。
发布于 8 年前 作者 firstgeniusboy 7628 次浏览 最后一次编辑是 5 年前

有什么方法可以提供兼容mysql,mongodb 两种数据库。比如同时兼容两种数据库驱动,并且做到底层跟上层解耦。 我想过很多方法,但是都没法达到目的。两种数据库本身的特性根本没办法以接口解耦。除非放弃一方的特性

19 回复

其实已经有相关成熟的解决方案,不过不是在nodejs平台,而是java平台。没错,就是JPA/JDO这种叫好不叫座的玩意,具体实现方案参见spring/hibernate。这类设想总是看起来很美好,实现起来很艹蛋,用起来痛不欲生。

https://github.com/meltingice/node-activerecord 这有个,SQL/NoSQL不过有一年 没更新过了,coffee源码,你可以做些参考…

我现在能想到就是在实现上解耦,针对实现写两套操作,怎对两种数据库写两种不同的数据库表结构。但是实在蛋疼。我现在最想不通就是我要针对实现,还是针对框架(就是写套框架)

刚刚又在思考框架,我都晕了,把两种驱动加进来不难,但是在语法层要实现两种数据库接口统一,尤其是调用端,根本不可能似的。

如果你说mysql或是oracle这样的同种类型的数据库(关系型),那ORM还有意义,但想构建一套对NoSQL和SQL都兼容的ORM,不说难度和复杂度,业务场景上讲也很少这种需求吧,还是各取所需的好。

主要是针对存储那边的统一接口,而非针对业务。将业务跟底层分离开。现在才发现,除非我们不仅仅定义接口实现,最重要的是定义底层数据库不同的逻辑处理。也就是说要包括其中数据库表结构的定义也要放在那里。

@firstgeniusboy 嗯,底层的数据结构的不同决定了上面的统一接口设计的难度

@sumory 所以啊,研究了一个星期,坑爹啊。但是我觉的这方面在以后应该会有所发展吧。

我是用一个模型 model 做两种表达。SQL 方面写了个引擎 - 根据模型产生 SQL 语句。

特性呢,比如addToSet 之类的针对每个的特性就表达不清了,我现在才知道要想统一只有把他们放到业务层里去,分别定义。但是……

我用geddy框架,现在的sails,waterflow等框架都能提供不同类型的model,,,我刚做了个项目,同一张表一部分数据放在mysql,另一部分数据放在mongo,用的直接驱动写两种sql语句,请大牛指正

我觉底层这种本质上的差异还是不要隐藏的好

geddy 里用的是这个 https://github.com/geddy/model ,类似 Rails 里 ActiveRecord 的 ORM,支持 MySQL、MongoDB

@firstgeniusboy 你自己来一套类似hql jpql这东西,数据库访问层再来几套具体实现。

如果以后用的上你这就没白写,要是就这个项目用,还是算了,整来整去自己晕了(白费力)。

听我的吧,别去做什么orm , jsdo 。现在开发人谁能不会sql呢(可以吗), 你就只要写一套CURD的 dao,把Sql直接交给controller 。不要去模仿那些orm 框架了(都是坑后代),nodejs 本身语法特点就很不错,不要把nodejs也给框起来了。

有好点的处理mysql的orm ? node下的

二者根本不是一个模型的东西,sql需要设计关系模型,而nosql大多是没有模式的,所以操作很难统一,java层面我又方案,抽象一个套curd操作,node没试过!

感觉比较难,但是ORM的话有点意思

回到顶部