数据存储服务是基于MongoDB托管在云端的数据库,数据以JSON格式存储。作为开发者,您可以在客户端内直接操作数据,也可以在云函数中读写数据。

数据库结构

小程序Serverless服务使用的是MongoDB,以JSON格式存储数据。数据库中的每条记录都是一个JSON格式的对象,一个数据库可以包含多个集合(相当于关系型数据库中的表),每个集合可看做一个JSON数组。

小程序Serverless MongoDB数据库和关系型数据库MySQL的对比如下表所示。

分布式文件存储数据库 (MongoDB) 关系型数据库 (MySQL)
数据库 (database) 数据库 (database)
表 (collection) 表 (table)
记录 (document) 行(row)
域 (field) 列(column)
索引 (index) 索引 (index)
自动将_id字段作为主键 主键 (primary key)

数据结构设计策略

MongoDB是一个基于分布式文件存储的NoSQL数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。由于数据的灵活性以及通用性,在设计数据结构时也需要根据数据之间的关系来决定如何存储。

以电商平台为例。通常电商平台的核心数据包含产品、用户、购物车和订单。订单是由用户购买产品产生的,订单就可以认为是产品和用户之间的关联关系产生的。在订单产生之前,产品和用户之间的关联关系是通过购物车来维持的。

针对上述案例,可以设计一个名称为products的产品表存储以下信息:

  • 产品基础信息:包含展示信息、商品规格等。
  • 属性信息:属性都归属于一个产品,属于N对1的关系。因此作为子文档存储在products集合中较合适。
  • 库存及价格信息:库存不仅仅跟产品关联,更直接对应产品属性。因此也应该放在products集合中。

最终的数据库设计如下:

{
  "id": 5573,
  "name": "Egg T恤",
  "desc": {
    "short": "限量版 Egg T恤,穿上它你离极客也不远了",
    "long": "这是一段非常长的描述",
    "category": {
      "_id": "48bf43a..29e90bc",
      "name": "上衣",
    },
  },
  "attributes": [
    {
      "id": 1151,
      "name": "尺寸",
      "values": [
        {
          "id": 3871,
          "value": "S",
        },
        {
          "id": 3874,
          "value": "M",
        },
        {
          "id": 3875,
          "value": "L",
        }
      ],
    },
    {
      "id": 1151,
      "name": "性别",
      "values": [
        {
          "id": 3872,
          "value": "男",
        },
        {
          "id": 3873,
          "value": "女",
        }
      ],
    }
  ],
  "sku": [
    {
      "id": 1153,
      "stock": 30,
      "attributeIds": [ 3871, 3872 ],
      "attributes": [
        {
          "key": "尺寸",
          "value": "S",
        },
        {
          "key": "性别",
          "value": "女",
        }
      ],
    },
  ]
}