Go语言中文网 为您找到相关结果 41

来自腾讯架构师对,Redis的实践及思考

来自腾讯架构师对,Redis的实践及思考 导语:当面临存储选型时是选择关系型还是非关系型数据库?如果选择了非关系型的redis,redis常用数据类型占用内存大小如何估算的?redis的性能瓶颈又在哪里? 背景 前段时间接手了一个业务,响应时间达到10s左右。阅读源码后发现,每一次请求都是查询多个分表数据(task1,task2….),然后再join其他表(course,teacher..),时间全部花在了大量磁盘I/O上。脑袋一拍,重构,上redis! 为什么选择redis 拍脑袋做技术方案肯定是不行的,得用数据和逻辑说服别人才可以。 时延 时延=后端发起请求db(用户态拷贝请求到内核态)+ 网络时延 + 数据库寻址和读取 如果想要降低时延,只能减少请求数(合并多个后端请求)和减少数据库寻...阅读全文

博文 2019-08-23 23:32:50 勤奋的码农

Golang - var 和 := 的使用

Go语言里面定义变量有多种方式。 使用var关键字是Go最基本的定义变量方式,有时也会使用到:=来定义变量。 定义变量 // 定义一个名称为“variableName”,类型为"type"的变量 // var variableName type var number int 定义变量并初始化值 // 初始化“variableName”的变量为“value”值,类型是“type” // var variableName type = value var number int = 10 同时初始化多个变量,又叫平行赋值 /* 定义三个类型都是"type"的变量,并且分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 */ // var vname1, vname2,...阅读全文

博文 2017-03-05 19:58:12 莫尛莫

Go的类型断言解析

经常地我们对一个接口值的动态类型是不确定的,如方法的形参为接口类型时,此时就需要检验它是否符合我们需要的类型。类型断言是一个使用在接口值上的操作。 如果对Golang的接口和接口值的概念不熟悉,看这里:Go的接口总结断言类型的语法:x.(T),这里x表示一个接口的类型,T表示一个类型(也可为接口类型)。一个类型断言检查一个接口对象x的动态类型是否和断言的类型T匹配。 类型断言分两种情况:第一种,如果断言的类型T是一个具体类型,类型断言x.(T)就检查x的动态类型是否和T的类型相同。 如果这个检查成功了,类型断言的结果是一个类型为T的对象,该对象的值为接口变量x的动态值。换句话说,具体类型的类型断言从它的操作对象中获得具体的值。 如果检查失败,接下来这个操作会抛出panic,除非用两个变量来接...阅读全文

博文 2017-10-20 08:06:27 susufufu

Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)

以前为了做compiler,研读+实现了几乎所有种类的语言。现在看语法手册几乎很快就可以理解整个语言的内容。后来我对比了一下go和rust,发现go的类型系统简直就是拼凑的。这会导致跟C语言一样,需要高超的技巧才能写大程序。而rust则没有这种问题,每个部分的组成都很和谐。---------------------------------------------------------------------- Rust是挺优秀的,函数式本来就比命令式来的优雅。但同时也要看到,两种语言的定位不同。Go的定位是取代C(或C++),做所有软件的基础。而Rust想是一种划时代的语言,如果成功,将是颠覆性的。 但同时也应该看到,Go的目标简单,现在也比较稳定,可以使用了而Rust虽然很强大,但它还处...阅读全文

博文 2015-01-16 18:00:01 findumars

Go 反射:根据类型创建对象-第一部分(原始类型)

> 这是关于在 Go 中根据类型创建对象的博客系列两部分的第一部分。这部分讨论原始类型的对象创建 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-reflect/cover1.png) Go 中的 reflect 包提供了根据执行过程中对象的类型来改变程序控制流的 API。 reflect 包提供了两个重要的结构 - Type 和 Value。 Type 是一个 Go 中任何类型的代表。换句话说,它可以被用于编码任何 Go 类型(例如:int , string , bool , myCustomType 等等)。Value 是一个 Go 中任何值的代表。换句话说,它可以被用于编码、操作任何...阅读全文

