zoukankan      html  css  js  c++  java
  • Couchbase学习和使用

    Couchbase介绍

      couchbase的关键有两点:延后写入和松散存储。延后写入,顾名思义,couchbase在对数据进行增删时会先体现在内存中,而不会立刻体现在硬盘上,从内存的修改到硬盘的修改这一步骤是由couchbase自动完成,等待执行的硬盘操作会以write queue的形式排队等待执行,也正是通过这个方法,硬盘的I/O效率在write queue满之前是不会影响couchbase的吞吐效率的,而write queue的长度是可以设置的。松散存储也很好理解,在关系型数据库中,要先建库建表,最后插数据,而在couchbase中bucket就相当于库,没有表的存在,直接就插数据了。关系型数据库依赖表来进行条件查询,couchbase一开始没有具备表功能的结构,所以是无法执行条件查询的,但是通过view则可以手动添加所需要的关系,view的设置是非常复杂的一部分。总之couchbase的一般逻辑是建bucket——>插入数据——>建立View。正是因为关系可以后天建立,才使得不必预先规划数据应具备的关系,随用随建即可。当然,对couchbase而言插入数据其实是插入json格式的文件。couchbase的精髓就在于依赖内存最大化降低硬盘I/O对吞吐量的负面影响。

    Couchbase学习网址

    Couchbase解释:https://segmentfault.com/a/1190000002907171
    Couchbase学习:http://www.codeweblog.com/category/couchbase/
    Couchbase官网:https://developer.couchbase.com/documentation/server/4.1/getting-started/first-n1ql-query.html
    Couchbase Devloper's Guide2.0: (http://www.open-open.com/doc/view/d1dbdd84a413445f9594f3731f26f749  这本书讲的比较细
    Couchbase Server:https://max.book118.com/html/2015/1016/27419732.shtm  很好

    NuGet 添加

      CouchbaseNetClient

    配置文件

      <configSections>
        <sectionGroup name="couchbaseClients">
          <section name="couchbase" type="Couchbase.Configuration.Client.Providers.CouchbaseClientSection, Couchbase"/>
        </sectionGroup>
      </configSections>
      <couchbaseClients>
        <couchbase>
          <servers>
            <add uri="http://localhost:8091"></add>
          </servers>
          <buckets>
            <add name="default" password="" useSsl="false">
              <connectionPool name="custom" maxSize="10" minSize="5" waitTimeout="5000" shutdownTimeout="3000"></connectionPool>
            </add>
          </buckets>
        </couchbase>
      </couchbaseClients>

    C#代码例子

    ClusterHelper.Initialize();
    var cluster = ClusterHelper.Get();
    using (var bucket = cluster.OpenBucket("default"))
    {
        //创建文档    
        for (int i = 1; i < 10000; i++)
        {
            var testChild = new
            {
                FirstName = "张三",
                Age = i > 100 ? i % 100 : i,
                Gender = i % 2 == 0 ? "" : ""
            };
    
            string strGUID = "document_id_00" + i.ToString();
            var doc = new Document<dynamic>
            {
                Id = strGUID,
                Content = testChild
            };
            //没有数据新增,有数据更新
            bucket.Upsert(doc);
        }
        
        // 根据ID查询数据     
        var resultDoc = bucket.Get<string>("document_id_001");
        //根据View查询数据   组合key    
        List<object> startKey = new List<object>() { "GetNan", 20 };
        List<object> endKey = new List<object>() { "GetNv", 22 };
        var view = bucket.CreateQuery("document_id", "Test").StartKey(startKey).EndKey(endKey);
        var query = await bucket.QueryAsync<dynamic>(view);
        //根据View查询数据   key  
        var view1 = bucket.CreateQuery("document_id", "Test2").StartKey(0).EndKey(100);
        var query1 = await bucket.QueryAsync<dynamic>(view1);
    }

    Couchbase中View介绍

    emit中第一个参数为key,第二个参数是返回值,组合key用[]括起来,doc为自己建的文档,meta默认的,有四个参数id等。简单来说就是emit中就是key,value 

    function (doc, meta) {
      emit(doc.age, doc);
      if(doc.gender=="男")
        {
         emit(["GetNan",doc.age],doc);
        }
      if(doc.gender=="女")
        {
         emit(["GetNv",doc.age],doc);
        }
    }

    emit(["GetNv",doc.age],null);返回值为null的解释

    1. index 會很大
    2. couchbase在forum裡的技術說不要emit doc
    3. 返回index是單線程, 自己寫拿取doc可以拼行
    4. 我们称key-value生成的为primary index,id-key生成的为back index。
    5. 如果用doc的话可能会引发类型为“System.OutOfMemoryException”的异常。

    本地Couchbase 4.1文档

    1. 下载java jdk
    2. 配置环境变量
    3. clone https://github.com/couchbase/docs-cb4/
    4. clone https://github.com/couchbaselabs/dita-ot-2.1.1
    5. 打开cmd窗口,进入dita-ot-2.1.1的bin目录,输入“dita -version”命令。如果显示“DITA-OT version 2.1.1”,则表示环境搭建OK。
    6. dita -f html5 -i d:/GitProject/docs-cb4/content/cb-docs.ditamap -o d:/couchbaseDoc/output/
     其中-f表示发布文档保存格式,-i表示待发布的文档的顶级 ditamap 文件,-o 表示发布结果保存路径
    7. 打开d:/couchbaseDoc/output/index.html 即可查看文档

    创建indexex  ([`]这不是双引号也不是带引号是数字【1】左边的的)

    1. 常见index
      CREATE INDEX `beer-sample-type-index` ON `beer-sample`(type) USING GSI WITH {"defer_build":true};
    2. 查询是否创建成功
      SELECT * FROM system:indexes WHERE name="beer-sample-type-index";
    3. build index
      BUILD INDEX ON `beer-sample`(`beer-sample-type-index`) USING GSI;
    4. 查询数据
      SELECT * FROM `beer-sample` WHERE type="beer-sample-type-index";

     Couchbase的优点

    1.Couchbase 的对等网设计,smart client
    2.直接获取整的集群的信息,在客户端实现负载均衡,整个集群没有单点失效,并且完全支持平行扩展。
    3.vBucket 的引入,完全实现了 auto sharding,可以方便灵活的把数据的子集在不同节点上移动,以实现集群动态管理。
    4.Couchbase 有一个非常专业的 web 管理界面,并且支持通过 RESTful API 管理,这也是 memcached,redis 不能企及的。
    5.如果只是做 key/value 的 cache,Couchbase 可以完全取代 memcached。

  • 相关阅读:
    Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
    控制‘控制台应用程序’的关闭操作
    详解for循环(各种用法)
    敏捷软件开发
    Sql Server的一些知识点
    在SharePoint 2010 中配置Remote Blob Storage FILESTREAM Provider
    使用LotusScript操作Lotus Notes RTF域
    JOpt Simple 4.5 发布,命令行解析器
    John the Ripper 1.8.0 发布,密码破解工具
    PacketFence ZEN 4.0.1 发布,网络接入控制
  • 原文地址:https://www.cnblogs.com/zhao123/p/9207268.html
Copyright © 2011-2022 走看看