最近要准备搞一个低代码平台,类似氚云、云枢那样,有一些问题

2020-06-23 10:44:29 +08:00
 kvkboy

它们是怎么做数据持久化的

比如在界面上设置了一个个人信息表单,有 name,age,sex 三个字段,表单设计完也就有了数据模型,我的问题就是这些数据是如何保存并使用的,是 mongodb 或 mysql ?

感觉这个产品天然的就不适合用 mysql,每个人的表单都有不一样的字段,用关系型数据库成本太高,表单创建完是要使用的,那这个表单的 curd 该如何落地,这个数据模型对应到代码里是什么样子,个人认为不是个具体对象,代码对这个模型内容应该是无感知的

8131 次点击
所在节点    程序员
58 条回复
yiyi11
2020-06-23 14:00:34 +08:00
我猜如果要用传统 db,就用 map 保存字段-字段信息的结构,然后转 json 存数据库,这里要考虑的就是大的 map,存取时,序列化 /反序列化的效率。
kvkboy
2020-06-23 14:03:57 +08:00
@davidsu1314 我不太熟悉 mongodb,仅仅就是看过几篇文章,虽然我也觉得 mongodb 比较好也不知道好在哪,但是主要问题还数据实体该怎么办,mongodb 能做到没有实体类映射就能插入数据库吗
kvkboy
2020-06-23 14:06:13 +08:00
@SakuraKuma 好像用 json 更方便点,然后 curd 就围绕着这个 json 结构进行操作是吗
kvkboy
2020-06-23 14:12:16 +08:00
@ss098 对 mongodb 不是很熟,我发现它明明格式是用 BSON,然后我看了一些 springboot 使用 mongodb 的例子全是需要先创建实体,然后映射然后存储,这跟 mysql 有啥区别....能不能不需要这个实体类,直接就用这种结构进行 curd
lonelymarried
2020-06-23 14:16:21 +08:00
用 node 写 mongodb,直接写 json,比 java 方便
SakuraKuma
2020-06-23 14:16:31 +08:00
@kvkboy 存的方式随意呀, 你可以拆开组件和字段, 两个表(mysql), 也可以一个 json 直接 mongo.
当然 mysql 5.7 后直接支持 json 了.
kvkboy
2020-06-23 14:17:26 +08:00
@kvkboy 被三流文章陷害的我,老子还在想明明是 nosql,为啥整合起来全是创建实体类,映射,然后 curd,这特码跟 mysql 啥区别
no1xsyzy
2020-06-23 14:30:32 +08:00
MySQL 每张表可以拥有不同的字段,但它本身是可以被 SQL 语句取出的。
方法就是转置,行向量变列向量。

Threestore 类或者 SICP 讲 query 的那章看完,就可以了,没有本质区别,只是方便与否的问题。

但确实 JSON 结构存储的话建模会方便点。
lijialong1313
2020-06-23 14:35:16 +08:00
如果你要 crud 落地的话,可以参考一点点我这个思路
例如一个单选框,我数据库这么存。
1.类型表:单选、多选、输入
2.选项表省略
3.实际类型(问题)信息表,省略
4.2 、3 的关联,省略
5.用户数据表。用户在当前问题中的选项。比如对于问题 1,它的选项是 3,那存储的就是:user-1-3

这个类似是数据库第三范式,以用户、题目作为主键。
一个用户的一个题目只有一个答案(答案类型不唯一,例如可以是选项 ABC,也可以是文字的填写)
问题可以通过变更类型表,变更识别方式,例如使用单选的时候执行单选逻辑,多选的时候执行多选逻辑。所有存储都存储到用户数据表。

如果表单发生更替,直接认为是重建一张新问卷。
tctc4869
2020-06-23 14:38:57 +08:00
@kvkboy

web 应用,后端低代码开发的基本前提并不是数据,数据持久化方案,最低级的用 txt 里面存 json,xml 就可以搞,标准一点 sqlite 。至于什么 MongoDB,mysql 这些不过是更高级的方式。选什么数据库就看你的了,数据就是用来抽象业务的。

最关键的基本前提,就是 Web 后端的请求处理配置。如果搞定了这个,再去考虑什么数据建模,表单设计等高级低代码开发功能。这些都是在搞定基本前提之后才考虑的问题。数据建模,如果搞不定 Web 后端的请求处理配置,就别谈什么数据建模,表单设计这些高级的低代码开发。

当然也可以从代码生成器入手,但是如果一个 web 应用的低代码开发平台仅靠代码生成器为核心来开发应用,那是最不行的。想靠代码生成器开发稍微复杂的 web 端应用(这里同时包括前端与后端),那是痴人说梦。
clf
2020-06-23 14:44:39 +08:00
mongo 和 mysql 都可以存储。

处理的时候全在前端实现数据的修改逻辑就可以了,然后“覆盖”原来的数据。需要历史版本的话新插入一条,把原来的数据状态改为 old,新旧数据有一个字段用来标致是同个表单的。(之前我是这么做的)
CrazyEight
2020-06-23 14:48:22 +08:00
@kvkboy 一个表单对应一个表,直接用 jdbcTemplate 动态的生成 sql 语句,保存表单数据那块没有用 orm 框架
ConradG
2020-06-23 14:53:37 +08:00
表单不就是一个树么,树有啥不好存的。
zjsxwc
2020-06-23 14:57:22 +08:00
一个页面对应一个 Class 类,页面数据对应这个类实例 Instance,
至于对每个实例存储方式就各种各样了,楼上说的方法很多,

也就如何把拖拽出的表单页面转换为 Class 类代码,有点意思吧。
oahebky
2020-06-23 14:59:17 +08:00
这些平台思路很强。

小规模公司低成本专业化( EPR ),是符合生产力的发展路线。
tinyuu
2020-06-23 15:01:33 +08:00
一个结构表(form_definition)存 表单相关信息 如名称,字段列表,等

设计器保存表单信息到 form_definition 表中。


然后每个表单创建一个表。 前台查询等时候就是按名称找 form_definition 然后拼接 sql 。
ty89
2020-06-23 15:05:35 +08:00
花点时间深入学习一下数据库表设计,比跑这里问怎么实现有意义的多.
kvkboy
2020-06-23 15:57:46 +08:00
@tctc4869 多谢解答,能不能告诉我下 Web 后端的请求处理配置 是指什么,按照我的理解其实低平台就是制定一套规则,然后后端用一种“通用语言”解析用户的行为,你说的请求处理配置,是不是就指这部分解析
kvkboy
2020-06-23 16:06:16 +08:00
@oahebky 哈哈哈,其实我第一反应也是这个做法,思考如何解析页面元素动态创建 class,然后发现技不如人,溜了溜了
guoyang
2020-06-23 16:33:27 +08:00
@kvkboy 看下 salesforce 的设计,将表的设计作为元数据,数据抽象通用存储模型,具体细节见如下链接:
https://www.slideshare.net/developerforce/salesforce-multitenant-architecture-how-we-do-the-magic-we-do

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

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

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

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

© 2021 V2EX