【问题标题】:How to model "dimension" tables in TiDB?如何在 TiDB 中建模“维度”表?
【发布时间】:2018-11-15 07:00:02
【问题描述】:

我想将某些表指定为复制到所有 TiKV 存储,以便它们始终可用于本地连接(从而减少 TiDB 级别的昂贵分布式连接)。这将允许 TiKV 协处理器在本地加入该表,因为它始终可用 (即:复制到每个 TiKV)。在“维度”和“事实”的 OLAP 术语中,这是一个维度表。在这种情况下,我想分割事实并复制维度。看来 TiDB 将一切都视为分片事实。这可以做到吗?如果不是,可以用其他技术近似吗?允许此类功能的代码库的适应性如何?

【问题讨论】:

    标签: distributed-database tidb tikv


    【解决方案1】:

    目前,TiDB 将每个表拆分为区域,并在区域级别进行复制。很难将一张表复制到每个 TiKV 服务器中,即使它只包含一个区域。比如 TiKV 集群有 100 个节点,但是配置的 Region 副本数是 5。

    我们不需要在 TiKV 协处理器中做 join 操作。我们可以从 TiKV 中读取每个维度表,将 TiDB 节点相乘,并根据事实表的数据分布,将每个涉及的 TiDB 节点关联到事实表的一部分。因此join操作是在TiDB层完成的。

    上述技术尚未实现。但它已经在我们的路线图上。

    【讨论】:

    • 感谢您的回复。你描述的不就是今天(2.1.0)在 TiDB 中是如何进行 join 的吗?如果不是,这种未来的技术有何不同?这种方法似乎比这个 join 可以下推到 TiKV 慢很多,否则我们最终会在 TiDB 层得到一个大的分布式 join(尤其是当维度表变大时)。
    • @JeremyNorris,不,我上面描述的join操作在今天的当前TiDB(v2.1.0或下一个版本)中还没有实现。
    • TiKV 本身会使用大量内存来缓冲表或索引数据,以避免为某些请求扫描磁盘。我认为这是 join 最好不要推送到 TiKV 层的另一个原因,因为 join 操作也会消耗大量内存。如果join被推送到TiKV层,就会增加TiKV服务器OOM的风险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多