• 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。

  • 相关阅读:
    Spring Cloud云架构
    Spring Cloud云架构
    Spring Cloud云架构
    KafKa集群安装详细步骤
    Spring Cloud云架构
    matlab规定小数点保留4位且非科学计数法格式存储txt
    Test checkout of feature 'Compiler' failed 解决方法(转载)
    摄像机内参相关(3ds max)
    针孔相机模型和变形
    关于Matlab里面的四个取整(舍入)函数:Floor, Ceil, Fix, Round的解释(转)
  • 原文地址:https://www.cnblogs.com/zhao123/p/9207268.html
Copyright © 2020-2023  润新知