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的表示一致

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

  1. javax.servlet.ServletException: Circular view path [index]: would dispatch back to the current handler URL [/pay/index] again. Check your ViewResolver setup!

    2019-08-08 17:12:03.544 ERROR 13748 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ...

  2. [Hive - LanguageManual] Create/Drop/Alter -View、 Index 、 Function

    Create/Drop/Alter View Create View Drop View Alter View Properties Alter View As Select Version info ...

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

    --索引(index)和视图(view)-- --索引(index)----概述: 数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序.索引创建在数 ...

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

    最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...

  5. Couchbase学习和使用

    Couchbase介绍 couchbase的关键有两点:延后写入和松散存储.延后写入,顾名思义,couchbase在对数据进行增删时会先体现在内存中,而不会立刻体现在硬盘上,从内存的修改到硬盘的修改这 ...

  6. Couchbase I

    Couchbase第一印象(架构特性) 面向文档 保存的字节流总有一个 DOCUMENT ID(Object_ID) 高并发性,高灵活性,高拓展性,容错性好 面向文档的集群存储系统 每个文档用一个唯一 ...

  7. Couchbase第一印象(架构特性)

    Couchbase第一印象(架构特性) 面向文档 保存的字节流总有一个 DOCUMENT ID(Object_ID) 高并发性,高灵活性,高拓展性,容错性好 面向文档的集群存储系统 每个文档用一个唯一 ...

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

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  9. IOS UIView 03- 自定义 Collection View 布局

    注:本人是翻译过来,并且加上本人的一点见解. 前言 UICollectionView 在 iOS6 中第一次被引入,也是 UIKit 视图类中的一颗新星.它和 UITableView 共享一套 API ...

随机推荐

  1. 本人常用的Phpstorm快捷键

    我设置的是eclipse的按键风格(按键习惯),不是phpstorm的风格 1.添加TODO(这个不是快捷键)://TODO 后面是说明,换行写实现代码 2.选择相同单词做一次性修改:Alt+J+鼠标 ...

  2. 解决IE下面诡异地使用quickrIE5模式打开页面的有关问题

    解决IE下面诡异地使用quickrIE5模式打开页面的有关问题 <!doctype html public "-//w3c//dtd html 4.01 transitional//e ...

  3. Coursera 算法二 week 3 Baseball Elimination

    这周的作业不需要自己写算法,只需要调用库函数就行,但是有些难以理解,因此用了不少时间. import edu.princeton.cs.algs4.FlowEdge; import edu.princ ...

  4. SAP成都研究院非典型程序猿,菜园子小哥:当我用UI5诊断工具时我用些什么

    身边有些年轻同事曾经向我表达过这种困扰:尽管完成日常工作没有任何问题,但是还想更进一步,把代码写得更好些,做到精益求精.现在写的代码能实现功能,但是不知道可以怎样写得更好. 除了阅读优秀的开源库开源框 ...

  5. NOIP2018提高组Day2 解题报告

    前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). \(Day2\)的题目和\(Day1\)比起来,真的是难了很多啊. \(T1\):旅行(点此看 ...

  6. 动态规划专题(五)——斜率优化DP

    前言 斜率优化\(DP\)是难倒我很久的一个算法,我花了很长时间都难以理解.后来,经过无数次的研究加以对一些例题的理解,总算啃下了这根硬骨头. 基本式子 斜率优化\(DP\)的式子略有些复杂,大致可以 ...

  7. 问题 F: 等比数列

    问题 F: 等比数列 时间限制: 1 Sec  内存限制: 64 MB提交: 2699  解决: 1214[提交][状态][讨论版][命题人:外部导入] 题目描述 已知q与n,求等比数列之和: 1+q ...

  8. bazel安装

    https://blog.csdn.net/cxq234843654/article/details/70861155 sudo apt-get install openjdk-8-jdk echo ...

  9. vs2015“当前不会命中断点 还没有为该文档加载任何符号”的解决方法

    解决方法:工具-选项-调试 -(启用“仅我的代码”)勾去掉

  10. Python02 变量

    变量 因为Python是弱变量类型编程语言,所以变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 变量 ...