text: -- create database if not exists, default database is eggroll_meta
  -- CREATE DATABASE IF NOT EXISTS `eggroll_meta`;
  
  -- all operation under this database
  -- USE `eggroll_meta`;
  
  -- store_locator
  CREATE TABLE IF NOT EXISTS `store_locator` (
    `store_locator_id` SERIAL PRIMARY KEY,
    `store_type` VARCHAR(255) NOT NULL,
    `namespace` VARCHAR(2000) NOT NULL DEFAULT 'DEFAULT',
    `name` VARCHAR(2000) NOT NULL,
    `path` VARCHAR(2000) NOT NULL DEFAULT '',
    `total_partitions` INT UNSIGNED NOT NULL,
    `partitioner` VARCHAR(2000) NOT NULL DEFAULT 'BYTESTRING_HASH',
    `serdes` VARCHAR(2000) NOT NULL DEFAULT '',
    `version` INT UNSIGNED NOT NULL DEFAULT 0,
    `status` VARCHAR(255) NOT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE UNIQUE INDEX `idx_u_store_locator_ns_n` ON `store_locator` (`namespace`(120), `name`(640));
  CREATE INDEX `idx_store_locator_st` ON `store_locator` (`store_type`(255));
  CREATE INDEX `idx_store_locator_ns` ON `store_locator` (`namespace`(767));
  CREATE INDEX `idx_store_locator_n` ON `store_locator` (`name`(767));
  CREATE INDEX `idx_store_locator_s` ON `store_locator` (`status`(255));
  CREATE INDEX `idx_store_locator_v` ON `store_locator` (`version`);
  
  
  -- store (option)
  CREATE TABLE IF NOT EXISTS `store_option` (
    `store_option_id` SERIAL PRIMARY KEY,
    `store_locator_id` BIGINT UNSIGNED NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    `data` VARCHAR(2000) NOT NULL DEFAULT '',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE INDEX `idx_store_option_si` ON `store_option` (`store_locator_id`);
  
  
  -- store_partition
  CREATE TABLE IF NOT EXISTS `store_partition` (
    `store_partition_id` SERIAL PRIMARY KEY,        
    `store_locator_id` BIGINT UNSIGNED NOT NULL,
    `node_id` BIGINT UNSIGNED NOT NULL,
    `partition_id` INT UNSIGNED NOT NULL,      
    `status` VARCHAR(255) NOT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE UNIQUE INDEX `idx_u_store_partition_si_spi_ni` ON `store_partition` (`store_locator_id`, `store_partition_id`, `node_id`);
  CREATE INDEX `idx_store_partition_sli` ON `store_partition` (`store_locator_id`);
  CREATE INDEX `idx_store_partition_ni` ON `store_partition` (`node_id`);
  CREATE INDEX `idx_store_partition_s` ON `store_partition` (`status`(255));
  
  
  -- node
  CREATE TABLE IF NOT EXISTS `server_node` (
    `server_node_id` SERIAL PRIMARY KEY,
    `name` VARCHAR(2000) NOT NULL DEFAULT '',
    `server_cluster_id` BIGINT UNSIGNED NOT NULL DEFAULT 0,
    `host` VARCHAR(1000) NOT NULL,
    `port` INT NOT NULL,
    `node_type` VARCHAR(255) NOT NULL,
    `status` VARCHAR(255) NOT NULL,
    `last_heartbeat_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE INDEX `idx_server_node_h_p_nt` ON `server_node` (`host`(600), `port`, `node_type`(100));
  CREATE INDEX `idx_server_node_h` ON `server_node` (`host`(767));
  CREATE INDEX `idx_server_node_sci` ON `server_node` (`server_cluster_id`);
  CREATE INDEX `idx_server_node_nt` ON `server_node` (`node_type`(255));
  CREATE INDEX `idx_server_node_s` ON `server_node` (`status`(255));
  
  
  -- session (main)
  CREATE TABLE IF NOT EXISTS `session_main` (
    `session_id` VARCHAR(767) PRIMARY KEY,
    `name` VARCHAR(2000) NOT NULL DEFAULT '',
    `status` VARCHAR(255) NOT NULL,
    `tag` VARCHAR(255),
    `total_proc_count` INT,
    `active_proc_count` INT,
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE INDEX `idx_session_main_s` ON `session_main` (`status`);
  
  
  -- session (option)
  CREATE TABLE IF NOT EXISTS `session_option` (
    `session_option_id`  SERIAL PRIMARY KEY,
    `session_id` VARCHAR(2000),
    `name` VARCHAR(255) NOT NULL,
    `data` VARCHAR(2000) NOT NULL DEFAULT '',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE INDEX `idx_session_option_si` ON `session_option` (`session_id`(767));
  
  
  -- session (processor)
  CREATE TABLE IF NOT EXISTS `session_processor` (
    `processor_id` SERIAL PRIMARY KEY,
    `session_id` VARCHAR(767),
    `server_node_id` INT NOT NULL,
    `processor_type` VARCHAR(255) NOT NULL,
    `status` VARCHAR(255),
    `tag` VARCHAR(255),
    `command_endpoint` VARCHAR(255),
    `transfer_endpoint` VARCHAR(255),
    `pid` INT NOT NULL DEFAULT -1,
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  ) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  
  CREATE INDEX `idx_session_processor_si` ON `session_processor` (`session_id`(767));
  