Http 协议或(其他)协议的调用换标准 SQL

268 天前
 jimisun

目前有这样一个需求,适配底层各种数据源,对外提供统一的调用形式


现在要做一个数据集的功能

  1. 屏蔽底层数据源例如,mysql,oracle,pg 等的底层数据源
  2. 对底层数据源建立字段映射代理,例如源数据表有十个,可以只映射 5 个,外面只能用这 5 个
  3. 对外提供统一的调用形式

我的思路是将 http 按照指定规范进行调用,后端根据规范将请求使用 querydsl-sql 底层框架生成对应数据库类型的 sql 执行


提问

  1. 这样实现是否合理
  2. 有没有类似的协议或开源产品能够借用? PS:如果自己开发转换 sql 过程的会有考虑不全,不支持多表等问题
2386 次点击
所在节点    程序员
51 条回复
dzdh
268 天前
GraphQL ?
NessajCN
268 天前
你先说清楚「对外提供统一的调用形式」,这个调用形式具体是啥
http 只是个传输协议,你是要用 restful 接口呢,还是 websocket 发事件呢,还是自己编一套规则,
还有对外是对哪个「外」,公司内部?第三方开发?平台接入?任意网友?
jimisun
268 天前
@dzdh 这个刚才搜索了一下,应该是无具体的数据库无关对吗?
jimmy3780
268 天前
@jimisun GraphQL 不仅跟数据库无关,它甚至都不用关心你的数据是怎么来的
jimisun
268 天前
@NessajCN 需求是这样的,底层数据来源会很多,比如接口,csv 文件,oracle 数据库,然后就行提供一个接口调用形式,给内部的大屏,报表,应用,提供一个接口,查询即可。类似市面上的 apijson
jimisun
268 天前
@jimmy3780 谢谢,我想您一定很了解这个 GraphQL 。 我向你请教一个重要的我比较关系的问题。GraphQL 支持在运行时添加其实例吗? 比如我从管理系统增加了一条规则,那么就可以使用 GraphQL 訪問。
NessajCN
268 天前
@jimisun 那就是最普通的 restful 接口咯....给内部用的就不用考虑验证啊安全这些了直接写接收请求和返回字段就行
kemistep
268 天前
解决方式很简单:直接传递 sql ,后台解析即可,前端只需要拼接 sql 即可,后台做运算后,传递给前端 json
jimisun
268 天前
@jimmy3780 还有一个场景,GraphQL 如果和数据无关的话,怎么实现高性能检索呢? 相比 GraphQL 必须要把数据加载进内存中使用自己的规范进行检索。如果某张表有 1000 万左右能实现吗?
jimisun
268 天前
@kemistep 是的,如果这么干的话 领导就该说我什么都没干了。。。
jimisun
268 天前
@NessajCN 嗯对,所以就在考虑如何实现兼容底层各种数据源的问题。
NessajCN
268 天前
@jimisun 你意思查询者自己不知道数据源,要你在接口里自动判断?还是要遍历?
jimisun
268 天前
@NessajCN 例如:有一个数据集管理,有个接口/api 用于访问数据集里面的数据,今天某个数据集记录关联的是 mysql 表,明天可能管理人员修改了配置,改成 oracle 数据库了。但已有的前端调用代码无需修改。这种场景在大数据里库采集转换可能存在。
NessajCN
268 天前
@jimisun 那你就把不同数据库用的不同查询语句都放到接口里的不同函数,然后弄个配置文件或者.env 之类的,根据配置调不同的函数。再关照管理人员修改数据库的时候一起把接口的配置也改了呗
dzdh
268 天前
@jimisun #9

graphql 就是个 web 应用。一次请求处理一次。

开发普通 api 接口,不就是你配置文件一改,下次请求就能读到新的数据源了吗?

同理,graphql 后端也需要你自己写一定的业务逻辑,写的时候支持上实时读取新的配置文件走不同的数据源即可。

同理,也能支持任意数据源,你再请求个 http 接口请求都行,但是如果是不同数据源的 join 、模糊查询操作,那是数据源本身处理能力的问题,和 graphql 无关
MineDog
268 天前
听起来是要一个 BI 工具的服务端啊
cluulzz
268 天前
prestodb/trino?
jimisun
268 天前
@dzdh 1. 所谓的配置文件可以运行时维护吗? 2. graphql 不支持对 avg ,max like 操作吗
jimisun
268 天前
@cluulzz 分布式多数据源的 SQL 检索。很棒。但可能对于我的需求存在点问题 1. 工具重 2. 现在要解决的是需要一个协议(或者什么乱七八糟的) 能生成不同数据库的查询语句。
idealhs
268 天前
GraphQL / OData
注意 OData 是微软.Net 专属

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX