我正在调查使用压缩表来节省存储空间的可能性。我发现https://dev.mysql.com/doc/refman/5.5/en/innodb-compression-tuning.html显示了一些用于设置的示例代码,并且我能够使用链接示例中显示的命令将其中一个测试表的大小从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
设置的方法?如果是这样,怎么样?我希望避免手工编写表创建逻辑。 FWIW,我目前仍然坚持使用Slick 2.1。
答案 0 :(得分:1)
查看代码我不认为它是开箱即用的。我认为你可以通过引入一个继承自MySQLDriver
的自定义“驱动程序”来实现它。该驱动程序应覆盖createTableDDLBuilder
以返回super.TableDDLBuilder
的子类,而后者将覆盖createTable
方法。在被覆盖的createTable
中,您可以添加一些自定义逻辑,例如分析Table[_]
是否还实现了某些已知的标记特征并相应地修改生成的SQL。