开发云数据库

1、云数据库概述

云数据库是一款端云协同的数据库产品,是AGC云开发(AGC Serverless)关键服务之一,为AGC构建了MBaas(Mobile Backend as a Service,移动后端即服务)能力。云数据库提供了端云数据的协同管理、统一的数据模型和丰富的数据管理API接口等能力,端侧可以编写少量的代码实现AGC云端云数据库的交互。

云数据库采用基于对象模型的数据存储结构,与常见的关系数据库(MySQL,Oracle等)类似,包含数据表、表字段、表字段值、主键,以及表操作权限。唯一不同在于存储区,数据以对象的形式存储在不同的存储区中,每一个对象,都是一条完整的数据记录。存储区是一个独立的数据存储区域,每个存储区拥有完全相同的对象类型定义(也就是数据表),可以根据业务能力为不同用户划分不同的存储区。

云数据库对象类型、存储区以及数据,可以通过AGC控制台定义、创建和管理,也可以通过一站式集成开发工具DevEco Studio定义、创建和管理。云数据库支持多种数据类型,包括字符串、数值、文本、日期等。

云数据库还提供了多重数据安全策略,基于隐私或者敏感数据的全程加密管理能力,加密字段的数据在端侧会被加密,然后再以密文形式发送并存储到云数据库中。同时,提供基于角色的权限管理模型,预置4种角色和3种权限,来保证数据的安全,同时简化了权限管理操作。

2、数据库模型概述

云数据库是一款基于对象模型的数据库,采用存储区、对象类型和对象三级结构。每个应用在开通云数据库服务后,都会实例化一个云数据库实例,该实例中可以创建多个对象类型(数据表)、多个存储区。一个对象类型的数据可以对应一个存储区,也可以对应多个存储区。

对象类型(ObjectType):用于定义存储对象的集合,不同的对象类型对应的不同数据结构。每创建一个对象类型,云数据库会在每个存储区实例化一个与之结构相应的对象类型,用于存储对应的数据。

存储区(CloudDBZone):是一个独立的数据存储区域,多个数据存储区相互独立。每个存储区拥有完全相同的对象类型定义,开发者可以根据业务需要自定义存储区中存储的对象。

对象(CloudDBZoneObject):是云数据库基本操作单元,每个对象,都是一条完整的数据记录。

1)数据类型

云数据库支持多种数据类型,如下表所示:

数据类型描述取值范围说明
String字符串类型最大长度200字符串长度超过200,请使用Text类型。
Boolean布尔类型true:真;false:假。-
Byte单字节整型-128 ~ +128-
Short双字节整型-32,768 ~ +32,767-
Integer四字节整型-2,147,483,648 ~ +2,147,483,647-
Long八字节整型-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807-
Float单精度浮点数-3.40E+38 ~ +3.40E+38,6位十进制有效数字。-
Double双精度浮点数-1.79E+308 ~ +1.79E+308,15位十进制有效数字。-
ByteArray字节数组-一般用于文件类型的数据存储,如图片、文档和视频等。
Text文本类型--
Date日期类型--
IntAutoIncrement自增类型,从1开始自增,Integet类型。1 ~ 2,147,483,647
LongAutIncrement自增类型,从1开始自增,Long类型。1 ~ 9,223,372,036,854,775,807

2) 权限管理

云数据库支持对所有用户的访问进行鉴权,保障应用数据的安全。云侧访问云数据库的用户角色默认为管理员角色,即从AGC控制台、云函数和Server端访问云数据库角色,该角色默认拥有所有权限。端侧为应用程序运行端,端侧的数据操作有严格的安全规则限制,其数据的读写权限根据云侧权限配置表进行控制。

云数据库预置4种角色和3种权限,如下表所示:

角色queryupsertdelete说明
所有人代表所有用户,包含认证和非认证用户。该角色默认拥有query权限,可自定义配置upsert和delete权限,但不建议将upsert和delete权限配置给所有人角色。当对象类型中设置了加密字段之后,表示开启全程加密功能,此时所有人角色将不会拥有query、upsert和delete权限,且不允许修改。
认证用户经过AGC登录认证的用户。该角色默认拥有query权限,可自定义配置upsert和delete权限。当对象类型中设置了加密字段之后,表示开启全程加密功能,此时认证用户角色将不会拥有query、upsert和delete权限,且不允许修改。
数据创建者经过认证的数据创建用户。该角色默认拥有所有权限,且可自定义配置所有权限。每条数据都有其对应的数据创建人(即应用用户),每个数据创建者仅可以upsert或者delete自己创建的数据,不能upsert或者delete他人创建的数据。数据创建者的信息保存在数据记录的系统表中。
管理员应用开发者,主要是指通过AGC控制台或FaaS(Function as a Service,函数即服务)侧访问云数据库的角色。该角色默认拥有所有权限,且可自定义配置所有权限。管理员可以管理并配置其他角色的权限。

