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 过程的会有考虑不全,不支持多表等问题
2718 次点击
所在节点    程序员
51 条回复
yisany
2023-08-14 18:11:20 +08:00
dataway 吗,试试看能不能满足你的要求
https://www.dataql.net/docs/dataway/overview
sofukwird
2023-08-14 18:21:51 +08:00
不如直接提供 serverless 能力给用户,类似 cloudflare worker
bringyou
2023-08-14 18:51:31 +08:00
如果 op 使用 JVM ,且不排斥 Spring 全家桶的话,可以尝试一下 spring-data-rest 作为接口层,通过它屏蔽后端数据库的区别,配合 spring-data 全家桶使用,比如 spring-data-redis ,spring-data-jpa , spring-data-mongodb, spring-data-elasticsearch
ourslay
2023-08-14 19:19:11 +08:00
superset 的交互可以看看参考下

实现的话直接使用 JDBC 。定义好接口,获取 schema ,table ,columns 等。不同的 db 去实现一下。
ikas
2023-08-14 19:41:06 +08:00
这个提供了对各种数据的统一封装 https://calcite.apache.org/
然后在做一个 http 上层
tensorzhang
2023-08-14 20:51:46 +08:00
https://github.com/Qihoo360/Quicksql/blob/master/docs/zh/index.md

国内 360 公司 开源的这个 符合你的需求
jimisun
2023-08-15 08:34:10 +08:00
@tensorzhang 这个很强
jimisun
2023-08-15 08:42:57 +08:00
@ikas thanks!!!!! 很棒很棒 另请教一下,刚才我检索了一下发现这应该是一个通过标准 SQL-》适配底层各种数据库的一个中间层,那有没有提供标准的请求调用-》生成 SQL 这个过程呢?
jimisun
2023-08-15 08:47:08 +08:00
@bringyou 是的,加入 Spring 全家桶可以开发更方便,但 spring-data 应该只是个抽象,各种数据库的底层实现还是要自己实现,其实现的过程应该就是我今天想请教大家的问题。
jimisun
2023-08-15 08:55:00 +08:00
@yisany 可以可以,这些框架都在会简化后端开发努力啊 /笑哭
zvvvvv
2023-08-15 09:11:53 +08:00
@ikas calcite 不太行,mysql5.7 和 8 版本许多函数都不支持

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

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

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

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

© 2021 V2EX