sequelizejs:如何使用分区进行todo数据库迁移

时间:2017-06-12 00:16:47

标签: sequelize.js

像mysql,mariadb,sql server支持分区等数据库。

续集器是否支持表分区?

从文档中我找不到答案,所以答案是否定的?

有没有人手动启用它?

1 个答案:

答案 0 :(得分:0)

这个问题已经存在了一段时间,但是我想我会发布一个答案,以防万一有人在找。目前,sequelize不支持分区。 Table partitioning有一项功能请求,内容涉及将其添加到库中,但是一年多来都没有分配给它,也没有标记任何里程碑。

有一个添加未合并的PostgreSQL table partitioning的拉取请求。在MySQL,MariaDB或SQL Server的特定情况下这无济于事,但可以用作开发的起点一个附加功能以包括这些平台的功能。

由于我们对该问题的最初预期结果了解不多,因此我所有可能的解决方案都涉及一些推测:

通过在模型中显式定义表名,您可以潜在地使用sequelize raw queries来手动管理分区

sequelize.define('my_table', {
...
}, {
  tableName: 'my_explicit_table_name'
});

然后执行类似

的操作
sequelize.query("ALTER TABLE IF EXISTS my_explicit_table_name RENAME TO my_table_20181018");
sequelize.query("CREATE TABLE my_explicit_table_name");

如果您想每天间隔进行分区,则每天。

可以使用方便的migration framework便利函数与原始查询相结合来实现类似的分区。

不幸的是,由于sequelize只允许为表名指定单个字符串,因此这两个都意味着无法通过模型访问除基本表之外的任何表。在每个请求的基础上,可能会有一些直接在模型中直接更新表名的余地,例如

instance.models.my_model.tableName = my_new_tablename

但这是纯粹的猜测,没有进行任何备份的测试。