最近要准备搞一个低代码平台,类似氚云、云枢那样,有一些问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kvkboy
V2EX    程序员

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

  •  a href="Javascript:" Onclick="downVoteTopic(684010);" class="vote">
  •   kvkboy 2020-06-23 10:44:29 +08:00 8538 次点击
    这是一个创建于 1941 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言    2020-06-23 11:26:39 +08:00

    氚云

    氚云

    番茄表单

    番茄表单

    第 2 条附言    2020-06-23 13:52:42 +08:00
    我只是单纯的有个疑问,提出一个问题,希望大家帮帮我给我个思路。

    而不是大家说我学艺不精数据库都不懂做不了平台,或者我关注点不对之类的,

    仅仅希望闻道解惑,如此而已。
    第 3 条附言    2020-06-23 15:48:05 +08:00
    我真是服了,怪我放在了程序员区而不是问与答区

    我提个问题,兄弟们知道答案的心好帮帮我,我得到解答了皆大欢喜,互相交流就行,

    总是会有人侧面背刺喜欢教育人,不高位压制一下满足不了自己的成就感

    都是陌生人不认识的,杠什么杠呢,我问你先有鸡还是先有蛋,你他妈的气冷抖跟我说,世道都这样了我还竟然问出这个问题,不如多花心思拯救世界?
    第 4 条附言    2020-06-24 13:46:44 +08:00
    听闻近几年网上杠精多,终日潜水不常冲浪,今日一见,大开眼界。

    那我就满足你这个杠精,你好,我是学生,我很努力,但是我不太懂,您能帮帮我吗,希望您给我代码,帮我写好吗,

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

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

    但 NoSQL 直接嵌套 BSON 存储会更好。
    majiaxin110
        12
    majiaxin110  
       2020-06-23 12:38:08 +08:00
    那么应该考虑模型建立的时候对字段抽象,字段可以拥有表示类型的属性,或者采用继承关系表示多种字段。用户创建一个个性化表单则是多种字段的组合。也就是说,我觉得只要正确分析建模,底层数据库使用哪一种都是可以的。
    mnssbe
        13
    mnssbe  
       2020-06-23 12:57:56 +08:00   1
    数据库怎么用都没研究明白, 要做这个平台我看够呛
    FarAhead
        14
    FarAhead  
       2020-06-23 13:37:15 +08:00
    tctc4869
        15
    tctc4869  
       2020-06-23 13:40:35 +08:00
    楼主,低代码开发,要一步一步来,不要一口吃成一个胖子。

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

    你家着火还是发水,我遇到问题想集思广益问问大家想法,我是让你用嘴巴敲键盘打一个代码了还是耽误你每分钟百万的薪资了,上来嘴巴臭就开始喷还敢这么自信?你懂就懂不懂就不懂,你一定找骂何必呢,自己爽却没了又恶心大家。

    而且哪知眼睛看到我要问怎么实现,我求你用你嘴巴敲键盘了还是什么,不爱看你还点进来,你贱不贱,都陌生人一定要爽一下彰显什么呢?

    我遇到疑惑发现没什么好思路,发帖让大家帮我拓宽一下思维,技术交流都能被你说的这么不堪入目,那我建议你以后远离网站,远离 github,远离开源,你为什么不下哭功夫去研究以下是会死还是会怎么样?

    希望您在公司顺风顺水,步步升高,高人一等
    kvkboy
        48
    kvkboy  
    OP
       2020-06-24 13:53:40 +08:00
    我他妈就不理解了,我碰到一个问题,想知道答案或者思路而已,你懂就懂,热心的就帮帮我,不懂就略过就好了。

    提问->解答,就这么单线的剧情,一定要杠杠杠,杠你杠。

    本来你一天的好心情一定要刺激我这个十级喷子喷一顿,然后自己受不了这个气,一天都没了,何必呢。
    tctc4869
        49
    tctc4869  
       2020-06-24 14:16:12 +08:00
    @kvkboy 我给楼主波点冷水把。楼主,如果你想要实现“在线的低代码开发平台。开发完后直接线上部署,可以开发部署多个实例,无需关心后端前端数据库,只需考虑页面托拉拽设计,表单设计,数据建模等”,这种程度的低代码开发平台,那难度可高了,可以称为 aPaaS 级别应用。这可不是单单是数据库的问题。你可以搜一下 aPaaS 是什么意思。

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

    你先做到后端零代码开发。没有数据库也可以做,只不过实现的功能很少,但是至少实现后端零代码开发后,那么低代码开发的最根本基础是搭建好了。然后再去考虑数据库,表单托拉拽,数据建模这些高级的问题。后端零代码开发的关键就是 WebMVC 那一块配置。
    tctc4869
        53
    tctc4869  
       2020-06-24 14:58:33 +08:00
    @kvkboy 他们的实现的低代码开发平台思路,这里是说不清的。可以写个长篇大论
    kvkboy
        span class="no">54
    kvkboy  
    OP
       2020-06-24 15:56:49 +08:00
    @tctc4869
    嗯我开始有点点理解你的意思了,多谢解答!
    突然发现今天首页流突然多了几个关于低代码平台的贴子,大家都纷纷表示这玩意前仆后继的送死,看的我慌的一批
    tctc4869
        55
    tctc4869  
       2020-06-24 17:35:16 +08:00
    @kvkboy 关于 http 测试工具,你想想为什么只有 http 客户端模拟测试工具软件,http 服务端模拟工具软件一个都没有呢。
    tctc4869
        56
    tctc4869  
       2020-06-26 18:42:18 +08:00 via Android
    @kvkboy 你的第一步就是重新设计一个 MVC 框架,这不是减少代码量的 mvc 框架,是为了零代码配置 mvc 而设计的 mvc 框架。
    cloudhuang
        57
    cloudhuang  
       2021-04-08 17:50:08 +08:00
    具体的什么数据库,如何存储,其实从大的角度聊不出什么来,要么关系型数据库,但是大体上直接存 JSON,比如某软的 SharePoint,直接大字段存 XML,或者 NoSQL 这种 schemaless 的方式,初期比较简单。

    我觉得两个层面的问题是值得讨论的:
    1. 前端表单和后端对象(表格)的绑定问题
    2. 如何做多租户

    不知道楼主现在的实现是如何的?
    ideal1412
        58
    ideal1412  
       2021-08-12 12:18:22 +08:00
    有思路可以给楼主借鉴一下,我做 salesforce 开发几年了,salesforce Paas 平台应该是全球最强的。里面一个关键概念就是元数据,描述数据的数据。比如说前端数据建模设计,最后都是元数据,只不过是描述数据本身的一种数据。所以你要做的是,如果表示,存储,和渲染元数据
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5090 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 09:20 PVG 17:20 LAX 02:20 JFK 05:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86