全部產品
Search
文件中心

Tablestore:本地二級索引

更新時間:Apr 26, 2023

在資料表上建立索引表後,可根據需要讀取索引表中的資料或者刪除資料表上指定的索引表。

前提條件

  • 已初始化Client。具體操作,請參見初始化

  • 已建立資料表,且資料表的資料生命週期(timeToLive)必須為-1,最大版本數(maxVersions)必須為1。

  • 資料表已設定預定義列。

建立索引表(CreateIndex)

使用CreateIndex介面在已存在的資料表上建立索引表。

說明

您也可以使用CreateTable介面在建立資料表的同時建立一個或者多個索引表。具體操作,請參見建立資料表

  • 介面

    /**
     * 建立二級索引。
     * @api
     *
     * @param [] $request
     *            請求參數,資料表名稱。
     * @return [] 請求返回
     * @throws OTSClientException 當參數檢查出錯或服務端返回校正出錯時拋出異常。
     * @throws OTSServerException 當OTS服務端返回錯誤時拋出異常。
     * @example "src/examples/CreateIndex.php"
     */
    public function createIndex(array $request)
  • 參數

    參數

    說明

    table_name

    資料表名稱。

    index_meta

    索引表的結構資訊,包括如下內容:

    • name:索引表名稱。

    • primary_key:索引表的索引列,索引列為資料表主鍵和預定義列的任意組合。

    • defined_column:索引表的屬性列,索引表屬性列為資料表的預定義列的組合。

    • index_update_mode:索引表更新模式,可選值包括IndexUpdateModeConst::ASYNC_INDEXIndexUpdateModeConst::SYNC_INDEX

      • 當不設定index_update_mode或者設定index_update_mode為IndexUpdateModeConst::ASYNC_INDEX時,表示非同步更新。

        使用全域二級索引時,索引更新模式必須設定為非同步更新(IndexUpdateModeConst::ASYNC_INDEX)。

      • 當設定index_update_mode為IndexUpdateModeConst::SYNC_INDEX時,表示同步更新。

        使用本地二級索引時,索引更新模式必須設定為同步更新(IndexUpdateModeConst::SYNC_INDEX)。

    • index_type:索引表類型,索引類型。可選值包括IndexTypeConst::GLOBAL_INDEXIndexTypeConst::LOCAL_INDEX

      • 當不設定index_type或者設定index_type為IndexTypeConst::GLOBAL_INDEX時,表示使用全域二級索引。

        使用全域二級索引時,Tablestore以非同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,正常情況下同步延遲達到毫秒層級。

      • 當設定index_type為IndexTypeConst::LOCAL_INDEX時,表示使用本地二級索引。

        使用本地二級索引時,Tablestore以同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,當資料寫入資料表後,即可從索引表中查詢到資料。

    include_base_data

    索引表中是否包含資料表中已存在的資料,預設值為false。

    • 當設定include_base_data為true時,表示包含存量資料。

    • 當不設定include_base_data或者設定include_base_data為false時,表示不包含存量資料。

  • 樣本

    $createLocalRequest = array (
     'table_name' => 'MainTableName', // 資料表名稱。
     'index_meta' => array (
     'name' => 'IndexName', // 索引表名稱。
     'primary_key' => array('col1', 'PK1'),
     'defined_column' => array('col2'),
     'index_type' => IndexTypeConst::LOCAL_INDEX,
     'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
     )
    );
    $otsClient->createIndex ( $createLocalRequest );

讀取索引表中資料

從索引表中單行或者範圍讀取資料,當返回的屬性列在索引表中時,可以直接讀取索引表擷取資料,否則請自行反查資料表擷取資料。

  • 單行讀取索引表中資料

    更多資訊,請參見讀取單行資料

    使用GetRow介面讀取索引表中資料時有如下注意事項:

    • table_name需要設定為索引表名稱。

    • 由於系統會自動將未出現在索引列中的資料表主鍵補齊到索引表主鍵中,所以設定行的主鍵時,需要同時設定索引表索引列和補齊的資料表主鍵。

  • 範圍讀索引表中資料

    更多資訊,請參見範圍讀取資料

    使用GetRange介面讀取索引表中資料時有如下注意事項:

    • table_name需要設定為索引表名稱。

    • 由於系統會自動將未出現在索引列中的資料表主鍵補齊到索引表主鍵中,所以設定起始主鍵和結束主鍵時,需要同時設定索引表索引列和補齊的資料表主鍵。

刪除索引表(DropIndex)

使用DropIndex介面刪除資料表上指定的索引表。

  • 介面

    /**
     * 刪除全域二級索引。
     * @api
     *
     * @param [] $request
     *            請求參數,資料表名稱。
     * @return [] 請求返回。
     * @throws OTSClientException 當參數檢查出錯或服務端返回校正出錯時拋出異常。
     * @throws OTSServerException 當OTS服務端返回錯誤時拋出異常。
     * @example "src/examples/DropIndex.php"
     */
    public function dropIndex(array $request)
  • 參數

    參數

    說明

    table_name

    資料表名稱。

    index_name

    索引表名稱。

  • 樣本

    $request = array (
        'table_name' => 'MainTableName',
        'index_name' => 'IndexName'
    );
    $otsClient->dropIndex( $request );