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的作用

  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的表示一致
时间: 2024-11-06 07:48:43

Couchbase II( View And Index)的相关文章

SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

--索引(index)和视图(view)-- --索引(index)----概述: 数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序.索引创建在数据表或者视图的字段上,生成索引页,存放于数据库中.--分类:在SQL Server中,根据索引的作用和存储方式的不同,将索引分为聚集索引和非聚集索引两类. 1)聚集索引 :指数据库的物理顺序与被创建索引的字段顺序完全相同.同一个数据表最多只能创建一个聚集索引.默认情况下主键自动被创建为聚集索引.聚集

HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比

HBase.Redis.MongoDB.Couchbase.LevelDB主流 NoSQL 数据库的对比 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,

Couchbase第一印象(架构特性)

Couchbase第一印象(架构特性) 面向文档 保存的字节流总有一个 DOCUMENT ID(Object_ID) 高并发性,高灵活性,高拓展性,容错性好 面向文档的集群存储系统 每个文档用一个唯一的Doc ID 均衡负载 Buckets vs vBuckets 1. Buckets couchbase的存储逻辑单元叫Bucket 每个bucket有个名字 couchbase 一个节点当前限制10及以下buckets bucket 有两种类型 couchbase和memcached bucke

Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

从前文可知道,每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口.每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图.应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的.在本文中,我们就详细分析应用程序窗口视图的创建过程. 在前面Android应用程序窗口(Activity)实现框架简要介绍和学习计划一文中提到,应用程序

源码解析:dialog, popupwindow, 和activity 的第一个view是怎么来的?

问题 在慢慢熟悉android 的过程中,发现一个view 或者layout的初始化,或者构造的流程还是比较清楚的,也就是加到父控件中,然后就开始了对应的生命周期.但是整个界面的父控件,或者说系统的第一个view, 是怎么来的,如何初始化和绘制的呢? 概述 概述:带着困扰我的问题,在前文的基础上,继续分析应用界面和framework的关系,通过分析viewrootimpl 的来源,并结合dialog, popupwindow, 和activity 的 根view的创建流程,回答了问题界面的根vi

Android中View绘制流程分析

创建Window 在Activity的attach方法中通过调用PolicyManager.makeNewWindo创建Window,将一个View add到WindowManager时,WindowManagerImpl创建一个ViewRoot来管理该窗口的根View.并通过ViewRoot.setView方法把该View传给ViewRoot. final void attach(Context context, ActivityThread aThread, Instrumentation

leetCode 119. Pascal's Triangle II 数组

119. Pascal's Triangle II Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? 代码如下:(使用双数组处理,未优化版) class Solution { public:     

ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

原文:ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view) 在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Data.

leetcode -day13 Valid Palindrome & Triangle & Pascal's Triangle I II

1.  Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. For example, "A man, a plan, a canal: Panama" is a palindrome. "race a car" is not a palindrome. Note: