Go 生态圈的 K/V 数据库 benchmark

Go生态圈有好几个K/V数据库,我们经常用它来做我们的存储引擎,但是这些数据库引擎的性能如何呢?本文试图用性能而不是功能的数据考察这些数据库,我测试了几种场景: 并发写、并发读、单一写并发读、并发删除,得出了一些有趣的数据。 测试在两台机器上测试的,一台机械硬盘,一台固态硬盘,使用256字节作为value值的大小,9个字节作为key的大小,测试简单的读写删除操作,并没有测试批量读写操作。 每个测试case测试1分钟。 代码: kvbench K/V 数据库 Rocksdb: RocksDB是Fa...阅读全文

一文解决内存屏障

内存屏障是硬件之上、操作系统或JVM之下,对并发作出的最后一层支持。再向下是是硬件提供的支持;向上是操作系统或JVM对内存屏障作出的各种封装。内存屏障是一种标准,各厂商可能采用不同的实现。 本文仅为了帮助理解JVM提供的并发机制。首先,从volatile的语义引出可见性与重排序问题;接下来,阐述问题的产生原理,了解为什么需要内存屏障;然后,浅谈内存屏障的标准、厂商对内存屏障的支持,并以volatile为例讨论内存屏障如何解决这些问题;最后,补充介绍JVM在内存屏障之上作出的几个封装。为了帮助理解...阅读全文

程序猿说你好 2017-12-28 00:00 程序猿说你好

并发研究之CPU缓存一致性协议(MESI) - 枫飘雪落

CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。 在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。 时间局部性...阅读全文

博客园 2018-05-03 16:27 博客园

GoLang内存模型

一、前言Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题(Java内存可见性问题可以参考拙作:Java并发编程之美一书)。。当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mutex(互斥锁)、RWMutex(读写锁)或者和sync/atomic中的原子操作。二、Happens...阅读全文

知乎 2019-03-03 00:00 知乎

死磕 java同步系列之JMM(Java Memory Model) - 极术社区

彤哥读源码 · 2019年10月06日 死磕 java同步系列之JMM(Java Memory Model) Java (手机横屏看源码更方便)简介Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果。硬件内存模型在正式讲解Java的内存模型之前,我们有必要先了解一下硬件层面的一些东西。在现代计算机的硬件体系中,CPU的运算速度是非常快的,远远高于它从存储介质读取数据的速度,这里的存储介质有很多,比...阅读全文

AIoT 开发者之家 2020-02-20 22:55 AIoT 开发者之家

如何把Go调用C的性能提升10倍? - LinkerLin的个人空间

目前,当Go需要和C/C++代码集成的时候,大家最先想到的肯定是CGO。毕竟是官方的解决方案,而且简单。 但是CGO是非常慢的。因为CGO其实一个桥接器,通过自动生成代码,CGO在保留了C/C++运行时的情况下,搭建了一个桥来沟通C/C++世界和Go的世界。这就意味着,兼容性很好,但是对C的函数的调用,必须先把当前的goroutine挂起,并切换执行栈到当前的线程M的主栈(大小2MB)。如果不做这个操作,那么只能在goroutine的栈上执行C函数调用,可是,goroutine的栈一般都很小,很...阅读全文

OSCHINA 2017-09-06 14:48 OSCHINA

LSM 算法的原理是什么?

