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

2023-08-14 13:34:59 +08:00
 jimisun

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


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

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

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


提问

  1. 这样实现是否合理
  2. 有没有类似的协议或开源产品能够借用? PS:如果自己开发转换 sql 过程的会有考虑不全,不支持多表等问题
2717 次点击
所在节点    程序员
51 条回复
nothingistrue
2023-08-14 14:39:14 +08:00
「底层数据来源会很多,比如接口,csv 文件,oracle 数据库,然后就行提供一个接口调用形式,给内部的大屏,报表,应用,提供一个接口,查询即可」
「怎么实现高性能检索呢?」
「如果某张表有 1000 万左右能实现吗?」
「但可能对于我的需求存在点问题 1. 工具重 」

综合以上需求,给楼主提供个建议:别在这找了,去找个不要工资的大学实习生吧。
cluulzz
2023-08-14 14:41:59 +08:00
@jimisun
1.trino 不算重
2. 这玩意就是这样用的,只是优化的方向跟常规的 sql 不太一样
另外如果需要 rbac 的话还是要在业务层做处理
如果不纠结前端展示问题的话可以看看 metabase,开源版带 rbac,企业版好像带行列权限
jimisun
2023-08-14 14:50:27 +08:00
jimisun
2023-08-14 14:51:46 +08:00
很感谢大家回复,最后还是想问下大家,有没有类似开源的框架或工具能够生成不同数据库类型的 SQL 语句,感谢。
udbpl
2023-08-14 14:55:45 +08:00
https://gitee.com/freakchicken/db-api.git 可以看下这个,你的需求之前我也搞过
jimisun
2023-08-14 15:06:10 +08:00
@udbpl 是的很棒,项目中已经落地跟这种功能类似的功能。不能说一模一样也是大差不差,其实现原理都是使用 Mybatis 。 不妨再向上抽象一点,这种新建接口还是需要用户编写 SQL ,能不能用户直接输入个数据库信息就对外提供一个接口呢? 这个接口按照(规范)就可以对这个数据库中的数据进行操作。 我想问大家的问题就是有没有现成的规范能直接转换 SQL 。。。。。。。。。。
ZGame
2023-08-14 15:06:49 +08:00
opemmetadata,这个是数据管道的活。
dzdh
2023-08-14 15:39:31 +08:00
我知道了!

你需要 phpmyadmin
yulgang
2023-08-14 15:52:48 +08:00
@jimisun #5 Grafana ?
xudaxian520bsz
2023-08-14 16:05:48 +08:00
@jimisun 你这个牛逼了,逆开发模式了,之所以放到后端主要还是安全吧,并且后端很多都是自己实现的 tcp 协议。
swulling
2023-08-14 16:11:40 +08:00
去年有个项目做了类似的功能。将 DB 转换为动态的 restful API 功能。不过公司代码没法给你分享。

给你一个类似的项目吧,是 pgsql 的,思路一样。

https://github.com/PostgREST/postgrest
jimisun
2023-08-14 17:13:40 +08:00
@xudaxian520bsz nonono 不能说逆开发模式 你仍然可以在此基础上包装你的安全控制逻辑,只不过没提及
jimisun
2023-08-14 17:20:01 +08:00
@swulling 是的 这很棒,请问下当时你们是用什么技术生成的 SQL 去适配底层各种数据源呢?
swulling
2023-08-14 17:25:30 +08:00
@jimisun 写一个 SQL 转译层,我们当时实现了适配 SQLite ,MySQL 和 PostgreSQL 。

具体代码你可以参考 postgrest 的代码,写的不错。
RightHand
2023-08-14 17:34:05 +08:00
hibernate+hql ?解析文件写方言?
jimisun
2023-08-14 17:34:24 +08:00
@swulling 大概看了下 不是 java 写的 就看不明白了。java 中有个套件 querydsl-sql 能生成 SQL 但是没有规范,我想着自己顶一个规范然后生成 SQL 转移层转换即可。你们当时也是自己定的调用规范吗
jimisun
2023-08-14 17:37:44 +08:00
@RightHand 这个理论上也可行,正准备调研... 不过我个人感觉转移 SQL 比 HQL 有优势。hiber..感觉和数据源强绑定了,没办法做到我生成一个 SQL ,然后通过 RPC 远程到另一个服务执行。。。。
RightHand
2023-08-14 17:45:35 +08:00
@jimisun SQL 会有兼容问题,远端执行的这个是不是可以参考下数据库 client 相关的实现
superchijinpeng
2023-08-14 17:47:05 +08:00
很多数据库的客户端都支持 HTTP 协议 JDBC 中可以切换,CK 之类的可以参考下
RightHand
2023-08-14 17:47:48 +08:00
@RightHand 这一套搞下来,不知道有没有意义了。

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

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

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

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

© 2021 V2EX