Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rails Based SaaS Applications - Schemaless and ...

Rails Based SaaS Applications - Schemaless and Multi-Tenancy (中文)

金数据( https://jinshuju.net )是一个基于 Ruby on Rails 开发的 SaaS 应用。
这里分享金数据在研发过程中的两个实践:
1,使用 Schemaless 模型,实现通用表单/数据系统
2,使用 Multi-Tenancy 模型,将现有个人版扩展成为企业版

Avatar for Feng Zhichao

Feng Zhichao

October 25, 2018
Tweet

Other Decks in Programming

Transcript

  1. 2 冯智超 @⾦金金数据 @⻄西安 @flankerfc @fengzhichao 喜欢 #编程 #⻰龙珠 20

    years+ 编程经验 Basic @1997 Ruby @2006 #RPG_Maker Rails @2011
  2. 3 帮助⽤用户收集和管理理⽇日常⼯工作中的数据,提升⼯工作效率。 任何⾏行行业和岗位的⼈人员,⽆无需特殊技能,都可以⽅方便便的创 建出符合业务需求的表单。 ⾦金金数据 ⼈人⼈人可⽤用的在线表单⼯工具 ⽀支付订单 ⾦金金数据⽀支持在线收款功能,零⼿手续 费 +

    即时到账,回款快速⽆无账期。 ⽀支持⽀支付宝,微信等渠道,⽅方便便在 各种场景下,向任何⼈人发起收款。 线上预约 ⾦金金数据是⼈人⼈人可⽤用的在线表单⼯工具 , 帮助⽤用户收集和管理理⽇日常⼯工作中的 数据,提升⼯工作效率。 在线考试 名师讲堂、试听课、夏令营、线下 活动、促销活动
  3. 5

  4. 7

  5. 9

  6. 11

  7. 14 鲜花订单 id created_at mobile flower_type quantity KEY DateTime String

    Enum Number 101 10-13 138… rose 99 意⻅见反馈 id created_at rating feedback KEY DateTime Number String 102 10-13 8 Very good …
  8. 15 鲜花订单 id created_at mobile flower_type quantity KEY DateTime String

    Enum Number 101 10-13 138… rose 99 意⻅见反馈 id created_at rating feedback KEY DateTime Number String 102 10-13 8 Very good …
  9. 16 鲜花订单 id created_at field_1 field_2 field_3 KEY DateTime String

    Enum Number 101 10-13 138… rose 99 意⻅见反馈 id created_at field_1 field_2 KEY DateTime Number String 102 10-13 8 Very good …
  10. 17 鲜花订单 id created_at field_1 field_2 field_3 KEY DateTime String

    Enum Number 101 10-13 138… rose 99 意⻅见反馈 id created_at field_1 field_2 KEY DateTime Number String 102 10-13 8 Very good …
  11. 18 通⽤用数据表 id created_at field_1 field_2 field_3 field_4 field_5 KEY

    DateTime String Enum Number Number String 101 10-13 138… rose 99 102 10-13 8 Very good … ⽅方案⼀一:扩展字段 Custom Fields
  12. 19 通⽤用数据表 id created_at fields KEY DateTime JSON 101 10-13

    {“mobile”: “1388888888”, “flower_type”: “rose”, “quantity”: 99} 102 10-13 {“rating”: 8, “feedback”: “very good”} ⽅方案⼆二:嵌⼊入结构化数据 embedded structured data
  13. 20 通⽤用数据表 id created_at KEY DateTime 101 10-13 102 10-13

    属性表 id entry_id key value KEY KEY String 1 101 mobile 138888 2 101 flower_type rose 3 101 quantity 99 4 102 rating 8 5 102 feedback Very good ⽅方案三:关联属性表 Attribute Table
  14. 21 通⽤用数据表 id created_at KEY DateTime 101 10-13 102 10-13

    属性表 id entry_id key value KEY KEY String 1 101 mobile 138888 2 101 flower_type rose 3 101 quantity 99 4 102 rating 8 5 102 feedback Very good ⽅方案三:关联属性表 Attribute Table
  15. 22 通⽤用数据表 id created_at KEY DateTime 101 10-13 102 10-13

    属性表 id entry_id key value KEY KEY String 1 101 mobile 138888 2 101 flower_type rose 3 101 quantity 99 4 102 rating 8 5 102 feedback Very good ⽅方案三:关联属性表 Attribute Table
  16. 23 field_x 存储 Schema Storage Schema • String • Number

    • Date • Hash • Array • ID • …
  17. 27 Ruby 动态类型语⾔言 field_1: “13888888888” field_2: “rose” field_3: 99 field_1:

    8 field_2: “very good” ⽂文档数据库 动态类型数据模型
  18. 30 Schema-less 数据模型 元数据表:表单的定义 • 基本信息(创建⼈人、⽇日期、状态…) • 业务字段(数组、单表继承) • Key、标题

    • 类型 • ⽂文本、单选、下拉框、数字… • 商品、计算、关联、表格… • 校验规则、默认值 • 业务属性
  19. 36

  20. 37

  21. 39

  22. 40

  23. 41

  24. 42

  25. 45 SaaS: Multi-Tenancy 多租户系统 • 租户 Tenant == 企业 Company

    • tenant_id == company_id • current_tenant == current_company
  26. 54

  27. 55