其实大家提的 LSM 最开始论文里面都使用树做搜索结构的, 现在在用的都不是严格的树结构了。 如[这篇文章](https://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/)解释的一样,从最朴素的角度上来讲可以把`SSTable(sorted string table)`作为一个连续的kv构成的块。SSTable +-+---+----+---+ |k| v | k | v | ... +-+---+--...阅读全文

知乎 2017-03-31 00:00 知乎

LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看! - bonelee

lmdb创建完env对象,打开时,会做data file和lock file的mmap映射: env->me_lfd = open(lpath, O_RDWR|O_CREAT|MDB_CLOEXEC, mode); void *m = mmap(NULL, rsize, PROT_READ|PROT_WRITE, MAP_SHARED, env->me_lfd, 0); env->me_txns = m; env->me_fd = open(dpath, oflags, mode); env->...阅读全文

博客园 2017-05-24 17:57 博客园

根据拓扑图理解golang的sync.Map工作原理 - 星期八

fizz 153 根据拓扑图理解golang的sync.Map工作原理 golang sync map 源码 拓扑图 发布于 2019-11-08  约 4 分钟 sync.Map的拓扑关系图 读懂关系图需要了解的几个关键点 var expunged = unsafe.Pointer(new(interface{})) type Map struct type readOnly struct type entry struct func (m *Map) Load(key interface{}...阅读全文

SegmentFault 思否 2019-11-08 00:00 SegmentFault 思否 等

HTTP/2 学习笔记

Why HTTP/2HTTP/1.1 是文本协议对用户友好,但对计算机不友好 (parse 不高效)TCP 连接管理TCP 慢启动,因此尽可能的复用连接 (keep-alive)一个 TCP 连接上只能有一个 request/response,可以使用 pipeline 实现并发请求,但会有头部阻塞问题,现代浏览器默认不启用 pipeline,而是通过对一个域名同时建立多个连接 workaround头部 field 重复,造成资源浪费资源没有优先级HTTP/2 特性:HTTP/2 没有改变 HT...阅读全文

SSH原理与运用(二):远程操作与端口转发

接着前一次的文章,继续介绍SSH的用法。 ======================================= SSH原理与运用(二):远程操作与端口转发 作者:阮一峰 (Image credit: Tony Narlock) 七、远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。 上一节的操作,就是一个例子:   $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id...阅读全文

阮一峰的网络日志 2011-12-23 00:00 阮一峰的网络日志

ssh over socks5:通过socks5 proxy来连接ssh服务器

October 19, 2017 in Tech 最近因为不可描述的原因,我在aws soul的云主机访问不了,ssh、80、ss全部都被禁掉了。 80端口在chrome配置SwitchyOmega就可以了,但ssh不太好办,shell上配置http_proxy对ssh没什么用。 其实ssh自己就支持proxy。 注意这跟在ssh端口转发:远程和本地中介绍过使用ssh作为proxy的方法不同,ssh -D是为了用ssh做proxy,而不是通过proxy来连接ssh服务器。 TL;DR ssh -...阅读全文

ieevee.com 2020-02-15 20:19 ieevee.com

操作系统管理内存的机制——为什么要设置虚拟内存? - wj_hubei

在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。 一 早期的内存分配机制         在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存的呢?下面通过实例来说明当时的内存分配方法:       某...阅读全文

为什么 MongoDB 使用 B 树?

为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。我们在这一系列前面的文章曾经分析过 为什么 MySQL 使用 B+ 树,有读者在文章下面留言,希望能出一个为什么 MongoDB 使用 B 树的对比文章,这是一个比较好的问题,MySQL 和 MongoDB 两种不同类型的数据库使用了相似却不同的数据结构...阅读全文

mp.weixin.qq.com 2019-01-01 00:00 mp.weixin.qq.co 等

CORNERSTONE问卷调查功能在疫情健康上报需求下的应用方案

严峻的疫情当前,企业复工在即,及时了解、跟踪和统计员工的健康状况,对于企业正常经营来说是至关重要的,如何准确、高效的完成信息收集工作是HR面临的巨大挑战。 [CORNERSTONE](https://www.cornerstone365.cn/)团队根据客户需求加速功能升级,全力免费支持疫情信息收集统计工作,紧急上线了“问卷调查功能”,急客户之所急,想客户之所想,需客户之所需。通过工作台首页“问卷调查”的功能就可以很好的帮助到大家及时掌握相关数据情况,第一时间防止病毒的蔓延。 ...阅读全文

java技术圈 2020-02-14 14:20:01 CORNERSTONE

「疫情」之下,2020或为中国远程办公“元年”

2020年注定是不平凡的一年,突出其来的新型肺炎疫情牵动着所有人的心,除了关注疫情、做好防控之外,还有一个值得关注的问题,节后怎么上班?如何能保持高效的工作状态,如何确保沟通无障碍? 为了遏制疫情蔓延,做好防控工作,在1月26日发出了通知,延长2020年春节假期至2月2日,多地政府也发出延时开工通知,鼓励企业人员在家办公。特殊时期,远程办公便成了个人和企业当下的必要之选。很多缺乏线上办公经验的企业,开始咨询各种远程办公的产品和服务。据悉,1月25日,华为云旗下的WeLink宣布免费...阅读全文

java技术圈 2020-02-12 14:15:20 CORNERSTONE

基于CORNERSTONE的销售管理之道

由于所销售的产品性质、所具有的销售规模、所形成的销售团队组织形式等各不相同,不同的公司对销售管理信息系统有着不同的需求。 一般常见的公司销售结构为:销售总监-销售经理-销售主管-销售业务员。事实表明,在销售队伍规模较小的情况下,依靠传统的管理模式,销售系统可以维持正常运转。而一旦业务发展,销售地域扩大,销售队伍增大,销售经理们就会发现越来越难以控制、掌握整个销售流程。困难来自于需要管理和控制的各种销售信息的爆炸式增长。 而[CORNERSTONE](https://w...阅读全文

java技术圈 2020-02-11 13:43:22 CORNERSTONE

Flink Slot详解与Job Execution Graph优化 - 个人文章

TalkingData 440 Flink Slot详解与Job Execution Graph优化 flink  阅读约 18 分钟 前言 近期将Flink Job从Standalone迁移至了OnYarn,随后发现Job性能较之前有所降低:迁移前有8.3W+/S的数据消费速度,迁移到Yarn后分配同样的资源但消费速度降为7.8W+/S,且较之前的消费速度有轻微的抖动。经过原因分析和测试验证,最终采用了在保持分配给Job的资源不变的情况下将总Container数量减半、每个Container持...阅读全文

SegmentFault 思否 2019-08-06 00:00 SegmentFault 思否 等

项目管理软件的应用现状与发展趋势

企业信息化是企业高效运行的基础。如何达到高效的目的跟管理软件的选型分不开。管理软件以企业管理需求为基础,以IT技术为支撑,为企业提供数据信息的综合管理办法。 随着项目管理思想逐步被接受,市面上涌现出越来越多的管理软件出现在公众的面前,如雨后春笋般层出不穷,一时间“管理软件”名声大噪。市场反响较好的有[CORNERSTONE](https://www.cornerstone365.cn/),一款软件聚合多种功能 , 全流程帮助各大企业管理整个项目生命周期。 ![aeef399ffa80...阅读全文

java技术圈 2020-01-15 15:32:20 CORNERSTONE