• 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的表示一致
  • 相关阅读:
    【理财启蒙】理财:需要树立正确的金钱观
    【系统设计】分布式唯一ID生成方案总结
    【Hash一致性算法】什么是Hash一致性算法
    【位图算法】什么是BitMap
    关于枚举类你可能不知道的事
    【数据结构】什么是AVL树
    mysql5.6 主从同步配置
    vmstat命令详解
    pstack跟踪进程栈
    iostat 磁盘io分析工具
  • 原文地址:https://www.cnblogs.com/nagi/p/4191399.html
Copyright © 2020-2023  润新知