我可以用 Slick 的 Table class 定义 table 的 ROW_FORMAT 吗?
Can I define a table's ROW_FORMAT with Slick's Table class?
我正在研究使用压缩 table 来节省存储空间 space 的可能性。我发现 https://dev.mysql.com/doc/refman/5.5/en/innodb-compression-tuning.html 显示了一些用于设置它的示例代码,并且我能够使用下面所示的命令将其中一个测试 table 的大小从 1.6GB 减少到 0.5GB链接示例。
如果我在 mysql 控制台中 运行 show create table my_big_compressed_table\G
(从技术上讲,MariaDB 没问题,但我认为这在这里不重要),我得到
CREATE TABLE `my_big_compressed_table` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
-- some more fields
-- indexes, foreign keys, etc
) ENGINE=InnoDB <some stuff omitted> ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4
最后一行是重要的一点:ROW_FORMAT
和 KEY_BLOCK_SIZE
是打开压缩的魔法词,但我找不到用 Slick 定义它们的方法。
class MyBigCompressedTable(tag: Tag) extends Table[...](tag, "MY_BIG_COMPRESSED_TABLE") {
def id = column[Int]("ID", ...)
// more fields, indexes, foreign keys
def * = (id, ...)
// TODO: rowFormat? keyBlockSize?
}
Slick 是否提供定义 ROW_FORMAT
和 KEY_BLOCK_SIZE
设置的方法?如果是这样,如何?我希望避免手动编写 table 创建逻辑。 FWIW,我目前坚持使用 Slick 2.1。
查看代码,我认为它不受开箱即用的支持。我认为您可以通过引入一个继承自 MySQLDriver
. That driver should override createTableDDLBuilder
to return a subclass of super.TableDDLBuilder
that in turn would override createTable
方法的自定义 "driver" 来实现它。在覆盖的 createTable
中,您可以添加一些自定义逻辑,例如分析 Table[_]
是否也实现了一些已知的标记特征并相应地修改生成的 SQL。
我正在研究使用压缩 table 来节省存储空间 space 的可能性。我发现 https://dev.mysql.com/doc/refman/5.5/en/innodb-compression-tuning.html 显示了一些用于设置它的示例代码,并且我能够使用下面所示的命令将其中一个测试 table 的大小从 1.6GB 减少到 0.5GB链接示例。
如果我在 mysql 控制台中 运行 show create table my_big_compressed_table\G
(从技术上讲,MariaDB 没问题,但我认为这在这里不重要),我得到
CREATE TABLE `my_big_compressed_table` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
-- some more fields
-- indexes, foreign keys, etc
) ENGINE=InnoDB <some stuff omitted> ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4
最后一行是重要的一点:ROW_FORMAT
和 KEY_BLOCK_SIZE
是打开压缩的魔法词,但我找不到用 Slick 定义它们的方法。
class MyBigCompressedTable(tag: Tag) extends Table[...](tag, "MY_BIG_COMPRESSED_TABLE") {
def id = column[Int]("ID", ...)
// more fields, indexes, foreign keys
def * = (id, ...)
// TODO: rowFormat? keyBlockSize?
}
Slick 是否提供定义 ROW_FORMAT
和 KEY_BLOCK_SIZE
设置的方法?如果是这样,如何?我希望避免手动编写 table 创建逻辑。 FWIW,我目前坚持使用 Slick 2.1。
查看代码,我认为它不受开箱即用的支持。我认为您可以通过引入一个继承自 MySQLDriver
. That driver should override createTableDDLBuilder
to return a subclass of super.TableDDLBuilder
that in turn would override createTable
方法的自定义 "driver" 来实现它。在覆盖的 createTable
中,您可以添加一些自定义逻辑,例如分析 Table[_]
是否也实现了一些已知的标记特征并相应地修改生成的 SQL。