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

数据库结构

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

EMAS 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": 1152,
            "name": "性别",
            "values": [
                {
                    "id": 3872,
                    "value": "男"
                },
                {
                    "id": 3873,
                    "value": "女"
                }
            ]
        }
    ],
    "sku": [
        {
            "id": 1153,
            "stock": 30,
            "attributeIds": [
                3871,
                3872
            ],
            "attributes": [
                {
                    "key": "尺寸",
                    "value": "S"
                },
                {
                    "key": "性别",
                    "value": "女"
                }
            ]
        }
    ]
}