博文 2018-02-23 17:51:11 polaris

GO語言基礎教程:序章

首先自我介紹一下我自己,我是一個coder,目前主要從事B/S程序開發工作,懂點PHP;ASP;JSP;JS;VB;C;DELPHI;JAVA,另外知道幾個數據庫,除此之外別無所長,那麼我為何會選擇學習GO呢!接下來我對此詳細說明一下. 首先我來說明一下C/S程序和B/S程序的優缺點: C/S程序主要是運行在客戶端的電腦上,通常採用安裝的形式,以windows操作系統為例,軟件會被編譯成二進制然後以exe或dll等方式存在於客戶端的電腦上,其執行效率是非常高的,當然了除非編程者把代碼寫的非常糟糕,除此之外C/S程序幾乎不需要考慮安全問題和負載問題,除此之外C/S程序開發出來的東西幾乎是不開源的,使用者只能被動接受卻不能更改軟件的功能(如果您會彙編的話那就另當別論了).能夠開發C/S程序的語言...阅读全文

golang实现的一个小游戏–猜数字

文同步至:http://www.waylau.com/golang-game-guess-numbe/ 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了, 代码如下: package main import ( "bufio" "fmt" "math/rand" "os" "strconv" "time" ) var ( endNum int //设置生成数的范围 ) func main() { i := createRandomNumber(endNum) //fmt.Println("生成规定范围内的整数:", i) //本句调试用 fmt.Println("请输入整数,范围为:0-", endNum) flag := true reader := bufio...阅读全文

博文 2014-11-19 01:00:02 kkkloveyou

golang实现的一个小游戏–猜数字

文同步至:http://www.waylau.com/golang-game-guess-numbe/ 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了, 代码如下: package main import ( "bufio" "fmt" "math/rand" "os" "strconv" "time" ) var ( endNum int //设置生成数的范围 ) func main() { i := createRandomNumber(endNum) //fmt.Println("生成规定范围内的整数:", i) //本句调试用 fmt.Println("请输入整数,范围为:0-", endNum) flag := true reader := bufio...阅读全文

博文 2014-10-04 19:26:13 kkkloveyou

批处理GO的作用

--分析器会先分析下一个go前的所有代码,然后再执行,就算最后一步错,也会回滚到第一个语句的状态,换句话说,就是分析器会把go之间的语句作为一个事务,有错误的话会回滚到上一go之前。--可以在分析器下运行以下代码 create table temp(myint int)go --当这个go和下面的那个go没有的话,虽然这个语句正确,但是由于下面出错,这个表也不会创建的,--当只有这个go,没有下面的那个go的话,表temp会被创建,即使下面的语句出错。create function myfuntion(@int int)returns varchar(100)asbegindeclare @intvar varchar(100)set @intvar = 'asdfasd'return @i...阅读全文

博文 2015-09-25 06:00:00 jamex

Mgo库的常见坑总结

mgo库是一个很好用的MongoDB驱动。对我们来说,主力数据库是MongoDB,因此这个驱动对我们来说也是非常重要的。但是,mgo库有些问题算是一些坑,这里我做了一些简单的整理。 一些关于bson.ObjectId的问题 ObjectId为空的判断 如果你看bson.ObjectId定义的话,它是一个string类型的数据。但是如果你直接定义一个结构,并且生成对象时,这个对象并不是这样的。 我们首先定义一个结构体: type Home struct { ID bson.ObjectId `bson:"_id,omitempty"` Name string `bson:"name"` } 然后看看一个生成的内容 h := Home{Name: "123"} fmt.Println(h.ID)...阅读全文

博文 2017-02-10 15:41:08 kevin

go语言产生素数

package main // 生成2, 3, 4, ... 到 channel 'ch'中. func Generate(ch chan<- int) { for i := 2; ; i++ { ch <- i // Send 'i' to channel 'ch'. } } // 从管道复制值 'in' 到 channel 'out', // 移除可整除的数 'prime'. func Filter(in <-chan int, out chan<- int, prime int) { for { i := <-in // 接收值 'in'. if i%prime != 0 { out <- i // 传入 'i' 到 'out'. } } } func main() { ch := m...阅读全文