3、开发云数据库

1)创建对象类型

  • 展开云侧工程目录,右击“clouddb/objecttype”目录,选择“New > Cloud DB Object Type”。

image-20250622214951747

  • 在弹出的新建对象类型窗口中输入对象类型名称(下文以喂养记录“Feeding”对象类型为例)后,点击OK按钮完成创建。对象类型命名必须符合以下规范:
    • 只能包含大小写字母,数字,下划线,并且至少包含字母类型。
    • 必须以字母开头,以字母或者数字结尾,不允许以“sqlite_”开头,不允许以下划线结尾。
    • 不允许使用如下系统保留名称:naturalbase_metadata、objecttypeinfohelper、t_data_upgrade_info、t_index_schema、t_nstore_config、t_schema_negotiate_info、t_metadata_schema、t_nstore_permission、t_system_config。

image-20250622215003034

  • DevEco Studio工具会根据通用云开发模板内置的对象类型模板新建对象类型JSON文件”Feeding.json“,并会在编码区自动打开该文件。文件结构属性包括对象类型名称(objectTypeName)、对象类型配置字段信息(fields)、对象类型索引信息(indexes)、对象类型角色权限(permissions)。

image-20250622215009020

  • 根据业务需要在“fields”中配置对象类型字段信息,字段属性如下表所示。
参数必须(M)/可选(O)说明
fieldNameM字段名称。
filedTypeM字段的数据类型。
belongPrimaryKeyO设置该字段是否为对象类型的主键,默认值为false。
notNullO设置字段值是否为非空,默认为false。
isNeedEncryptO设置字段是否需要加密,开启全程加密数据管理功能,默认值为false。
isSensitiveO设置字段是否为敏感字段,默认值为false。
defaultValueO字段为非空时,必须设置默认值。

为Feeding对象类型配置如下字段:

filedNamefieldTypebelongPrimaryKeynotNullisNeedEncryptdefaultValue
idIntegertruetrue
typeString
leftDurationInteger
rightDurationInterger
totalDurationInteger
startTimeDate
"fields": [{"fieldName": "id", "fieldType": "Integer", "notNull": true, "belongPrimaryKey": true},{"fieldName": "type", "fieldType": "String", "notNull": true, "defaultValue": "母乳"},{"fieldName": "leftDuration", "fieldType": "Integer"},{"fieldName": "rightDuration", "fieldType": "Integer"},{"fieldName": "totalDuration", "fieldType": "Integer"},{"fieldName": "startTime", "fieldType": "Date"}
]
  • 根据业务需要在“indexes”中为该对象类型配置索引、索引包含的字段、以及索引包含的字段的排序方式。索引属性如下表所示。
参数必须(M)/可选(O)说明
indexNameM索引名称。
indexList > fieldNameM索引包含的字段。
indexList > sortTypeM索引包含的字段的排序方式,支持升序或降序。

为Feeding对象类型配置如下索引:

indexNamefieldNamesortType
IND_20251034idDESC
"indexes": [{"indexName": "IND_20251034", "indexList": [{"fieldName":"id","sortType":"DESC"}]}
]
  • 根据实际业务在“permissions”中设置各角色是否具有该对象类型的Read、Upsert(包含新增和修改)和Delete权限。角色权限属性如下表所示。
参数必须(M)/可选(O)说明
roleM用户角色。
rightsM授予角色的权限,包括Read、Upsert(包括新增和修改)和Delete权限。

为Feeding对象类型配置如下权限:

角色ReadUpsertDelete
World
Authenticated
Creator
Administrator
"permissions": [{"role": "World", "rights": ["Read"]},{"role": "Authenticated", "rights": ["Read", "Upsert"]},{"role": "Creator", "rights": ["Read", "Upsert", "Delete"]},{"role": "Administrator", "rights": ["Read", "Upsert", "Delete"]}
]

2)添加数据条目

为对象类型添加数据条目,并配置数据所在的存储区,当前支持手动创建和自动生成数据条目文件,建议使用DevEco Studio工具提供的自动生成数据条目文件。右击对象类型JSON文件,选择“Generate Data Entry”,依旧以对象类型“Feeding”为例,包含“id”、“type”、“leftDuration”、“rightDuration”、“totalDuration”、“startTime”字段。

image-20250622215018596

  • 在弹出的“New Cloud DB Data Entry”窗口内,为即将生成的数据条目文件定义名称。此处取默认值“d_Feeding”为例。

