如何解决分层数据存储
我有两个表,第一个主表存储所有对象,第二个关系表存储跨多级的父子关系。
主表:table1
object_id | object_column1 | object_column2 |
---|---|---|
parent_1 | some_value | some_value |
parent_2 | some_value | some_value |
child_1 | some_value | some_value |
child_2 | some_value | some_value |
child_3 | some_value | some_value |
child_4 | some_value | some_value |
child_5 | some_value | some_value |
关系表:table2
parent_id | child_id | relation_column1 | relation_column2 |
---|---|---|---|
parent_1 | child_1 | has_list_value | has_string_value |
parent_1 | child_2 | has_list_value | |
child_2 | child_3 | has_string_value | |
child_2 | child_4 | has_list_value | has_string_value |
child_3 | child_5 |
在 Oracle 和 SQL Server DB 中提取所有级别的数据都使用了 WITH Clause
。
在 Spanner 中如何实现?
尝试了交错表,但这对上述表没有多大帮助,因为主表到关系表只解决了一个级别,而不是分层的所有级别检索。递归查询会导致性能开销。
有没有人遇到过这种情况和/或找到了解决这种情况的方法?
解决方法
Spanner 的最佳选择是使用交错表并使用 JOIN
进行查询。
交错表将确保父子节点存储在同一节点上。这将减少节点在同时读取父子节点时的通信量。
编写查询的最简单方法是:
SELECT *
FROM Parent
JOIN Child ON Parent.id = Child.id;
注意:将为每个子数据复制父数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。