博文 2015-06-17 23:07:41 love_se

: 通过不到100行Go代码打造你自己的容器

备注:这个文章讲容器,讲的比较的浅显易懂。推荐,前期入行者看。 转: http://www.infoq.com/cn/articles/build-a-container-golang?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_news_clk Docker在2013年三月实现了开源发布,它的出现让软件开发行业对于现代化应用的打包以及部署方式发生了巨大的变化。紧随着Docker的发布,各种具有竞争性、致敬性以及支持性的容器技术纷纷涌现,为这一领域带来了极大的关注度,同时也引起了人们的反思。这一系列文章将解答读者的各种困惑,对如何在企业中实际使用容器进行分析。 这一系列文章首先将对容...阅读全文

博文 2016-06-24 09:00:00 jhj117

Go 语言 与 C 语言 的比较学习

对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受! 关键字 分类 C Go 字符 char 无 字符串 无 string 浮点数 double , float float32 , float64 , complex64 , complex128 整数 int long short uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , rune=unit32 bool 无 boolean true , false 函数 无 func 接口 ...阅读全文

博文 2015-04-11 15:00:00 cchd0001

Go、Swift

出自:http://www.csdn.net/article/2014-12-09/2823025 Google于2009年第一次提出了Go的构思,Facebook在去年春天引入了Hack,随后不久Apple也发布了其Swift语言。 在战争中,胜利者写历史书;在科技中,赢的公司都在写编程语言。互联是建立在开发标准和代码之上,但是社交网络和云计算领域受企业巨头控制,并且它们开始把自己独一无二的印记烙在数字科技上——这是必然的,就像征服者威廉和他的诺曼人一样,大量新的词汇加入到英语中。他带来许多新事物,如陪审制度,这些都影响着当地的法律和语言的方式。 可以确定的是,新的语言给予程序员一些有用的支撑点。Google Go语言的构建简化了并发运行代码的工作,由于存在并行编程模式,因此这一语言也被设...阅读全文

博文 2016-04-13 09:00:03 u011530389

Golang 实现的一个小游戏--猜数字

