美文网首页我爱编程
gobox中的shardmap

gobox中的shardmap

作者: ligang1109 | 来源:发表于2018-05-25 15:33 被阅读51次

今天来说下gobox中的shardmap。

golang中的map使用简单,但并发写入时,如果不加锁,会导致panic,所以性能很差。

shardmap就是为了解决这个问题,其核心思想就是通过创建多个map,把key做hash分配到这多个map上,从而减少锁粒度以提高性能。

用法示例

package main

import (
    "github.com/goinbox/shardmap"
    "github.com/goinbox/crypto"

    "fmt"
    "strconv"
)

func main() {
    shardMap := shardmap.New(32)

    hasError:=false
    for i := 0; i < 10000; i++ {
        key := crypto.Md5String([]byte(strconv.Itoa(i)))
        shardMap.Set(key, i)

        v, ok := shardMap.Get(key)
        if !ok || v != i {
            hasError = true
            fmt.Println(v, ok)
        }
    }

    if !hasError {
        fmt.Println("shardmap set get ok")
    }

    shardMap.Walk(func(k string, v interface{}) {
        shardMap.Del(k)

        _, ok := shardMap.Get(k)
        if ok {
            fmt.Println(v, ok)
        }
    })
}

输出效果示例

shardmap set get ok

性能对比

我这里还做了和golang的原生map及sync包中提供的sync.Map的写性能对比:

  • 原生map
BenchmarkSimpleMapWrite-4         300000          5935 ns/op
  • sync.Map
BenchmarkSyncMapWrite-4       200000          6831 ns/op
  • ShardMap
BenchmarkShardMapWrite-4      300000          3815 ns/op

欢迎大家使用,使用中有遇到问题随时反馈,我们会尽快响应,谢谢!

相关文章

  • gobox中的shardmap

    今天来说下gobox中的shardmap。 golang中的map使用简单,但并发写入时,如果不加锁,会导致pan...

  • gobox中的httpclient

    今天来说下使用gobox中httpclient,这个包就相当于命令行的curl工具,用于发起http请求。 重要的...

  • gobox中的分页操作

    今天来说下使用gobox中的分页操作 说明 分页也是我们开发时的一个常见需求,gobox中提供了page包做这个事...

  • gobox中的simplecache和levelcache

    今天来说下gobox中的simplecache和levelcache simplecache simplecach...

  • gobox中的log操作

    今天来说下使用gobox中的log操作 log级别定义 重要的interface IWriter 定义消息写入到哪...

  • gobox中redis操作

    今天来说下使用gobox中redis操作相关 说明 本包的driver部分使用了redigo:https://gi...

  • gobox中mysql操作

    今天来说下使用gobox中mysql操作相关 说明 本包的driver部分使用了go-sql-driver:htt...

  • gobox中的consumer处理框架

    我们都会有从异步队列中消费的需求,今天来说下gobox中的consumer处理框架 consumer处理架构图 重...

  • gobox中的color和crypto

    今天来说下gobox中的color和crypto两个box。 color color的主要作用是为在终端中输出的信...

  • gobox中的编解码和执行shell命令

    今天来说下gobox中的encoding和shell两个box。 encoding encoding的主要作用是完...

网友评论

    本文标题:gobox中的shardmap

    本文链接:https://www.haomeiwen.com/subject/wocujftx.html