Couchbase II( View And Index)
Views
view的作用是從沒有結構和半結構的數據對象中抽取過濾需要的信息,並生成相關的index信息,通常生成json數據。 view通過叠代bucket所有文檔而提取過濾信息,進而生成index。
一個bucket可以有多個設計文檔,一個設計文檔(Design Document)可以有多個views。
開發view和產品view開發view 以dev——前綴開始,只對部分數據做index和view,以幫助不用對所有的數據做view, 而調試得到正確的view,之後可以切換到產品模式(去掉dev_前綴)
view名一定要是一個或多個uft編碼字符,首尾中間不含空白(空格, tab等)
View的作用
-
索引和查詢存儲的對象
-
構建輸出指定的對象類型
-
從數據庫抽取過濾信息
-
計算,統計,聚集數據集合的信息
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:
-
index會根據服務配置設定的更新頻率自動更新。
-
在query時,可以指定是否更新index
-
刪除文檔時,只用硬盤上的數據被刪除,index才會被刪除
-
文檔有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)