配置冷存储

云原生多模数据库 Lindorm使用容量型云存储作为冷数据存储介质。开通冷存储功能后,需要配置数据库中的表或者列簇,本文介绍配置冷存储的方法。

背景信息

冷存储功能仅支持云原生多模数据库 Lindorm引擎版本为2.1.8及以上。Lindorm支持在表级别设置存储属性,可以将整个表或某个列簇的Storage设为冷存储。如果设置为冷存储,那么这个表或某个列簇的数据都会存储在容量型云存储中,并不会占用该实例的默认存储空间。

容量型云存储的性能说明,请参见容量型云存储读取性能说明

配置冷存储

配置数据库中的表或者列簇为冷存储的方法有两种:

  • 通过HBase Shell设置冷存储。在设置前,需要已下载和配置Shell,具体操作请参见通过Lindorm Shell访问宽表引擎

    • 创建表格时执行以下语句设置冷存储。

      create 'coldTable', {NAME => 'f', STORAGE_POLICY => 'COLD'}
    • 如果表格已经创建,可以通过修改表中列簇的属性来设置冷存储的列簇。

      重要

      如果这个列簇中已经有数据,那么只有在major compaction之后,数据才会进入到冷存储。

      alter 'coldTable', {NAME=>'f', STORAGE_POLICY => 'COLD'}
    • 如果您需要将表重新设置为热存储请执行以下语句。

      alter 'coldTable', {NAME=>'f', STORAGE_POLICY => 'DEFAULT'} 
  • 通过HBase Java API设置冷存储。在设置前,需要已安装和配置SDK,具体操作请参见基于HBase Java API的应用开发

    • 创建表格时执行以下语句设置冷存储。

      Admin admin = connection.getAdmin();
       HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf("coldTable"));
       HColumnDescriptor cf = new HColumnDescriptor("f");
       cf.setValue("STORAGE_POLICY", AliHBaseConstants.STORAGETYPE_COLD);
       descriptor.addFamily(cf);
       admin.createTable(descriptor);
    • 如果表格已经创建,可以通过修改表中列簇的属性来设置冷存储的列簇。

      重要

      如果这个列簇中已经有数据,那么只有在major compaction之后,数据才会进入到冷存储。

      Admin admin = connection.getAdmin();
      TableName tableName = TableName.valueOf("coldTable");
      HTableDescriptor descriptor = admin.getTableDescriptor(tableName);
      HColumnDescriptor cf = descriptor.getFamily("f".getBytes());
      // 设置表的存储类型为冷存储
      cf.setValue("STORAGE_POLICY", AliHBaseConstants.STORAGETYPE_COLD);
      admin.modifyTable(tableName, descriptor);
    • 如果您需要将表重新设置为热存储请执行以下语句。

      Admin admin = connection.getAdmin();
      TableName tableName = TableName.valueOf("coldTable");
      HTableDescriptor descriptor = admin.getTableDescriptor(tableName);
      HColumnDescriptor cf = descriptor.getFamily("f".getBytes());
      // 设置表的存储类型为默认存储,默认存储为热存储
      cf.setValue("STORAGE_POLICY", AliHBaseConstants.STORAGETYPE_DEFAULT);
      admin.modifyTable(tableName, descriptor);