javascript - Firebase 实时数据库 - 数据库触发器结构最佳实践
问题描述
我在 Firebase 实时数据库中有一些数据,我希望将一个onUpdate()
触发器拆分为两个触发器。我的数据结构如下。
notes: {
note-1234: {
access:{
author: "-L1234567890",
members: {
"-L1234567890": 0,
"-LAAA456BBBB": 1
}
},
data: {
title: "Hello",
order: 1
}
}
}
目前我有一个onUpdate()
node 的数据库触发器'notes/{noteId}'
。
exports.onNotesUpdate = functions
.region('europe-west1')
.database
.ref('notes/{noteId}')
.onUpdate((change, context) => {
//Perform actions
return noteFunc.notesUpdate({change, context, type:ACTIVE})
})
但是,由于我的代码在处理数据和访问更新方面变得相当广泛 - 我正在考虑将代码分成两部分。一部分处理access
子节点中的更新,另一部分处理data
子节点。通过这种方式,我的代码将更容易阅读和理解,因为它可以在逻辑上分成单独的代码块。
exports.onNotesUpdateAccess = functions
.region('europe-west1')
.database
.ref('notes/{noteId}/access')
.onUpdate((change, context) => {
//Perform actions
return noteFunc.notesAccessUpdate({change, context, type:ACTIVE})
})
exports.onNotesUpdateData = functions
.region('europe-west1')
.database
.ref('notes/{noteId}/data')
.onUpdate((change, context) => {
//Perform actions
return noteFunc.notesDataUpdate({change, context, type:ACTIVE})
})
不过我有点不确定,因为access
和data
都是note-1234
(noteId) 节点的子节点。
我的问题是 - 这是一种推荐的方法,还是单独的子节点上的触发器会产生问题?
值得一提的是,整个note-1234
节点(access
和data
)有时.update()
会通过我的应用程序中的一个操作进行更新。在其他时间仅 access
或data
将被更新。
亲切的问候/K
解决方案
看起来您已经在一个分支下嵌套了两种类型的数据,这是 Firebase 文档在避免嵌套数据和扁平化数据结构的部分中明确建议反对的。
因此,除了将代码一分为二之外,我还建议将数据结构分为两个顶级节点:一个用于每种类型的数据。例如:
"notes-data": {
note-1234: {
author: "-L1234567890",
members: {
"-L1234567890": 0,
"-LAAA456BBBB": 1
}
}
},
"notes-access": {
note-1234: {
title: "Hello",
order: 1
}
}
通过在两个顶级节点中使用相同的键,您可以轻松地查找其他类型的数据以获取注释。而且由于 Firebase通过单个连接对这些请求进行管道传输,因此“客户端数据连接”并不像您最初想象的那么慢。
推荐阅读
- python - 来自服务器的 Python 打开文件将带有两个反斜杠的字符串转换为带有三个反斜杠的字符串
- vue.js - 为什么 vue-jest 没有在我的测试文件中正确安装 Bootstrap-vue?
- javascript - 我无法制作一个 React hooks 切换按钮来在摄氏度和华氏度之间切换?
- c++ - 用空格字符替换子字符串
- android - Android中的动态链接
- javascript - 当我向 ajax 图像预览添加其他图像时,之前的图像不会出现在输入类型 FILES 数组中
- jquery-ui - symfony 形式的 boostrap 4 datetimepicker
- html - 在 Bootstrap 中删除填充/边距
- python - Matplotlib - 图相互堆叠
- swift - Swift4滚动UITableview后,动画UITableview框架是错误的