随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了, 代码如下: package main import ( "bufio" "fmt" "math/rand" "os" "strconv" "time" ) var ( endNum int //设置生成数的范围 ) func main() { i := createRandomNumber(endNum) //fmt.Println("生成规定范围内的整数:", i) //本句调试用 fmt.Println("请输入整数,范围为:0-", endNum) flag := true reader := bufio.NewReader(os.Stdin) for flag { data, _, _ := reader...阅读全文

博文 2017-02-10 13:50:51 waylau

Go编程技巧--io.Reader/Writer

Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。 总览 围绕io.Reader/Writer,有几个常用的实现: net.Conn, os.Stdin, os.File: 网络、标准输入输出、文件的流读取 strings.Reader: 把字符串抽象成Reader bytes.Reader: 把[]byte抽象成Reader bytes.Buffer: 把[]byte抽象成Reader和Writer bufio.Reader/Writer: 抽象成带缓冲的流读取(比如按行读写) 这些实现...阅读全文

博文 2018-02-24 16:34:37 P_Chou水冗

[golang]golang time.After使用不当导致内存泄露问题分析

无意中看到一篇文章说,当在for循环里使用select + time.After的组合时会产生内存泄露,于是进行了复现和验证,以此记录 内存泄露复现 问题复现测试代码如下所示: 1 package main 2 3 import ( 4 "time" 5 ) 6 7 func main() { 8 ch := make(chan int, 10) 9 10 go func() { 11 var i = 1 12 for { 13 i++ 14 ch <- i 15 } 16 }() 17 18 for { 19 select { 20 case x := <- ch: 21 println(x) 22 case <- time.After(3 * time.Minute): 23 print...阅读全文

博文 2019-07-13 21:35:41 luoming1224

golang判断混合字符长度

blog.golang.org/strings1、const nihongo = "日本語" for index, runeValue := range nihongo { fmt.Printf("%#U starts at byte position %d\n", runeValue, index) }2、const nihongo = "日本語"for i, w := 0, 0; i < len(nihonggo); i+=w { runeValue, width := utf8.DecodeRuneInString(nihonggo[i:]) fmt.Printf("%#U starts at byte position %d\n", runeValue, i) w = width...阅读全文

博文 2017-07-01 20:00:01 leving

Go2将修改导出规则

Go2将修改导出规则, 只有小写字母和”_“开头的不导出. 中文等不区分大小写的标识符默认导出. A solution that's been kicking around for a while: For Go 2 (can't do it before then): Change the definition to “lower case letters and _ are package-local; all else is exported”. Then with non-cased languages, such as Japanese, we can write 日本語 for an exported name and _日本語 for a local name. This ru...阅读全文

为什么 Go 关心 unsafe.Pointer 和 uintptr 之间的差别

Go 有两样东西或多或少是无类型指针的表示:uintptr 和 unsafe.Pointer (和外表相反,它们是内置类型)。 从表面上看这有点奇怪,因为 unsafe.Pointer 和 uintptr 可以彼此来回转换。为什么不只有一种指针表现形式?两者之间有什么区别? 表面的区别是可以对 uintptr 进行算数运算但不能对 unsafe.Pointer(或任何其他 Go 指针)进行运算。unsafe 包的文档指出了重要的区别: > uintptr 是整数,不是引用。将 Pointer 转换为 uintptr 会创建一个没有指针语义的整数值。即使 uintptr 持有某个对象的地址,如果对象移动,垃圾收集器并不会更新 uintptr 的值,uintptr 也无法阻止该对象被回收。 尽管...阅读全文

博文 2020-01-08 23:12:31 dust347

go(golang)之slice的小想法1(同步sigmentfault)

slice,是go中一个很重要的主题。我们不用切片来表述,因为这里的切片特指的是数组的切片。 先给slice下个定义吧: Slice expressions construct a substring or slice from a string, array, pointer to array, or slice. There are two variants: a simple form that specifies a low and high bound, and a full form that also specifies a bound on the capacity. 从一个字符串中构建了一个子字符串或者从一个数组中构建一个切片,并且把这个子字符串或是这个切片的指针赋给这个s...阅读全文

博文 2015-11-01 03:00:00 monokeroslun

go(golang)之slice的小想法1

slice,是go中一个很重要的主题。我们不用切片来表述,因为这里的切片特指的是数组的切片。 先给slice下个定义吧: Slice expressions construct a substring or slice from a string, array, pointer to array, or slice. There are two variants: a simple form that specifies a low and high bound, and a full form that also specifies a bound on the capacity. 从一个字符串中构建了一个子字符串或者从一个数组中构建一个切片,并且把这个子字符串或是这个切片的指针赋给这个s...阅读全文

博文 2015-06-23 14:02:14 Pxclknn

go(golang)之slice的小想法1

slice,是go中一个很重要的主题。我们不用切片来表述,因为这里的切片特指的是数组的切片。 先给slice下个定义吧: Slice expressions construct a substring or slice from a string, array, pointer to array, or slice. There are two variants: a simple form that specifies a low and high bound, and a full form that also specifies a bound on the capacity. 从一个字符串中构建了一个子字符串或者从一个数组中构建一个切片,并且把这个子字符串或是这个切片的指针赋给这个s...阅读全文

博文 2017-02-09 13:42:27 monokeroslun

给鸭子加上火箭动力——策略模式

策略模式 问题引入 当我们有一堆鸭子,各个鸭子都有相同的游泳(swim),自我描述(display)方法,因为它们都会游泳和自我描述;但是不同的鸭子又有自己特有的飞行(fly),叫声(quack),这时如何使用设计模式来解决这样的问题呢? 首先会想到的方法是,有一个鸭子超类,swim和diplay作为公有的方法,不同鸭子的子类去覆盖实现各自的fly和quack方法,貌似就可以解决这个问题了 不过,每当新的鸭子类型出现,就需要重新去实现fly和quack方法;甚至如果多个鸭子类型拥有相同的fly或quack方法,代码就不能很好地复用了。 在这里,鸭子的行为在子类里不断地改变,并且让所有子类都拥有这些行为是不恰当的。继承并不能很好地解决问题 设计原则 设计模式中的一个设计原则是:找出应用中可能需...阅读全文

golang http server探究(上)

在golang当中启动一个http服务非常简单,比如: http.HandFunc("/",func(w http.RequestWriter,r *http.Request){ io.WriteString(w,"hello world!") }) http.ListenAndServer(":9090") //outprint hello world! 为什么 访问 localhost:9090 就能打印出 Hello world 呢?这背后究竟发生了呢?下面我们就一层一层揭开这个面纱! 1 追踪 http.HandFunc函数,发现它调用了 : DefaultServeMux.HandleFunc(pattern, handler) DefaultServeMux实际是ServerMu...阅读全文

博文 2016-08-29 15:00:10 Tudo

一致性哈希算法 CARP 原理解析, 附 Golang 实现

一致性哈希算法 CARP 原理解析, 附 Golang 实现 在后端服务开发的过程中, 遇到了这样一个问题: 需要在 mysql 前面部署 redis 做一层缓存, 要求 redis 是集群部署, 并且每台 redis 节点只缓存总数据量的 1/N, N 为 redis 的个数. 看到这里大家都能想到到一个方法是使用 hash(key)%N 来选取 redis 进行 value 的存取, 这种方式当然可以很均匀的将数据分配到 N 个 redis 服务上, 并且实现起来也非常的简单. 但是使用这种哈希取余的方式有一个很大的问题, 那就是当 redis 集群扩容或者缩容, 或者发生宕机的时候, 也就是上述公式中的 N 发生变化的时候, 这个时候 hash(key)%N 的值保持不变的概率非常小,...阅读全文

博文 2017-05-26 06:01:11 CodeKiller

39.蛤蟆笔记go语言——接口

39.蛤蟆笔记go语言——接口 在Go中,保留字interface被赋予了多种不同的含义。每个类型都有接口,意味着对那个类型定义了方法集合。 接口定义为一个方法的集合。方法包含实际的代码。换句话说,一个接口就是定义,而方法就是实现。因此,接收者不能定义为接口类型,这样做的话会引起invalid receiver type ... 的编译器错误。 根据规则,单方法接口命名为方法名加上-er后缀:Reader,Writer,Formatter等。 有一堆这样的命名,高效的反映了它们职责和包含的函数名。 Read,Write,Close,Flush,String等等有着规范的声明和含义。为了避免混淆,除非有类似的声明和含义,否则不要让方法与这些重名。相反的,如果类型实现了与众所周知的类型相同的方法...阅读全文

博文 2016-07-09 12:00:12 notbaron

通过不到100行Go代码打造你自己的容器

Docker在2013年三月实现了开源发布,它的出现让软件开发行业对于现代化应用的打包以及部署方式发生了巨大的变化。紧随着Docker的发布,各种具有竞争性、致敬性以及支持性的容器技术纷纷涌现,为这一领域带来了极大的关注度,同时也引起了人们的反思。这一系列文章将解答读者的各种困惑,对如何在企业中实际使用容器进行分析。 这一系列文章首先将对容器背后的核心技术进行观察,了解开发者目前如何使用容器,随后将分析在企业中部署容器的核心挑战,例如如何将容器技术与持续集成和持续交付管道进行集成,并对监控方式进行改进,以支持不断变化的负载,以及使用短期容器的潜在需求。本系列文章的总结部分将对容器技术的未来进行分析,并探讨无核化技术(unikernels)目前在处于技术前沿的组织中所扮演的角色。 本文是本系列...阅读全文

博文 2016-08-23 04:00:07 justdoithai

LeetCode - 字符串排列 - Golang

题目:给定两个字符串 s1 和 s2,写一个函数来判断s2是否包含s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。 Golang代码实现尝试如下:示例1: 输入: s1 = "ab" s2 = "eidbaooo" 输出: True 解释: s2 包含 s1 的排列之一 ("ba"). 示例2: 输入: s1= "ab" s2 = "eidboaoo" 输出: False 基于Golang的代码实现如下: if s1 == "" { return true } // s1的长度大于s2时,必定不是子串 l1, l2 := len(s1), len(s2) if l1 > l2 { return false } // 获取s1每个字母的频率 arr1 := [26]int{...阅读全文

博文 2020-02-12 23:32:43 邹友

Golang下的unicode与字符编码

背景:在我们使用 Golang 进行开发过程中,总是绕不开对字符或字符串的处理,而在 Golang 语言中,对字符和字符串的处理方式可能和其他语言不太一样,比如 Python 或 Java 类的语言,本篇文章分享一些 Golang 语言下的 Unicode 和字符串编码。 Go 语言字符编码 注意: 在 Golang 语言中的标识符可以包含 "任何 Unicode 编码可以标识的字母字符"。 被转换的整数值应该可以代表一个有效的 Unicode 代码点,否则转换的结果就将会是 "�",即:一个仅由高亮的问号组成的字符串值。 另外,当一个 string 类型的值被转换为 [] rune 类型值的时候,其中的字符串会被拆分成一个一个的 Unicode 字符。 显然,Go 语言采用的字符编码方案从...阅读全文

博文 2020-05-30 23:34:34 BGBiao

MAY-Lesson2

golang pointer We can find that, by changing the parameter to a pointer type, the passed pointer argument &a and its copy x used in the function body both reference the same value, so the modification on *x is equivalent to a modification on *p, a.k.a., variable a. In other words, the modification in the double function body can be reflected out of...阅读全文

博文 2019-05-27 21:34:41 夜空一起砍猩猩

Effective Go

简介 go是一个新的语言。尽管它借鉴了已有语言的思想,但是它有一些不同的属性,使得高效的go语言特性与它类似的语言不一样。将一个c++或者java程序直接翻译成Go可能不会得到满意的结果-java程序是用Java 写的,不是Go。另外,用Go的思考方式去想问题会产生成功的但是不同的程序。换句话说,想写好go程序,理解它的特性和习惯是很重要的。知道约定俗成的Go编程习惯也很重要,例如命名规范,代码格式化,程序结构等等,这样才能让其他的Go程序员容易理解你的代码。 这边文章将指引你写出易明白的,符合规范的Go代码。这里会论及语言规范,Go指引,怎么管理和编写Go代码等部分,这些部分你应当写看一下。 1、例子 Go包资源目的除了展示核心库,同时给了怎么使用Go语言的示例。甚至于,很多包有独立的可以...阅读全文

博文 2019-07-17 18:32:44 迷心迷

Effective Go

简介 Go 是一门新语言。尽管它借鉴了现有语言的设计思想,但它拥有一些与众不同的特性,导致高效的 Go 程序的特点和用其相关语言编写的程序是不同的。直接将 C++ 或 Java 程序转换成 Go 不太可能产生令人满意的结果,因为 Java 程序是用 Java 写的,而不是用 Go。另一方面,从 Go 的角度思考问题可以得出有效但截然不同的程序。换句话说,要想写好 Go 程序,理解其性质和习惯用法是很重要的。知道 Go 编程的既定惯例也很重要,比如命名、格式化、程序构造等等,这样你编写的程序就会很容易被其他 Go 程序员理解。 本文档提供了编写清晰、惯用的 Go 代码的技巧。它是 language specification, Tour of Go, 和 How to Write Go Cod...阅读全文

博文 2019-10-24 16:32:45 aside section._1OhGeD

GO的部分总结~

package main import ( "fmt" "math" ) var f int = 1 /*全局变量允许 声明但是不使用*/ const AGE int = 25 //定义常量 const SEX = "man" //定义常量 const ( //枚举类型 Unknow = 0 Female = 1 Male = 2 CC = "lalalla" D //枚举特效 D的值会和CC一样 我自己理解为枚举的上下继承, L = len(CC) //可以使用系统内置函数 否则编译不过 ) //定义结构体 type Circle struct { radius float64 } type Books struct { title string author string bookid ...阅读全文

博文 2018-11-25 21:34:39 SmallForest

时序数据库 InfluxDB(二)

相关文章:时序数据库 InfluxDB(一)时序数据库 InfluxDB(二)时序数据库 InfluxDB(三)时序数据库 InfluxDB(四)时序数据库 InfluxDB(五)时序数据库 InfluxDB(六) RP 先回顾一下 RP 策略( retention policy ),它由三个部分构成: DURATION:数据的保留时长。 REPLICATION:集群模式下数据的副本数,单节点无效。 SHARD DURATION:可选项,shard group 划分的时间范围。 前两个部分没啥好说的,而 shard duration 和 shard group 的概念你可能会感到比较陌生。 shard 是什么? 先来看数据的层次结构: 如果所示,一个 database 对应一个实际的磁盘上的...阅读全文

EtcdRaft源码分析(线性一致读)

背景 我们知道Raft是Leader+Follower的模型,所有的更新由Leader处理,然后再同步给Follower。 想象一下,如果要所有的节点都参与进来支持读取的请求,会带来什么样的问题? Leader跟Follower并不总是一致的,换句话说Follower会落后Leader的进度。如果没有特别的处理,那么不同的节点读取的结果很可能不一致。 如果Leader被集群孤立,而且其他人已经推举出了新的Leader。而老的Leader还没有察觉到这个变化,他任然觉得还是Leader,但是他的数据已经不可信。如果他还在对外提供服务,那么读取的结果很可能不一致。 EtcdRaft的线性一致读是通过ReadIndex的机制来实现,大致的实现其实很简单,也就是在处理请求之前,会去集群中确认自己权力...阅读全文

博文 2019-03-15 16:37:27 Pillar_Zhong

leetcode_443

Golang: 思路:需要注意的是,这题并不要求你改变输入参数里切片的长度,换句话来说:输入[a,a,b,b,b,c],并不需要你将这个数组变成[a,2,b,3,c],而是只要修改为[a,2,b,3,c,c],并返回5即可。那么就可以用双指针,再加一个下标表示从当前哪个位置开始修改数组,这样就能完成这道题。当然,仍然需要处理数组到达最后一位的情况。 代码如下: func compress(chars []byte) int { if len(chars)<=1 { return len(chars) } wri:=1//(从当前这位开始写) i,j:=0,1 for j阅读全文

博文 2020-02-01 19:32:46 淳属虚构

EtcdRaft源码分析(线性一致读)

背景 我们知道Raft是Leader+Follower的模型,所有的更新由Leader处理,然后再同步给Follower。 想象一下,如果要所有的节点都参与进来支持读取的请求,会带来什么样的问题? Leader跟Follower并不总是一致的,换句话说Follower会落后Leader的进度。如果没有特别的处理,那么不同的节点读取的结果很可能不一致。 如果Leader被集群孤立,而且其他人已经推举出了新的Leader。而老的Leader还没有察觉到这个变化,他任然觉得还是Leader,但是他的数据已经不可信。如果他还在对外提供服务,那么读取的结果很可能不一致。 EtcdRaft的线性一致读是通过ReadIndex的机制来实现,大致的实现其实很简单,也就是在处理请求之前,会去集群中确认自己权力...阅读全文

博文 2020-04-08 07:32:51 小蜗牛爬楼梯

leetcode_917

Golang: 思路:简单题翻车,因为条件句少写个()。。。 代码如下: func reverseOnlyLetters(S string) string { bytes:=[]byte(S) pt1,pt2:=0,len(S)-1 for pt1='A'&&bytes[pt1]<='Z')||(bytes[pt1]>='a'&&bytes[pt1]<='z'))&&((bytes[pt2]>='A'&&bytes[pt2]<='Z')||(bytes[pt2]>='a'&&bytes[pt2]<='z')){ bytes[pt1],bytes[pt2]=bytes[pt2],bytes[pt1] pt1++ pt2-- } if !((bytes...阅读全文

博文 2020-04-04 14:32:50 淳属虚构