@Override
  public int removeRecord(String key) {
    if (memberNum <= 0) {
      return spareSize;
    }

    int pos = getIndexByKey(key);
    if (!key.equals(getKeyByIndex(pos))) {
      return spareSize;
    }

    int migNum = memberNum - pos - 1;
    if (migNum > 0) {
      ByteBuffer temBuf = ByteBuffer.allocate(migNum * OFFSET_LEN);
      this.pageBuffer.clear().limit(SchemaFileConfig.PAGE_HEADER_SIZE + OFFSET_LEN * memberNum);
      this.pageBuffer.position(SchemaFileConfig.PAGE_HEADER_SIZE + pos * OFFSET_LEN + OFFSET_LEN);
      temBuf.put(this.pageBuffer).clear();

      this.pageBuffer.clear().position(SchemaFileConfig.PAGE_HEADER_SIZE + pos * OFFSET_LEN);
      this.pageBuffer.put(temBuf);
    }
    memberNum--;
    spareSize += OFFSET_LEN + 8 + key.getBytes().length + getNameByIndex(pos).getBytes().length;

    return spareSize;
  }
<b>Page Header Structure: (19 bytes used, 13 bytes reserved)</b> As in {@linkplain
ISchemaPage}.

<p>Page Body Structure:

<ul>
  <li>2 bytes * memberNum: offset of (alias, name) pair, to locate string content
  <li>... spare space...
  <li>var length(4 byte, var length, 4 bytes, var length): (alias, name) pairs, ordered by
      alias
</ul>
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/AliasIndexPage.java