image-20250622215024245

  • 会根据DevEco Studio工具预置通用云开发模板提供的数据条目模板自动在“clouddb/dataentry”目录下为对象类型“Welcome”生成数据条目文件“d_Feeding”,该文件中已为开发者预置了默认的存储区,所属对象类型名称(“Welcome”),以及对象类型的字段名(“id”、“type”、“leftDuration”、“rightDuration”、“totalDuration”、“startTime”)。
    • cloudDBZoneName:配置存储区名称,支持自定义,需要开发者记住存储区名称,在使用API访问云数据库时需要使用该值获取对象类型数据。
    • objectTypeName:对象类型名称。
    • objects:配置当前对象类型中所有字段的值,即写入数据。一个对象即为一条数据,可以通过新建一个对象来为字段赋新值,也可以修改某个对象下字段的值。需要注意的是,主键或加密字段的值不支持修改。
{"cloudDBZoneName": "default","objectTypeName": "Feeding","objects": [{"id": 1,"type": "母乳","leftDuration": 10,"rightDuration": 10,"totalDuration": 10,"startTime": 1747104297569},{"id": 2,"type": "母乳","leftDuration": 20,"rightDuration": 20,"totalDuration": 20,"startTime": 1747104297569}]
}

3)部署云数据库

完成对象类型创建以及对象类型数据条目创建后,开发者可以通过右击对象类型或者数据条目直接将对象类型和数据条目部署到AGC云端。DevEco Studio工具支持单个对象类型和数据条目部署,也支持批量部署。

  • 单个对象类型部署,右击对象类型名称。若批量部署,需要右击“clouddb”目录,选择“Deploy Cloud DB”。

image-20250622215034834

  • 可以在开发工具主界面底部状态栏右侧查看云数据库打包与部署进度。等待部署云数据库,直至出现“Deploy successfully”消息,表示云数据库已成功部署。

image-20250622215044488

  • 云数据库部署成功后,DevEco Studio工具会自动从AGC云端下载云数据库的schema文件,并将该文件存储在端侧工程“AppScope/resources/rawfile“目录,文件名称为”schema.json“,该文件是端侧API访问云数据库必须引入的配置文件。

image-20250622215049459

4)查看云数据库部署情况

打开云开发管理面板,点击面板中的“CloudDev > Go to console”或者“Serverless > Cloud DB > Go to console”打开AGC控制台。两者区别在于第一种方式需要在AGC控制台页面点击左侧“云数据库”菜单,而第二种方式可以直接定位到AGC控制台云数据库子控制台。分别点击“对象类型”、“存储区”与“数据”页签,查看通过DevEco Studio工具开发并部署的云数据库资源是否已经成功部署到AGC云端。

image-20250622215055453

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88028.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IEEE使用遇到的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、如何在已知期刊中查找自己方向的论文 前言 IEEE 使用相关问题记录 一、如何在已知期刊中查找自己方向的论文 比如在IEEE Transactions on Visualization …

深入解析C#数组协变与克隆机制

—— 值类型与引用类型的内存行为差异 🔍 一、数组协变(Array Covariance) 核心条件: 仅适用于引用类型数组被赋值对象与数组基类型需存在隐式/显式转换关系 class Animal {} class Dog : Animal {}Animal[] animals new Dog…

零散问题一

1.函数重载的原理 名称修饰(Name Mangling) 作用:编译器在编译时对函数名进行编码,生成唯一的内部标识符,使得同名函数能通过参数列表的差异被区分。示例: void func(int a); // 修饰后可能为 _Z4funcivo…

React Native【详解】内置 API

屏幕 Dimensions 获取屏幕信息 import { Dimensions } from "react-native"; export default function demo() {const { width, height, scale, fontScale } Dimensions.get("window");console.log(width, height, scale, fontScale); }参数为 window 时…

Selenium自动化测试常见的异常处理

在软件开发和测试领域,Selenium作为一种广泛使用的自动化测试工具,扮演着至关重要的角色。随着自动化测试的不断普及,如何在测试过程中有效捕获并处理异常,成为了每个测试工程师必须掌握的技能。本文旨在深入探讨Selenium异常处理的方法,通过丰富的案例和代码,帮助新手朋…

企业级安全实践:SSL 加密与权限管理(二)

权限管理:企业数据的守护者 权限管理的基本概念与重要性 权限管理,是指根据系统设置的安全规则或策略,用户可以访问且仅能访问自己被授权的资源,不多不少 。它是企业信息安全体系的重要组成部分,旨在确保只有授权的人…

AMAT P5000 CVDFDT CVDMAINT Precision 5000 Mark 操作 电气原理 PCB图 电路图等

AMAT P5000 CVDFDT CVDMAINT Precision 5000 Mark 操作 电气原理 PCB图 电路图等

