【问题标题】:Hierarchical data store分层数据存储
【发布时间】:2021-09-02 20:17:59
【问题描述】:

我有两个表,第一个主表存储所有对象,第二个关系表存储跨多级的父子关系。

主表: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 中如何实现?

尝试过交错表,但这对上述表没有太大帮助,因为主表到关系表只解决了一个级别,而不是分层的所有级别的检索。递归查询会导致性能开销。

有没有人遇到过这种情况和/或找到这种情况的解决方案?

【问题讨论】:

  • 我并不完全清楚您想要实现的目标。您介意在 SQL Server / Oracle 中给出一个您想要实现的查询的工作示例吗?您提到 SQL Server/Oracle 中的 WITH 子句。 Cloud Spanner 也支持 WITH:cloud.google.com/spanner/docs/query-syntax#with_clause

标签: google-cloud-spanner


【解决方案1】:

使用 Spanner 的最佳选择是使用交错表并使用 JOIN 进行查询。

交错表将确保父节点和子节点存储在同一个节点上。这将减少读取父子节点时节点之间的通信量。

编写查询的最简单方法是:

SELECT *
FROM Parent
JOIN Child ON Parent.id = Child.id;

注意:父数据将为每个子数据复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多