【问题标题】:Does Citus support creating shards using mysql_fdw?Citus 是否支持使用 mysql_fdw 创建分片?
【发布时间】:2016-04-27 06:48:14
【问题描述】:

master_get_table_metadata 函数的 Citus documentation 声明:

part_storage_type: 用于表的存储类型。可能是“t”(标准表)、“f”(外来表)或“c”(柱状表)。

但是我搜索了整个文档,并没有找到关于如何处理使用 ‘f’(外部表) 分区存储类型分布的表的示例。

我想可以使用以下方法创建初始外部表:

CREATE FOREIGN TABLE audit (
    id integer NOT NULL,
    ctime timestamp without time zone DEFAULT now() NOT NULL,
    site_id integer NOT NULL,
    client_id integer,
    done_time timestamp without time zone,
    status text DEFAULT 'NEW' NOT NULL,
    file_id character varying(16) DEFAULT ''::character varying NOT NULL
) SERVER mysql_svr OPTIONS (dbname 'constructor', table_name 'audit');

但是创建后如何分发这样的表?如何创建分片?

更新

我找到了this

FOREIGN ('f') — 表示分片存储外部数据。 (分布式file_fdw表使用)

所以我的问题仍然存在:是否可以使用其他外部数据包装器,例如 mysql_fdw?

【问题讨论】:

    标签: mysql postgresql foreign-data-wrapper citus


    【解决方案1】:

    目前在 Citus 中仅部分支持创建分布式外部表。 举个例子吧:

    CREATE FOREIGN TABLE audit (
        id integer NOT NULL,
        ctime timestamp without time zone DEFAULT now() NOT NULL,
        site_id integer NOT NULL,
        client_id integer,
        done_time timestamp without time zone,
        status text DEFAULT 'NEW' NOT NULL,
        file_id character varying(16) DEFAULT ''::character varying NOT NULL
    ) SERVER mysql_svr
     OPTIONS (dbname 'constructor', table_name 'audit');
    

    您现在可以使用以下方式分发它:

    SELECT * FROM master_create_distributed_table('audit', 'id', 'append');
    

    并使用以下方法创建分片:

    SELECT master_create_worker_shards('audit', <shard_count>);
    

    但是,在工作节点上创建的每个分片都将继承与主节点相同的 选项。因此,在本例中,每个分片将指向 dbname 'constructor' 和外部表 'audit'。创建这种分布的价值有限,因为即使 Citus 会发出并行查询,它们也会再次被发送到单个节点和表。

    为了构建一个更有用的示例,假设您已经有一些(比如说 8 个)分片 MySQL 表,例如审计_1、审计_2、...、审计_8。

    您可以构建与上面相同的表,并像这样创建分布式设置:

    SELECT * FROM master_create_distributed_table('audit', 'id', 'append');
    

    并使用以下方法创建分片:

    SELECT master_create_worker_shards('audit', 8);
    

    您现在需要登录每个 Citus 工作节点,并更新每个分片以指向其相关的 MySQL 分片。

    例如: ALTER TABLE audit_100208 OPTIONS (SET table_name 'audit_1');

    如果您的表分布在多个节点或数据库中,则需要为每个 Citus 工作节点上的每个外部节点手动创建特定服务器。

    这里有一些需要注意的警告。一方面,我们将分布标记为“附加”,因为我们不知道外部表的基础分布。如果你使用哈希,你可能会通过 Citus 得到错误的分区修剪。可能还有其他警告,因为这不是我们积极支持或测试的用例。从历史的角度来看,我们主要将其用作概念验证来尝试读取分布在多个节点上的平面文件。

    ** 编辑 ** 添加对 Eugen 其他问题的回答。 另外,请注意,这样的 Q/A 最适合这里的邮件列表: https://groups.google.com/forum/#!forum/citus-users

    • “部分支持”是指我们将下推外部表的创建,但不会自动将不同的外部表设置映射到不同的分片。

    • SQL 和 PostgreSQL 具有广泛的功能,我们目前并不支持所有这些功能。我们正在编制一份可用功能列表,但与此同时,如果您对任何功能感兴趣,请告诉我们。

    • 当您发出 master_create_distributed_table 时,我们会自动创建存储类型为“f”的分片。

    【讨论】:

    • 对“创建分布式外部表”的部分支持是什么?
    • citus 缺少什么功能?
    • 您错过了有关 pg_dist_shard.shardstorage 标志的信息。为什么不将它从 't' 更新为 'f'?
    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2016-07-31
    • 2013-07-16
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多