深入浅出:语言模型中的“自回归生成”是什么?

在当今大语言模型(LLM)如 ChatGPT、GPT-4、文心一言、通义千问等风靡的时代,“自回归生成”是驱动它们流畅对话、创作文本的核心引擎。 理解它是深入掌握LLM工作原理的关键一步。本文将用清晰易懂的语言,结合实例,为你…

LLMs基础学习(八)强化学习专题(5)

LLMs基础学习(八)强化学习专题(5) 文章目录 LLMs基础学习(八)强化学习专题(5)重要性采样(Importance Sampling)权重计算逻辑两种实现形式使用注意事项 PPO 与…

深入理解“回调地狱“(Callback Hell)

"回调地狱"是异步编程中常见的问题,指由于过多嵌套的回调函数导致的代码难以理解和维护的情况。 一、什么是回调地狱 基本概念 回调地狱(Callback Hell/Pyramid of Doom)是指: 多层嵌套的回调函数形成的代码结构 代码向右缩进越来越深&…

Oracle 的 TCP.SEND_TIMEOUT 参数

Oracle 的 TCP.SEND_TIMEOUT 参数 一 参数基本概念 TCP.SEND_TIMEOUT 是 Oracle Net Services 中的一个重要参数,用于控制 TCP 数据发送操作的最长等待时间。 二 关键特性 特性说明参数类型sqlnet.ora 配置文件参数默认值none (无超时限制)单位ms, sec, min, 默…

[Nginx] 配置中的sendfile参数详解:从传统 IO 到零拷贝的性能优化

一、sendfile 是什么? sendfile 是 Nginx 中一个关键的配置参数,用于控制是否使用操作系统提供的 sendfile() 系统调用来传输文件。 sendfile on;:启用零拷贝技术,直接由内核将文件发送到网络。sendfile off;:使用传统…

(LeetCode 每日一题) 2138. 将字符串拆分为若干长度为 k 的组 (字符串、模拟)

题目&#xff1a;2138. 将字符串拆分为若干长度为 k 的组 思路&#xff1a;字符串模拟&#xff0c;时间复杂度0(n)。 C版本&#xff1a; class Solution { public:vector<string> divideString(string s, int k, char fill) {vector<string> v;int ns.size();for…

C++法则1:在 C++ 中,所有的具名变量都是左值,即使它们的类型是右值引用。

看下面例子&#xff1a; test(0)调用的是函数是&#xff1a; template<typename T> void test(T&& t) {std::cout << "右值引用" << std::endl; }test(n)调用的是函数是&#xff1a; template<typename T> void test(T& t) {st…

python如何使用正则提取文章所有形容词

在Python中使用正则表达式提取文章中的形容词需要结合语言特性处理。以下是分步解决方案&#xff1a; 英文场景解决方案&#xff08;推荐使用专业NLP库&#xff09;&#xff1a; import re import nltk nltk.download(averaged_perceptron_tagger) # 首次使用需要下载text …

低代码平台的数据归集及治理

低代码平台或无码平台&#xff0c;在建表单的时候&#xff0c;都是每一个表单一个json的格式文件&#xff0c;存储在Nosql数据库中。在开发的过程中&#xff0c;有以下主要的需求 1、json格式实时的转为关系数据库的格式&#xff0c;存入到关系数据库中 需要在流程结束的时候&…

Origin:如何使柱状图看起来悬空

想得到这样的一个没有下轴的柱状图&#xff0c;操作步骤如下: 1.点击下轴坐标轴 2.修改效果

Vite 原理深入剖析

1. 整体架构设计 Vite 的整体架构由几个关键模块组成,每个模块都对应具体的源码文件: 开发服务器:用于处理浏览器请求、模块解析和热更新。开发服务器的代码主要位于 src/node/server/index.ts。 模块解析与热更新:通过模块中间件拦截请求,处理代码转换与热模块替换。相关…

微处理器原理与应用篇---常见基础知识(5)

一、什么是嵌入式系统 嵌入式系统是一种以应用为中心、以计算机技术为基础、软硬件可裁剪的专用计算机系统&#xff0c;通常嵌入在其他设备中&#xff0c;用于实现特定功能。它广泛存在于消费电子、工业控制、汽车电子、医疗设备等领域&#xff0c;是现代智能设备的核心 “大脑…

Redis 8.0向量库 vs 传统向量数据库:大模型知识库开发选型全指南

在大模型知识库开发领域&#xff0c;向量数据库的选择直接影响系统的性能、扩展性和开发效率。随着Redis 8.0推出Vector Set数据结构并增强向量搜索能力&#xff0c;开发者面临新的选择困境&#xff1a;是采用传统专用向量数据库&#xff08;如Milvus、Pinecone&#xff09;&am…