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 = ; i < ; i++)
{
var testChild = new
{
FirstName = "张三",
Age = i > ? i % : i,
Gender = i % == ? "女" : "男"
}; 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", };
List<object> endKey = new List<object>() { "GetNv", };
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().EndKey();
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。
Couchbase学习和使用的更多相关文章
- Couchbase学习记录
Couchbase是membase的升级版,membase与memcache是同一家公司出的,Couchbase包含了memcache的功能. 从其官网上下载最新的版本安装即可.安装成功后会弹出设置页 ...
- 170多个Ionic Framework学习资源(转载)
在Ionic官网找到的学习资源:http://blog.ionic.io/learning-ionic-in-your-living-room/ 网上的文章比较多,但是很多时候我们很难找到自己需要的. ...
- redis 学习笔记(5)-Spring与Jedis的集成
首先不得不服Spring这个宇宙无敌的开源框架,几乎整合了所有流行的其它框架,http://projects.spring.io/spring-data/从这上面看,当下流行的redis.solr.h ...
- C#分布式缓存Couchbase使用
目前C#业界使用得最多的 Cache 系统主要是 Memcached和 Redis. 这两个 Cache 系统可以说是比较成熟的解决方案,也是很多系统当然的选择. 一.简介 目前C#业界使用得最多的 ...
- C#分布式缓存二:Asp.Net中使用Couchbase
前言 上一篇<C#分布式缓存一:Couchbase的安装与简单使用>主要讲解对Couchbase服务端的安装配置和客户端的引用调用,通过代码来完成最简单的实现调用.本次通过简单的配置,来完 ...
- C#分布式缓存一:Couchbase的安装与简单使用
一.简介 目前C#业界使用得最多的 Cache 系统主要是 Memcached和 Redis. 这两个 Cache 系统可以说是比较成熟的解决方案,也是很多系统当然的选择. Memcache的开发团队 ...
- .Net分布式缓存应用实例:Couchbase
转自:http://www.cnblogs.com/wu-jian Couchbase概述 Couchbase最早叫Membase,是由Memcached项目组的一些头目另立的山头. 2011年与Co ...
- C#分布式缓存Couchbase
C#分布式缓存Couchbase使用 一.简介 目前C#业界使用得最多的 Cache 系统主要是 Memcached和 Redis. 这两个 Cache 系统可以说是比较成熟的解决方案,也是很多系统当 ...
- Asp.Net中使用Couchbase——Memcached缓存使用篇
Asp.Net中使用Couchbase——Memcached缓存使用篇 前言 在上一篇Asp.Net中使用Couchbase——Memcached缓存入门篇http://www.cnblogs.com ...
随机推荐
- 遍历DOM树,获取子节点
获取子节点的方法有: 方法 说明 children() 选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点. find() 选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...
- 【剑指offer】单链表尾部插入一个节点
#include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...
- JAVAWEB 一一SpringMVC(XML配置)
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...
- FMS Dev Guide学习笔记(权限控制)
一.开发交互式的媒体应用程序 1.关于访问(权限)控制 当一个用户访问服务器的时候,默认情况下,他可以访问所有的流媒体文件和共享对象.但是你可以使用服务端ActionScript为流媒体文件和 ...
- css样式中的绝对路径的参考对象
如果div标签中没有position:absolute;样式,那么img的参考对象就是浏览器 如果div标签中有position:absolute;样式,那么img的参考对象就是父元素,即div标签
- JS-cookie和正则表达式
一 cookie 1 什么是cookie? 会话跟踪技术 2 作用 验证身份,存储信息. 3 特点 大小限制,最多存4k: 每个域下只能存50个cookie: 有时间限制: 只能存放字符串: 只能访问 ...
- “2017面向对象程序设计(Java)第就九周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第就九周学习总结”存在问题的反馈 1.博文未写者:高树平 高俊梅 冯小丽 缪召召 王瑞强 宗鹏新 李向龙 马润韬 米奇辉 卯保云——不及时提交博客的同学人数出 ...
- python中的matplotlib的一些基础用法
#绘制折线图或者散点图plot import matplotlib.pyplot as pyl import numpy as npy x = [1,2,3,4,8] y = [5,7,2,1,5] ...
- 判断元素16种方法expected_conditions
前言 标签(空格分隔): 判断元素 经常有小伙伴问,如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_condition ...
- 性能测试工具---jmeter
一.jmeter:简介 Apache jmeter是Apache组织的开发的源代码项目,是一个纯的Java应用,用于压力测试和性能测试,他最初的测试使用于web端的测试,但是后来也被扩展到其他的测试 ...