Firebase“符号链接”到另一个节点

2024-01-08

关于我关于建模真实的面向用户的树结构的另一个问题(使用firebase树结构直接表示“文档大纲”结构 https://stackoverflow.com/questions/39112792/using-firebase-tree-structure-to-represent-a-document-outline-structure-direct),我正在考虑在某些嵌套级别上采用一种通用的“符号链接”方法,以克服 32 个嵌套级别的限制以及一次获取所有子节点的需要。

firebase 中的“符号链接”有一些“最佳实践”吗?

E.g.:

  • Firebase 节点的语法(内容、键值结构),表示指向另一个节点的链接
  • 符号链接应该包含目标节点的路径(绝对还是相对?)还是只是某种全局唯一的 ID?
  • 当符号链接内容完成异步加载时将触发回调的 API

我正在设想一个小的包装器 API,它将抽象节点是否确实存在或是否通过“符号链接”间接访问的差异。可能有一个额外的 API 方法“现在给我获取这个/更多”,因为用户想要显示的数据的更多详细信息(例如,在树中深入钻取),并且它可以获取例如下一级嵌套(通过回调),抽象出子级的内容是否真的存在或只是符号链接......

总的来说,这似乎是个好主意吗?


也许你应该看看关系世界是如何解决这个问题的。我们可以通过首先将树节点转换为文档来获取他们的解决方案。这意味着对于一棵树

root 0
|-- top child I
+-- top child II
    |-- second-level child 1
    |   +-- third-level child a
    |-- second-level child 2

您将拥有六个树节点中每一个的文档。然后在描述树结构的文档中添加附加数据。

我受到了启发这个答案 https://stackoverflow.com/a/3363232/220060其中概述了三种方法,各有利弊。让我在这里展示这些方法如何应用于面向文档的数据库。

使用父 ID 的方法

添加字段parentId其中包含父节点的文档 ID 或其他一些唯一值。

pros and cons:
+ easy to understand, cheap insert, cheap subtree move
- difficult to retrieve subtree

改进的先序树遍历

添加两个字段left and right包含遍历的索引。首先从根节点开始,赋1给left,然后下降到top child I并将 2 分配给left。如果没有更多的孩子,则将下一个整数分配给right。然后上一层并将下一个整数分配给right.

有关更多详细信息,请参阅这个古老但仍然很棒的指南:Sitepoint 上修改的预序树遍历 https://www.sitepoint.com/hierarchical-data-database-2/.

pros and cons:
+ cheap retrieve of subtree, ordering of children guaranteed
- difficult to understand, expensive insert (repeat tree traversal)

将路径保存在节点中

使用一些唯一值(如文档 ID)并创建这些唯一值的路径,从根开始,向下到节点。例如,第二级子级 2 的路径可能是"0/II/2"。或者创建一个数组['0', 'II', '2'].

pros and cons:
+ cheap retrieve of subtree, cheap insert
- expensive subtree move
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase“符号链接”到另一个节点 的相关文章

  • Pandas:根据是否为 ​​NaN 来移动列

    我有一个像这样的数据框 phone number 1 clean phone number 2 clean phone number 3 clean NaN NaN 8546987 8316589 8751369 NaN 4569874 N
  • 计算 .NET Core 项目的代码指标?

    我正在研究 ASP NET Core 和 NET Core 项目 对于经典的 C 项目 Visual Studio 2015 具有计算代码指标的功能 对于 NET Core 预览版 2 工具中缺少支持 在工具更加完整之前 有人知道解决方法吗
  • Emacs 强制组织模式捕获缓冲区在新窗口中打开

    如何强制组织模式的捕获缓冲区在新窗口中打开 我试过 setq special display regexps Capture 但它不起作用 我立即看到一个新窗口 然后 org mode 进行两个垂直分割 我使用 3 个垂直分割 并将捕获缓冲
  • Sencha-touch :保存登录名/密码(保存会话,多任务)

    我有一个 Java Web 应用程序 其中移动部分是用 Sencha touch 开发的 当我启动 sencha touch 应用程序时 她询问我的登录名 密码 因为该应用程序的访问受到限制 但是我想保存用户的登录名 密码 sencha t
  • f# 运行总计序列

    好吧 这看起来应该很容易 但我就是不明白 如果我有一个数字序列 如何生成由运行总计组成的新序列 例如 对于序列 1 2 3 4 我想将其映射到 1 3 6 10 以适当的功能方式 Use List scan https msdn micro
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 结构化 scala 案例类的自定义 json 序列化

    我有一些用于往返 scala 案例类的工作 jackson scala 模块代码 Jackson 对于平面案例类非常有用 但是当我制作一个包含其他案例类列表的案例时 我似乎需要很多代码 考虑 abstract class Message c
  • iOS UITest:如何找到UITableViewCell的AccessoryView?

    你好我正在学习UITests now 我有个问题 如何检测accessoryView的点击tableViewCell 在UI测试中 下面是我的tableViewCell 我想要检测细节闭合配件视图水龙头 像这样 app tables cel
  • 增加浏览器缩放时 mediaelement.js 音量控制混乱

    媒体元素2 12 0 这种情况仅发生在 FF 和 Chrome 中 而不会发生在 IE 或 Opera 中 导航到具有媒体元素播放器的网站内容后 甚至导航到媒体元素首页http mediaelementjs com http mediael
  • Mink 不适用于 behat 3.0.12

    我安装了 Behat Mink 和其他一些相关的软件包 这是我的composer json 文件 require behat behat 3 0 6 behat symfony2 extension dev master behat min
  • 如何包装实体框架以在执行前拦截 LINQ 表达式?

    我想在执行之前重写 LINQ 表达式的某些部分 我在将重写器注入正确的位置时遇到问题 实际上根本没有 查看实体框架源代码 在反射器中 它最终归结为IQueryProvider Execute在 EF 中 它通过以下方式耦合到表达式Objec
  • Bootstrap 轮播中的 Href

    我一直在Interwebz上搜索 但似乎找不到答案 如何在轮播链接中添加 href 我尝试将 a 标签放在 h1 标签之外 但它破坏了滑块本身的功能 这是我的代码 div class col sm 12 div class carousel
  • 将背景图像放入菱形容器中会导致容器失去形状

    标题总结得很好 我可以很容易地绘制菱形 但是当我将图像添加到背景时 它会为形状添加更多边 我似乎无法弄清楚为什么添加背景图像时会发生这种情况 任何意见 将不胜感激 这是我的代码 请原谅内联 css 我只是这样做 直到我有一个可行的解决方案
  • 找不到 com.google.gms:google-services:4.1.0 [重复]

    这个问题在这里已经有答案了 Bitrise 构建失败并出现以下错误 配置根项目 src 时出现问题 无法解析配置 classpath 的所有文件 找不到 com google gms google services 4 1 0 在以下位置进
  • vcproj/vsprops 的可选环境变量

    有没有办法在项目文件 有或没有 vsprops 中进行环境变量替换 如果找不到该变量 则用默认值替换 我还没有找到任何方法来做到这一点 因为一切似乎都会覆盖环境变量 编辑 我需要它为属性工作 而不是为环境变量工作 具体来说 可以使用指定目标
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • Python正则表达式:如何用不同的值替换出现的每个实例?

    假设我有这个字符串 s blah blah blah 使用Python正则表达式 如何用不同的值替换 blah 的每个实例 例如 我有一个值列表v 1 2 3 你可以使用re sub打回来 http docs python org libr
  • 为什么在嵌套类上调用方法时不调用父类的静态构造函数?

    给出以下代码 为什么在 Main 的第一行之后没有调用 Outer 的静态构造函数 namespace StaticTester class Program static void Main string args Outer Inner
  • 神秘的 getClobVal()

    我有一个表 AKADMIN 其中包含 XMLTYPE 列 其名称为 XML 我想在该列中使用 getClobVal select t xml getClobVal t xml getClobVal t xml getClobVal as c
  • 替换 firebase 键中无效字符的好方法?

    我的用例是保存用户的信息 当我尝试使用用户的电子邮件地址作为密钥将数据保存到 Firebase 时 Firebase 会引发以下错误 错误 密钥无效 电子邮件受保护 cdn cgi l email protection 不能包含 因此 显然

随机推荐

  • 如何将文本文件转换为ARFF格式?

    我正在使用 WEKA 工具进行文本分类 并且必须将纯文本文件转换为 ARFF 格式 但是 我不知道该怎么做 谁能帮我将文本文件转换为 ARFF 格式 谢谢伦克劳夫的回复 我不明白这些要点 由于像记事本这样的文本编辑器只允许有限数量的列 因此
  • 错误:‘$’未定义。[no-undef]

    我想用一些 jQuery 来做一个粘性导航栏但我得到了错误 ERROR is not defined no undef ERROR document is not defined no undef 并且代码不起作用 有人可以帮助我为什么会出
  • 我可以在不使用好友的情况下从班级外部访问私人成员吗?

    免责声明 是的 我完全意识到我所问的问题是完全愚蠢的 任何希望在生产代码中尝试这样的事情的人都应该被解雇和 或枪杀 我主要是想看看是否can做完了 现在这已经不成问题了 有什么方法可以从类外部访问 C 中的私有类成员吗 例如 有什么方法可以
  • 解析 JSON 数组并加载到 hive 表中

    我有一个如下所示的 Json 数组 Name xxxx Machine Machine1 Name yyyy Machine Machine2 Name zzzz Machine Machine3 我需要解析该数据并加载到如下所示的配置单元
  • 循环内分配内存与循环外分配内存

    在循环的每次迭代中分配大块堆内存是否会带来明显的性能损失 当然 我在每次迭代结束时释放它 另一种方法是在进入循环之前分配一次 在所有迭代中重复使用它 并最终在退出循环后释放它 请参阅下面的代码 allocation inside loop
  • PowerMock java.lang.ClassCastException:sun.net.www.protocol.https.HttpsURLConnectionImpl 无法转换为 javax.net.ssl.HttpsURLConnection

    我创建了一个模拟HttpsURLConnection基于一个堆栈交换答案 https stackoverflow com a 25334710 939250 import java net URL import javax net ssl
  • 如何通过ajax调用获取JSON数据

    我想得到JSON来自 ajax 调用的 php 页面的数据 php 页面正在返回AJAX字符串 现在我必须得到它JSON数据和显示值分开 我怎样才能做到这一点 这是我正在使用的代码 当我运行此代码来获取数据product id 时 它显示警
  • Django 中如何发送电子邮件

    我有设置 py Email settings EMAIL BACKEND django core mail backends smtp EmailBackend EMAIL HOST smtp gmail com EMAIL HOST US
  • 通过Java从.class文件中获取ByteCode(依赖)信息

    我想分析一下 class文件并获取有关哪个类使用哪个其他类的信息 jdeps是一个命令行工具 它允许您在控制台中显示一些信息 但我想避免调用外部工具并抓取命令行输出 所有依赖项都记录在类文件的中心位置 即常量池 因此 为了有效地处理所有依赖
  • 格式化 C# 代码片段的文字参数

    有什么方法可以更改代码片段的文字在代码片段生成的代码中使用时的呈现方式吗 具体来说 我想知道是否可以有一个名为 PropertyName 的文字 然后让代码片段引擎渲染 PropertyName 其中第一个字符为小写 我买不起 R 请帮忙
  • 以一种独特且确定性的方式将两个整数映射到一个

    想象两个正整数 A 和 B 我想将这两个组合成一个整数 C 不能有其他整数 D 和 E 组合成 C 因此将它们与加法运算符结合起来是行不通的 例如 30 10 40 40 0 39 1 连接也不起作用 例如 31 2 312 3 12 这种
  • 如何让 localeCompare 的行为与 .sort() 类似,以便所有大写字母排在前面?

    我有一个要排序的字符数组 const arr z a Z A 我希望排序顺序为 按字母顺序排列大写字符 然后按字母顺序排列小写字符 A Z a z 使用以下方法来完成此操作很简单 sort 没有任何参数 const arr z a Z A
  • 如何使用 scipy optimization 找到 3 个参数和数据点列表的最小卡方?

    我有一个排序随机数的直方图和高斯叠加 https i stack imgur com dBqcU png 直方图表示每个箱的观察值 将此基本情况应用于更大的数据集 高斯是拟合数据的尝试 显然 这个高斯并不代表直方图的最佳拟合 下面的代码是高
  • android edittext货币格式不带美元符号

    我尝试在我的编辑文本中创建货币格式 我搜索并缠绕代码 我可以在我的编辑文本中添加货币格式 transfer maney addTextChangedListener new TextWatcher Override public void
  • 如何在 ipython 或 jupyter 笔记本中加载外部静态 Javascript 文件

    我试图在 ipython 笔记本中加载 d3 和 dimple js 但它抛出错误 我也尝试过 require 但无法加载请为我提供一些解决方法 在笔记本中运行此命令以找出您的 jupyter 目录 from jupyter core pa
  • 如何在我的 Flutter 应用中显示来自 Firebase 的用户数据?

    我是颤振新手 如何将用户数据从 Firebase 检索到我的个人资料页面 我的 Firebase 数据包含姓名 电子邮件 血型和出生日期 我想将此数据检索到我的应用程序的个人资料页面 这是我的个人资料页面代码 import package
  • 为什么不采用依赖类型呢?

    我看到几个消息来源都赞同 Haskell 正在逐渐成为一种依赖类型的语言 的观点 这似乎意味着 随着越来越多的语言扩展 Haskell 正在朝着这个大方向漂移 但还没有实现 基本上有两件事我想知道 第一个很简单 成为一种依赖类型的语言 实际
  • gst 浏览器无法启动

    我刚刚安装了gst browser VisualGST 通过 Canonical Ubuntu 存储库 因此我尝试通过运行来启动 VisualGSTgst browser在命令行上 但是 我立即收到一个错误 a Smalltalk Stre
  • 如何改进 mongodb 的 XML 导入?

    我有一些大型 XML 文件 每个 5GB 我正在将其导入到 mongodb 数据库中 我使用 Expat 来解析文档 进行一些数据操作 删除一些字段 单位转换等 然后插入数据库 我的脚本基于此 https github com bgianf
  • Firebase“符号链接”到另一个节点

    关于我关于建模真实的面向用户的树结构的另一个问题 使用firebase树结构直接表示 文档大纲 结构 https stackoverflow com questions 39112792 using firebase tree struct