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

kvkboy 7月前 126

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

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

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

最新回复 (56)
  • majiaxin110 6月前
    引用 2
    意思是说表单的字段变动频繁,用户可以自由创建表单,为表单添加删除任意字段是吗?
  • 楼主 kvkboy 6月前
    引用 3
    @majiaxin110 对的,v 站我不会发图片..可以看看氚云的文档 http://help.h3yun.com/#%E5%9F%BA%E7%A1%80%E6%8E%A7%E4%BB%B6
  • lonelymarried 6月前
    引用 4
    这有点像 excel 啊。
    我感觉还是一个表单对应一个表啊。
  • yannxia 6月前
    引用 5
    题外话:一直觉得……这种东西就是 BPM,低代码感觉还是要生成代码的那种才像。
  • CrazyEight 6月前
    引用 6
    我就是在做这种项目,用的就是 MySQL 。。
  • leoskey 6月前
    引用 7
    关系型数据库使用 keyvalue 表形式存储配置,非关系型 redis 本身就是 keyvalue,mongodb 也很灵活
  • 楼主 kvkboy 6月前
    引用 8
    @CrazyEight 一个表单一个表吗....那你是怎么存的,动态创建类持久化到 mysql 吗
  • 楼主 kvkboy 6月前
    引用 9
    @lonelymarried 是有点像,大学生那种各种各样的问卷调查就是用这些平台比如 番茄表单 这样创建的,给他们一个平台,他们自己通过拖曳组件就可有创建相应的文本框、复选框。

    一个表单对应一个表太重,而且不太好实现,表单是随时都能改变字段的,当然也可也制定规则创建了就不让改,主要难点还是这部分数据的 curd,如果是 mysql 创建表的话,表对应的持久化对象就不好弄...
  • 楼主 kvkboy 6月前
    引用 10
    @yannxia BPM 算个子集吧,包括了它,其实我都觉得就是无代码了.....通过组件排列组合给你来一个大学生意见调查表
  • lonelymarried 6月前
    引用 11
    对,mongodb 比较适合这个
  • ss098 6月前
    引用 12
    之前用 Alpaca.js ( jQuery )做过,数据库用 MySQL JSON 字段存储。

    但 NoSQL 直接嵌套 BSON 存储会更好。
  • majiaxin110 6月前
    引用 13
    那么应该考虑模型建立的时候对字段抽象,字段可以拥有表示类型的属性,或者采用继承关系表示多种字段。用户创建一个个性化表单则是多种字段的组合。也就是说,我觉得只要正确分析建模,底层数据库使用哪一种都是可以的。
  • mnssbe 6月前
    引用 14
    数据库怎么用都没研究明白, 要做这个平台我看够呛
  • w7938940 6月前
    引用 15
    推荐 Ruby 大佬的作品 [Form Core]( https://github.com/rails-engine/form_core)
    https://ruby-china.org/topics/33098
  • tctc4869 6月前
    引用 16
    楼主,低代码开发,要一步一步来,不要一口吃成一个胖子。

    对于 Web 应用,先解决怎么低代码零代码开发后端,然后怎么做到兼顾低代码零代码开发的同时也能定制后端编码开发。

    如果做到了 Web 后端低代码开发,再去考虑怎么低代码零代码开发前端。
  • tctc4869 6月前
    引用 17
    @tctc4869 Web 应用低代码开发的关键就不是数据库的问题。
  • 楼主 kvkboy 6月前
    引用 18
    @tctc4869 你说的很对,确实是这样的,现在我也是刚进入这个需求中,在了解原理和探索一些设计中,试用了氚云和云枢后,我就在想如果要实现这个怎么搞,然后就有个疑问,想知道他们是怎么做到数据的建模和 curd 的
  • 楼主 kvkboy 6月前
    引用 19
    @tctc4869 国内的低代码平台,不管怎么说都是新建应用,表单设计,数据建模开始,我不是想探讨哪个关键不关键,就是单纯的疑问他们是怎么做的,如果是我该怎么实现,这么一想下去,就会发现,数据这块是绕不开的,怎么 curd,结构是咋样
  • davidsu1314 6月前
    引用 20
    这种场景 mongodb 比较适合吧
  • SakuraKuma 6月前
    引用 21
    ```json
    {
    componentType:
    fields:[{
    id:
    val:
    label:
    }]
    }
    ```

    数据库用啥都行了,提交的时候根据 id 做 field name 处理就好。
  • yiyi11 6月前
    引用 22
    我猜如果要用传统 db,就用 map 保存字段-字段信息的结构,然后转 json 存数据库,这里要考虑的就是大的 map,存取时,序列化 /反序列化的效率。
  • 楼主 kvkboy 6月前
    引用 23
    @davidsu1314 我不太熟悉 mongodb,仅仅就是看过几篇文章,虽然我也觉得 mongodb 比较好也不知道好在哪,但是主要问题还数据实体该怎么办,mongodb 能做到没有实体类映射就能插入数据库吗
  • 楼主 kvkboy 6月前
    引用 24
    @SakuraKuma 好像用 json 更方便点,然后 curd 就围绕着这个 json 结构进行操作是吗
  • 楼主 kvkboy 6月前
    引用 25
    @ss098 对 mongodb 不是很熟,我发现它明明格式是用 BSON,然后我看了一些 springboot 使用 mongodb 的例子全是需要先创建实体,然后映射然后存储,这跟 mysql 有啥区别....能不能不需要这个实体类,直接就用这种结构进行 curd
  • lonelymarried 6月前
    引用 26
    用 node 写 mongodb,直接写 json,比 java 方便
  • SakuraKuma 6月前
    引用 27
    @kvkboy 存的方式随意呀, 你可以拆开组件和字段, 两个表(mysql), 也可以一个 json 直接 mongo.
    当然 mysql 5.7 后直接支持 json 了.
  • 楼主 kvkboy 6月前
    引用 28
    @kvkboy 被三流文章陷害的我,老子还在想明明是 nosql,为啥整合起来全是创建实体类,映射,然后 curd,这特码跟 mysql 啥区别
  • no1xsyzy 6月前
    引用 29
    MySQL 每张表可以拥有不同的字段,但它本身是可以被 SQL 语句取出的。
    方法就是转置,行向量变列向量。

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

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

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

    如果表单发生更替,直接认为是重建一张新问卷。
  • tctc4869 6月前
    引用 31
    @kvkboy

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

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

    当然也可以从代码生成器入手,但是如果一个 web 应用的低代码开发平台仅靠代码生成器为核心来开发应用,那是最不行的。想靠代码生成器开发稍微复杂的 web 端应用(这里同时包括前端与后端),那是痴人说梦。
  • lychs1998 6月前
    引用 32
    mongo 和 mysql 都可以存储。

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

    也就如何把拖拽出的表单页面转换为 Class 类代码,有点意思吧。
  • oahebky 6月前
    引用 36
    这些平台思路很强。

    小规模公司低成本专业化( EPR ),是符合生产力的发展路线。
  • tinyuu 6月前
    引用 37
    一个结构表(form_definition)存 表单相关信息 如名称,字段列表,等

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


    然后每个表单创建一个表。 前台查询等时候就是按名称找 form_definition 然后拼接 sql 。
  • ty89 6月前
    引用 38
    花点时间深入学习一下数据库表设计,比跑这里问怎么实现有意义的多.
  • 楼主 kvkboy 6月前
    引用 39
    @tctc4869 多谢解答,能不能告诉我下 Web 后端的请求处理配置 是指什么,按照我的理解其实低平台就是制定一套规则,然后后端用一种“通用语言”解析用户的行为,你说的请求处理配置,是不是就指这部分解析
  • 楼主 kvkboy 6月前
    引用 40
    @oahebky 哈哈哈,其实我第一反应也是这个做法,思考如何解析页面元素动态创建 class,然后发现技不如人,溜了溜了
  • guoyang 6月前
    引用 41
    @kvkboy 看下 salesforce 的设计,将表的设计作为元数据,数据抽象通用存储模型,具体细节见如下链接:
    https://www.slideshare.net/developerforce/salesforce-multitenant-architecture-how-we-do-the-magic-we-do
  • ShareManT 6月前
    引用 42
    @ty89 向比人请教为何不是一个学习方法?楼主别理这种人,总觉得自己高人一等。
  • tctc4869 6月前
    引用 43
    @kvkboy 你说的我不理解,我那个回复的意思也不是搞什么新的“通用语言”。你想要以零代码和低代码的成本开发一个 web 应用。

    首先如果你想要的开发低代码开发平台。你要先解决后端的 Web 请求配置问题。你要先做到以零代码的方式配置配置 Web 请求处理 Action (这里要求的是零代码配置哦),这就是最基础关键的地方哦,虽然这个地方与数据建模,表达设计等高级低代码开发是无关的,但却是它们实现的基础。如果没有这种基础,就算有数据建模,表达设计,也终究不过是代码生成。这样做的低代码开发就没有任何意义。


    重点:以零代码的方式配置配置 Web 请求处理 Action 。至于怎么做,就得看你选择的 WebMVC 框架,你得在入站处理方法进行定制,以达到零代码配置 Action 目的。
  • zjsxwc 6月前
    引用 44
    @kvkboy #39 原文:“@oahebky 哈哈哈,其实我第一反应也是这个做法,思考如何解析页面元素动态创建 class,然后发现技不如人,溜了溜了”
    回复:

    站在别人的肩膀上也简单,网上很多拖拽生成 html 的例子直接拿来用,比如 bootstrap 那套,然后把 html 提交到服务器,再直接用现成的 html parser,把传过来的 html 表单转换为 class 定义代码就行。
  • cornelia 6月前
    引用 45
    关于低代码平台我看过最好的一篇文章: https://github.com/CntChen/cntchen.github.io/issues/15
  • lonelymarried 6月前
    引用 46
    @cornelia 为什么 Data 表要有这么多 value,不是一条 value 对应一条记录么
  • ty89 6月前
    引用 47
    @ShareManT 伸手党就是伸手党,能发出来还不能让人说了,玻璃心就别上网冲浪。恨不得有人一步步告诉代码要怎么写 , 根本问题不是不知道怎么实现动态字段,而是对数据库的理解只停留在了 curd 的层面,不去解决更不问题深入学习数据库,只一个劲的问怎么实现怎么实现, 明天遇到个其他需求,还是一样的不会,还是会跑过来发帖,如此循环。自己抽点时间下功夫研究一下是会死还是会怎样。高不高人一等我不知道,但是我知道我绝对不会招聘类似这样的人。
  • 楼主 kvkboy 6月前
    引用 48
    @ty89
    我又变成伸手党了? 扣帽子倒是扣的比谁都厉害啊,玻璃心不能上网,你这种杠精就能了?请问您是哪一家公司的 HR 还是领导,说出来让大家避嫌。

    你家着火还是发水,我遇到问题想集思广益问问大家想法,我是让你用嘴巴敲键盘打一个代码了还是耽误你每分钟百万的薪资了,上来嘴巴臭就开始喷还敢这么自信?你懂就懂不懂就不懂,你一定找骂何必呢,自己爽
  • 楼主 kvkboy 6月前
    引用 49
    我他妈就不理解了,我碰到一个问题,想知道答案或者思路而已,你懂就懂,热心的就帮帮我,不懂就略过就好了。

    提问->解答,就这么单线的剧情,一定要杠杠杠,杠你
  • tctc4869 6月前
    引用 50
    @kvkboy 我给楼主波点冷水把。楼主,如果你想要实现“在线的低代码开发平台。开发完后直接线上部署,可以开发部署多个实例,无需关心后端前端数据库,只需考虑页面托拉拽设计,表单设计,数据建模等”,这种程度的低代码开发平台,那难度可高了,可以称为 aPaaS 级别应用。这可不是单单是数据库的问题。你可以搜一下 aPaaS 是什么意思。

    楼主,如果你想做这种程度的低代码开发,那你要做的东西可多了。
  • 楼主 kvkboy 6月前
    引用 51
    @tctc4869
    是有点这个意思,但不是说一开始就要这么高级别,数据中台和业务中台我们都有了(虽然挺破),我不太懂我们 leader 想法是怎么样,我只是进入这个项目,先开始整体的考虑,要求现在只是就是先打一个底子,先给内部业务人员使用,一些简单的管理 OA 系统、审批流程、问卷调查就通过这个平台让产品或业务人员自己通过拖拉组件设计,使用
  • 楼主 kvkboy 6月前
    引用 52
    @tctc4869
    这玩意我用了氚云和那个钉钉云枢之后,我就发现,很难了很难了,是个难度很高的平台级别的产品,具体肯定是要交给大佬们考虑了,问题不大我只是个默默无闻的小搬砖,只是好奇他们这种的设计思路是什么样的,先整体了解一下
  • tctc4869 6月前
    引用 53
    你要先从后端开始,你先不要考虑前端的问题,所以表单托拉拽,数据建模设计这个先扔在一边,还有数据库也扔一边去。

    你先做到后端零代码开发。没有数据库也可以做,只不过实现的功能很少,但是至少实现后端零代码开发后,那么低代码开发的最根本基础是搭建好了。然后再去考虑数据库,表单托拉拽,数据建模这些高级的问题。后端零代码开发的关键就是 WebMVC 那一块配置。
  • tctc4869 6月前
    引用 54
    @kvkboy 他们的实现的低代码开发平台思路,这里是说不清的。可以写个长篇大论
  • 楼主 kvkboy 6月前
    引用 55
    @tctc4869
    嗯我开始有点点理解你的意思了,多谢解答!
    突然发现今天首页流突然多了几个关于低代码平台的贴子,大家都纷纷表示这玩意前仆后继的送死,看的我慌的一批
  • tctc4869 6月前
    引用 56
    @kvkboy 关于 http 测试工具,你想想为什么只有 http 客户端模拟测试工具软件,http 服务端模拟工具软件一个都没有呢。
  • tctc4869 6月前
    引用 57
    @kvkboy 你的第一步就是重新设计一个 MVC 框架,这不是减少代码量的 mvc 框架,是为了零代码配置 mvc 而设计的 mvc 框架。
  • 游客
    58
返回