如何在不下载和上传数据的情况下复制具有许多记录的 Firebase 子项
How to duplicate a Firebase child with many records without downloading and uploading the data?
我有一个Firebase孩子,有近50万条记录。我想复制这个孩子,以便创建数据的备份(在同一 Firebase 中)。所以,如果我的孩子叫lines
,我想复制它,但用一个新名字,如 lines_backup_02_02_2016
.完成此操作后,我希望原始lines
保持原样。
有没有办法做到这一点,而无需通过Javascript抓取dataSnapshot
(下载数据),然后使用set()
创建副本?例如:
fb.child("lines").once('value', function(snapshot) {
fb.child("lines_backup_02_02_2016").set(snapshot.val());
});
对于 500k 条记录,我发现这比我到目前为止能够等待的时间更长(例如,我在等待它完成的同时输入了这个问题)。
尝试访问/查询具有 500k 子记录的节点是一个坏主意。您也不太可能需要将这些 500k 行同步到用户。因此,请努力将活动数据与历史数据分开。您当前创建备份副本的方法是一个很好的开始。只需在将节点写入新位置时删除节点即可。
获取这些数据将"有点涉及"。它确实涉及首先使用浅层 REST 调用获取子键的列表:
https://yours.firebaseio.com/path-to-list.json?shallow=true
然后,您循环访问密钥并使用常规 JavaScript 客户端依次访问每个子项:
ref.child('path-to-list').child(key).once('value', function(snapshot) {
ref.child('path-to-backup').child(key).set(snapshot.val(), function(error) {
if (!error) {
// Delete the original item, so that the list stays small
snapshot.ref().remove();
}
});
});
此循环不会产生问题,因为您不会查询整个列表。相反,您直接访问特定的子节点,这很好。
请务必限制循环,否则可能会用少量写入淹没数据库。
相关文章:
- 使用Clipboard.js复制span文本
- ZeroClipboard-在复制之前添加到值
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 复制图像路径以单击它
- 复制当前url按钮-Javascript
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- 具有所有样式的文本正在复制到可编辑文本区域
- JavaScript”;复制“;HTML表单
- 在Nodejs中为许多用户处理计时器
- jsPlumb-拖动克隆而不进行复制
- 如何将给定的curl命令复制为jquery ajax请求
- 如何对映射插件创建的敲除对象进行深度复制
- 使用append时复制内容的DOM
- 如何将键入的文本从一个输入类型的文本复制到另一个
- 需要将单元格值复制到html表中的其他单元格中
- 当有许多形式时,Fancybox脚本不起作用
- jQuery表单克隆,如何阻止值被复制
- 如何动态创建许多Jquery颜色选择器(eyecon)
- 如何在不下载和上传数据的情况下复制具有许多记录的 Firebase 子项
- Ext js商店有许多复制到另一个商店