Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
58a838a4
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3200
Star
106
Fork
813
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
94
列表
看板
标记
里程碑
合并请求
70
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
94
Issue
94
列表
看板
标记
里程碑
合并请求
70
合并请求
70
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
58a838a4
编写于
12月 29, 2021
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: uniCloud
上级
ea797a05
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
109 addition
and
102 deletion
+109
-102
docs/uniCloud/db-performance.md
docs/uniCloud/db-performance.md
+2
-2
docs/uniCloud/hellodb.md
docs/uniCloud/hellodb.md
+1
-87
docs/uniCloud/init.md
docs/uniCloud/init.md
+12
-12
docs/uniCloud/price.md
docs/uniCloud/price.md
+94
-1
未找到文件。
docs/uniCloud/db-performance.md
浏览文件 @
58a838a4
...
@@ -53,11 +53,11 @@ module.exports = async function(event,context) {
...
@@ -53,11 +53,11 @@ module.exports = async function(event,context) {
### 抽样方法sample
### 抽样方法sample
sample操作在高频触发时会响应缓慢,使用前请务必确定自己的业务场景适合使用sample方法
sample操作在
大数据量
高频触发时会响应缓慢,使用前请务必确定自己的业务场景适合使用sample方法
## clientDB联表查询超时@client-db-lookup
## clientDB联表查询超时@client-db-lookup
请参考此文档调整优化,
[
使用getTemp进行联表查询
](
https://uniapp.dcloud.net.cn/uniCloud/
clientdb
?id=lookup-with-temp
)
请参考此文档调整优化,
[
使用getTemp进行联表查询
](
https://uniapp.dcloud.net.cn/uniCloud/
jql
?id=lookup-with-temp
)
## 慢查询日志@slow
## 慢查询日志@slow
...
...
docs/uniCloud/hellodb.md
浏览文件 @
58a838a4
...
@@ -602,90 +602,4 @@ uniCloud提供的`db_init.json`主要是为了对数据库进行初始化,并
...
@@ -602,90 +602,4 @@ uniCloud提供的`db_init.json`主要是为了对数据库进行初始化,并
### 云厂商之间的迁移@cross-provider
### 云厂商之间的迁移@cross-provider
目前可以使用云数据库的导入导出进行迁移,迁移数据库之前可以使用导出db_init.json功能将所有集合及索引导出。再使用数据导入导出功能进行迁移
文档移至:
[
在云厂商之间迁移数据库
](
uniCloud/price.md?id=cross-provider-db
)
> 也可以直接使用第三方封装好的插件:[unicloud数据库一键搬家工具,支持阿里云与腾讯云互转。支持跨账号转。](https://ext.dcloud.net.cn/plugin?id=6089)
\ No newline at end of file
#### 腾讯云迁移到阿里云@tencent-to-aliyun
迁移数据可以通过在腾讯云服务空间导出数据表为json文件,在阿里云服务空间导入json文件到表的方式进行迁移。
#### 阿里云迁移到腾讯云@aliyun-to-tencent
由于此前腾讯云并未完全支持ObjectId类型的数据,在阿里云迁移到腾讯云时需要注意处理一下
`ObjectId`
类型的数据,包括自动生成的_id字段以及关联到其他表的_id的字段。简单来说就是将导出的数据内的ObjectId类型的数据处理成字符串且不满足ObjectId的格式。
例:
```
js
// 原始数据
{
"
_id
"
:{
"
$oid
"
:
"
60fa6d25cd84d60001ec38a2
"
},
"
uid
"
:{
"
$oid
"
:
"
60fa6d1d2e5faa0001ade857
"
}}
// 调整后的数据
{
"
_id
"
:
"
60fa6d25cd84d60001ec38a2a
"
,
"
uid
"
:
"
60fa6d1d2e5faa0001ade857a
"
}
// 在结尾追加了一个“a”使其不满足ObjectId格式
```
以下为一个简单的脚本示例用于处理导出的json文件
如果将此文件存储为
`parse.js`
,使用
`node parse.js 输入文件相对或绝对路径 输出文件相对或绝对路径`
即可处理导出的json文件
```
js
const
fs
=
require
(
'
fs
'
)
const
path
=
require
(
'
path
'
)
const
readline
=
require
(
'
readline
'
)
const
cwd
=
process
.
cwd
()
const
inputPath
=
path
.
resolve
(
cwd
,
process
.
argv
[
2
])
const
outputPath
=
path
.
resolve
(
cwd
,
process
.
argv
[
3
])
if
(
fs
.
existsSync
(
outputPath
))
{
throw
new
Error
(
`输出路径(
${
outputPath
}
)已存在`
)
}
function
getType
(
val
)
{
return
Object
.
prototype
.
toString
.
call
(
val
).
slice
(
8
,
-
1
).
toLowerCase
()
}
function
parseRecord
(
obj
)
{
const
type
=
getType
(
obj
)
switch
(
type
)
{
case
'
object
'
:
if
(
obj
.
$oid
)
{
return
obj
.
$oid
+
'
a
'
}
const
keys
=
Object
.
keys
(
obj
)
for
(
let
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
const
key
=
keys
[
i
];
obj
[
key
]
=
parseRecord
(
obj
[
key
])
}
return
obj
case
'
array
'
:
for
(
let
i
=
0
;
i
<
obj
.
length
;
i
++
)
{
obj
[
i
]
=
parseRecord
(
obj
[
i
])
}
return
obj
default
:
return
obj
}
}
async
function
parseCollection
()
{
const
inputStream
=
fs
.
createReadStream
(
inputPath
)
const
outputStream
=
fs
.
createWriteStream
(
outputPath
)
const
rl
=
readline
.
createInterface
({
input
:
inputStream
});
for
await
(
const
line
of
rl
)
{
const
recordStr
=
line
.
trim
()
if
(
!
recordStr
)
{
continue
}
const
record
=
parseRecord
(
JSON
.
parse
(
recordStr
))
outputStream
.
write
(
JSON
.
stringify
(
record
)
+
'
\n
'
)
}
rl
.
close
()
console
.
log
(
`处理后的文件已输出到
${
outputPath
}
`
)
}
parseCollection
()
```
\ No newline at end of file
docs/uniCloud/init.md
浏览文件 @
58a838a4
...
@@ -22,12 +22,12 @@ function init(options):uniCloud
...
@@ -22,12 +22,12 @@ function init(options):uniCloud
**options 参数说明**
**options 参数说明**
|参数名
|类型 |必填 |默认值 |说明
|
|参数名
|类型 |必填 |默认值 |说明
|
|:-:
|:-: |:-: |:-: |:-:
|
|:-:
|:-: |:-: |:-: |:-:
|
|provider
|String |是 |- |aliyun、tencent
|
|provider
|String |是 |- |aliyun、tencent
|
|spaceId
|String |是 |- |服务空间ID,
**注意是服务空间ID,不是服务空间名称**
|
|spaceId
|String |是 |- |服务空间ID,
**注意是服务空间ID,不是服务空间名称**
|
|clientSecret |String |是
|- |仅阿里云支持,可以在
[
uniCloud控制台
](
https://unicloud.dcloud.net.cn
)
服务空间列表中查看
|
|clientSecret |String |是
|- |仅阿里云支持,可以在
[
uniCloud控制台
](
https://unicloud.dcloud.net.cn
)
服务空间列表中查看
|
|endpoint
|String |否 |
`https://api.bspapp.com`
|服务空间地址,仅阿里云侧支持 |
|endpoint
|String |否 |
`https://api.bspapp.com`
|服务空间地址,仅阿里云侧支持 |
**示例代码**
**示例代码**
...
@@ -68,9 +68,9 @@ db.collection('uni-id-users').get()
...
@@ -68,9 +68,9 @@ db.collection('uni-id-users').get()
**参数说明**
**参数说明**
|参数名
|类型 |必填 |默认值 |说明
|
|参数名
|类型 |必填 |默认值 |说明
|
|:-:
|:-: |:-: |:-: |:-:
|
|:-:
|:-: |:-: |:-: |:-:
|
|provider
|String |是 |- |aliyun、tencent
|
|provider
|String |是 |- |aliyun、tencent
|
|spaceId
|String |是 |- |服务空间ID,
**注意是服务空间ID,不是服务空间名称**
|
|spaceId
|String |是 |- |服务空间ID,
**注意是服务空间ID,不是服务空间名称**
|
|clientSecret |String |是 |-
|仅阿里云支持,可以在
[
uniCloud控制台
](
https://unicloud.dcloud.net.cn
)
服务空间列表中查看 |
|clientSecret |String |是 |- |仅阿里云支持,可以在
[
uniCloud控制台
](
https://unicloud.dcloud.net.cn
)
服务空间列表中查看 |
|endpoint
|String |否 |
`https://api.bspapp.com`
|服务空间地址,仅阿里云侧支持
|
|endpoint
|String |否 |
`https://api.bspapp.com`
|服务空间地址,仅阿里云侧支持
|
docs/uniCloud/price.md
浏览文件 @
58a838a4
...
@@ -606,4 +606,97 @@ uniCloud提供包月、按量计费两种计费方式(仅腾讯云),具体
...
@@ -606,4 +606,97 @@ uniCloud提供包月、按量计费两种计费方式(仅腾讯云),具体
## 发生故障时如何判断故障点
## 发生故障时如何判断故障点
当你的线上系统故障时,可以参考此文档判断责任归属:
[
如何判断是DCloud或阿里云或腾讯云的问题
](
https://uniapp.dcloud.io/uniCloud/faq?id=fault
)
当你的线上系统故障时,可以参考此文档判断责任归属:
[
如何判断是DCloud或阿里云或腾讯云的问题
](
https://uniapp.dcloud.io/uniCloud/faq?id=fault
)
\ No newline at end of file
## 云厂商之间的迁移@cross-provider
### 数据库迁移@cross-provider-db
目前可以使用云数据库的导入导出进行迁移,迁移数据库之前可以使用导出db_init.json功能将所有集合及索引导出。再使用数据导入导出功能进行迁移。导入导出请参考:
[
数据导入导出和备份
](
uniCloud/hellodb.md?id=dbmigration
)
> 也可以直接使用第三方封装好的插件:[unicloud数据库一键搬家工具,支持阿里云与腾讯云互转。支持跨账号转。](https://ext.dcloud.net.cn/plugin?id=6089)
#### 腾讯云迁移到阿里云@tencent-to-aliyun-db
迁移数据可以通过在腾讯云服务空间导出数据表为json文件,在阿里云服务空间导入json文件到表的方式进行迁移。
#### 阿里云迁移到腾讯云@aliyun-to-tencent-db
由于此前腾讯云并未完全支持ObjectId类型的数据,在阿里云迁移到腾讯云时需要注意处理一下
`ObjectId`
类型的数据,包括自动生成的_id字段以及关联到其他表的_id的字段。简单来说就是将导出的数据内的ObjectId类型的数据处理成字符串且不满足ObjectId的格式。
例:
```
js
// 原始数据
{
"
_id
"
:{
"
$oid
"
:
"
60fa6d25cd84d60001ec38a2
"
},
"
uid
"
:{
"
$oid
"
:
"
60fa6d1d2e5faa0001ade857
"
}}
// 调整后的数据
{
"
_id
"
:
"
60fa6d25cd84d60001ec38a2a
"
,
"
uid
"
:
"
60fa6d1d2e5faa0001ade857a
"
}
// 在结尾追加了一个“a”使其不满足ObjectId格式
```
以下为一个简单的脚本示例用于处理导出的json文件
如果将此文件存储为
`parse.js`
,使用
`node parse.js 输入文件相对或绝对路径 输出文件相对或绝对路径`
即可处理导出的json文件
```
js
const
fs
=
require
(
'
fs
'
)
const
path
=
require
(
'
path
'
)
const
readline
=
require
(
'
readline
'
)
const
cwd
=
process
.
cwd
()
const
inputPath
=
path
.
resolve
(
cwd
,
process
.
argv
[
2
])
const
outputPath
=
path
.
resolve
(
cwd
,
process
.
argv
[
3
])
if
(
fs
.
existsSync
(
outputPath
))
{
throw
new
Error
(
`输出路径(
${
outputPath
}
)已存在`
)
}
function
getType
(
val
)
{
return
Object
.
prototype
.
toString
.
call
(
val
).
slice
(
8
,
-
1
).
toLowerCase
()
}
function
parseRecord
(
obj
)
{
const
type
=
getType
(
obj
)
switch
(
type
)
{
case
'
object
'
:
if
(
obj
.
$oid
)
{
return
obj
.
$oid
+
'
a
'
}
const
keys
=
Object
.
keys
(
obj
)
for
(
let
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
const
key
=
keys
[
i
];
obj
[
key
]
=
parseRecord
(
obj
[
key
])
}
return
obj
case
'
array
'
:
for
(
let
i
=
0
;
i
<
obj
.
length
;
i
++
)
{
obj
[
i
]
=
parseRecord
(
obj
[
i
])
}
return
obj
default
:
return
obj
}
}
async
function
parseCollection
()
{
const
inputStream
=
fs
.
createReadStream
(
inputPath
)
const
outputStream
=
fs
.
createWriteStream
(
outputPath
)
const
rl
=
readline
.
createInterface
({
input
:
inputStream
});
for
await
(
const
line
of
rl
)
{
const
recordStr
=
line
.
trim
()
if
(
!
recordStr
)
{
continue
}
const
record
=
parseRecord
(
JSON
.
parse
(
recordStr
))
outputStream
.
write
(
JSON
.
stringify
(
record
)
+
'
\n
'
)
}
rl
.
close
()
console
.
log
(
`处理后的文件已输出到
${
outputPath
}
`
)
}
parseCollection
()
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录