数据存储服务是基于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": "女"
}
]
}
]
}