1. 程式人生 > >Couchbase II( View And Index)

Couchbase II( View And Index)

內建函數 返回 數據集 not document descend bucket 結構 base

Views

view的作用是從沒有結構和半結構的數據對象中抽取過濾需要的信息,並生成相關的index信息,通常生成json數據。 view通過叠代bucket所有文檔而提取過濾信息,進而生成index。

一個bucket可以有多個設計文檔,一個設計文檔(Design Document)可以有多個views。

開發view和產品view開發view 以dev——前綴開始,只對部分數據做index和view,以幫助不用對所有的數據做view, 而調試得到正確的view,之後可以切換到產品模式(去掉dev_前綴)

view名一定要是一個或多個uft編碼字符,首尾中間不含空白(空格, tab等)

View的作用

  1. 索引和查詢存儲的對象

  2. 構建輸出指定的對象類型

  3. 從數據庫抽取過濾信息

  4. 計算,統計,聚集數據集合的信息

View contents

view的輸出對應每個emit有三個重要屬性

  • Document ID

    每次調用emit()都會包含 document id,幫助加載所有的文檔通過get() 
    
  • View key

    這是emit()的第一個參數,你可以指定key任何值,包括數組(一組值)來查詢復雜的選擇和報告。
    key的值也決定如何插敘
    
  • View value

    這是emit()的第二個參數,只能被自定義的reduce方法使用。
    

查詢和選擇

Couchbase 支持三種選擇方式:
  • Speific Key(指定的鍵)

    $result = $cb->view("recipes", "bytitle", array(‘key‘ => ‘Apple Pie‘));
    
  • One or more keys

    $result = $cb->view("dev_recipes", "bytitle", array(‘keys‘ => array(‘Shepherds
    pie‘, ‘Mariners pie‘)));
    
  • Key range

    #會找出tittle在Meat loaf到Mexican tacos間所有的數據
    $result = $cb->view("dev_recipes", "bytitle", array(‘startkey‘ => ‘Meat
    loaf‘,‘endkey‘ => ‘Mexican tacos‘));
    
可選的附加功能

key可以幫助過濾查詢,但view也有排序和其他需求:

  • descending

    Return the documents in descending by key order
    
  • endkey

    Stop returning records when the specified key is reached. Key must be specified as a JSON value.
    
  • endkey_docid

    Stop returning records when the specified document ID is reached
    full_set Use the full cluster data set (development views only).
    
  • group

    Group the results using the reduce function to a group or single row
    
  • group_level

    Specify the group level to be used
    
  • inclusive_end

    Specifies whether the specified end key should be included in the result
    
  • key

    Return only documents that match the specified key. Key must be specified as a JSON value.
    
  • keys

    Return only documents that match each of keys specified within the given array. 
    Key must be specified as a JSON value. Sorting is not applied when using this option.
    
  • limit

    Limit the number of the returned documents to the specified number
    
  • on_error

    Sets the response in the event of an error. stop will stop returning rows; 
    continue will notify you of the error, but continue returning rows from other nodes.
    
  • reduce

    Use the reduction function.
    
  • skip

    Skip this number of records before starting to return the results
    
  • stale

    Allow the results from a stale view to be used. ok uses a stale index; 
    false forces an index update; 
    up date_after updates the index after it has been accessed (default)
    
  • startkey

    Return records with a value equal to or greater than the specified key. 
    Key must be specified as a JSON value.
    
  • startkey_docid

    Return records starting with the specified document ID
    

處理不同的數據格式

有時可能因為應用的版本,而造成輸出不同等,而輸入的數據格式也不同,emit 可以出現多次,通過選擇控制輸出不同格式(JS):

function (doc, meta){
    if (doc.preptime && doc.cooktime){
        emit(parseInt(doc.preptime, 10) + parseInt(doc.cooktime, 10), null);
    }
    else{
        emit(parseInt(doc.totalcooktime, 10), null);
    }
}

當需要使用到reduce時,這時emit的第二個參數,就需要傳入value,如果不要用到,就像上面例子傳入null就好

index 更新

index更新會在各個節點同步時,觸發更新。Couchbase在讀寫時(get, set)時,先從緩存層開始,只用序列化更新到磁盤,才會更新index:

  1. index會根據服務配置設定的更新頻率自動更新。

  2. 在query時,可以指定是否更新index

  3. 刪除文檔時,只用硬盤上的數據被刪除,index才會被刪除

  4. 文檔有TTL過期時限,相關index會自動更新當文檔過期

stale 參數

在客戶端獲取數據時,設置 -stale- 參數可以設定三種index 更新狀態:

  • update_after

    在獲取數據後更新index,也就是下次查詢時使用的是更新的view
    
  • ok

    使用當前版本的index,不觸發index更新
    
  • false

    強制更新所有的索引後返回查詢結果,也許會很費時間,因為要更新所有的view和index。
    

Reductions

_count
_count內建函數用來統計來自map的輸入行
_sum
_sum 會把map輸出的值或多個值加起來。
_stats
用於聚集統計,最大,最小等值。

文檔的元數據

meta 含如下信息和字段:

  • id

    數據對象的ID或鍵(key),和set方法用來寫數據的key是一樣的
    
  • rev

    內建版本號,用來追蹤當前數據的版本。rev字段含的信息是不具有一致性或可跟蹤性,不可用於客戶端應用中。
    
  • type

    保存文檔的類型, JSON文檔是json類型, 二進制文檔是base64類型
    
  • flags

    flags是一個32為的整數,用來保存數據保存創建的時間, 可用狀態由客戶端是否支持決定
    
  • expiration

    數據對象過期時間 ,和TTL的表示一致

Couchbase II( View And Index)