开发者社区 问答 正文

分库不分表如何实现?

文介绍如何在建表时只分库不分表。

假设已经建好的分库数为 8,建一张表,只分库不分表,分库方式为根据 id 列哈希。

CREATE TABLE multi_db_single_tbl(
  id int,
  name varchar(30),
  primary key(id)
) dbpartition by hash(id);
查看该逻辑表的节点拓扑,可以看出在每个分库都创建了 1 张分表,既只做了分库。

mysql> show topology from multi_db_single_tbl;
+------+------------------------------------------------------------------+---------------------+
| ID   | GROUP_NAME                                                       | TABLE_NAME          |
+------+------------------------------------------------------------------+---------------------+
|    0 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0000_RDS | multi_db_single_tbl |
|    1 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0001_RDS | multi_db_single_tbl |
|    2 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0002_RDS | multi_db_single_tbl |
|    3 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0003_RDS | multi_db_single_tbl |
|    4 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0004_RDS | multi_db_single_tbl |
|    5 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0005_RDS | multi_db_single_tbl |
|    6 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0006_RDS | multi_db_single_tbl |
|    7 | SANGUAN_TEST_123_1488766060743ACTJSANGUAN_TEST_123_WVVP_0007_RDS | multi_db_single_tbl |
+------+------------------------------------------------------------------+---------------------+
8 rows in set (0.01 sec)

展开
收起
猫饭先生 2017-10-30 11:24:10 1819 分享 版权
阿里云 AI 助理回答

在阿里云的PolarDB-X(原名X-DB)分布式数据库中,实现只分库不分表的场景可以通过SQL语法来完成。您给出的例子已经很好地展示了如何创建一个逻辑表,并且仅根据id列进行哈希分库,而不在每个库内进一步分表。

这里简要解析一下您的操作和相关命令:

  1. 创建逻辑表:通过CREATE TABLE语句定义了一个名为multi_db_single_tbl的表,包含两列idname,其中id是主键。这一步是创建表的基本操作。

  2. 指定分库策略:通过在CREATE TABLE语句末尾添加dbpartition by hash(id)来指定分库策略。这里使用了哈希分区方法基于id列的值来决定数据存储到哪个分库中。这意味着数据会根据id的哈希值均匀分布到预先设置好的8个分库中。

  3. 查看节点拓扑:使用show topology from multi_db_single_tbl;命令来查看该逻辑表的物理部署情况。结果显示,在每个分库中都只有一张与逻辑表对应的物理表,验证了确实实现了“只分库不分表”的设计意图。

总结来说,要在阿里云PolarDB-X中实现只分库不分表,关键在于在创建表时明确指定分库策略而不涉及分表策略。上述示例中的SQL命令就是具体实践这一需求的方法。这种方式适用于那些需要水平扩展读写能力,但单表数据量不大,不需要进一步分表以优化单表性能的场景。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: