CockroachDB学习笔记——[译]为什么Go语言是CockroachDB的正确选择
- 原文链接:https://www.cockroachlabs.com/blog/why-go-was-the-right-choice-for-cockroachdb/
- 原作者:Jessica Edwards
- 原文日期:Nov 3, 2015
- 译:zifeiy

许多开发人员问我们的第一个问题是:
为什么我们以我们的经验要用Go————一门垃圾回收语言——来编写分布式数据库。
Java虚拟机的垃圾回收性能是众所周知的优秀,
所以我们用Go来编写CockroachDB不是冒着性能上面的风险吗?
事实上,当你在编写一个高性能,分布式(数据库)系统的时候,
只有少数语言可供选择:C++、Java和Go排在排行榜的最前面。
Java的已知性能问题使它变得不吸引人,
虽然我们中的许多人在其事业中都在使用C++,但是建立我们自己的库所需的努力进一步复杂了编写分布式数据库已经令人畏惧的任务。
尽管Go对于项目的每一个开发人员(包括创始人)来说都是一种全新的语言,但它对库、接口和工具的支持将其定位为CockroachDB的正确选择。
也许大多数人认为Go是一个很好的选择,
但是不会Go并没有成为项目的代码贡献者的障碍:
任何有Java或C++经验的人都能够快速掌握Go语言。
我们现在有67个项目的参与者,
CockroachDB已经从一个空的Github项目演变成了一个拥有125000行手写的Go代码,以及有少量的C++和.Proto文件的项目。
代码复杂度的管理不受语言选择的影响,在开源环境中尤为重要。
相对C++和Java来说,Go带来的生产效率的提高已经很难量化了。
Go语言通过它的简单性和正交性使得开发相同效果所需的代码量大大减少。
强制代码风格,简单的导入和自动导入管理,各种各样的linters,直截了当的(和最小的)编程语法集……
Go的所有这些属性对于干净、易懂的代码都很重要。
当与Java相比时,我们非常关注实现而不是面向对象和抽象:
可以在需要时添加接口,而不是作为初始的、通常不必要的步骤。
当与C++比较时,我们欣赏自动内存管理,以及很少有一种方法可以完成某些事情,
例如使用静态(static)和一次性初始化器(one-time initializers)。
我们已经很好地利用了同步通道,尽管我们注意到有一种艺术可以有效地使用它们。
当然,更有待观察的是,所有的这些Go代码将如何执行。
我们仍在构建CockroachDB的核心功能,所以大部分优秀的性能我们即将开发。
然而,以我们以往的经验,我们将一个大系统从Java移植到Go,这大大降低了系统的内存占用和垃圾收集开销。
当我们接近 beta版本 并更加关注性能的时候,我们将在后续的文章中分享我们的结果。
CockroachDB学习笔记——[译]为什么Go语言是CockroachDB的正确选择的更多相关文章
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- CockroachDB学习笔记——[译]如何优化Go语言中的垃圾回收
原文链接:https://www.cockroachlabs.com/blog/how-to-optimize-garbage-collection-in-go/ 原作者:Jessica Edward ...
- CockroachDB学习笔记——[译]CockroachDB是如何进行分布式原子事务的
原文:How CockroachDB Does Distributed, Atomic Transactions 原文链接:https://www.cockroachlabs.com/blog/how ...
- CockroachDB学习笔记——[译]Cgo的成本与复杂性
原文链接:https://www.cockroachlabs.com/blog/the-cost-and-complexity-of-cgo/ 原作者:Tobias Schottdorf 原文日期:D ...
- CockroachDB学习笔记——[译]在CockroachDB中如何让在线模式更改成为可能
原文链接:https://www.cockroachlabs.com/blog/how-online-schema-changes-are-possible-in-cockroachdb/ 原作者: ...
- CockroachDB学习笔记——[译]The New Stack:遇见CockroachDB,一个弹性SQL数据库
原文链接:https://www.cockroachlabs.com/blog/the-new-stack-meet-cockroachdb-the-resilient-sql-database/ 原 ...
- CockroachDB学习笔记——[译]Scaling Raft
原文链接:https://www.cockroachlabs.com/blog/scaling-raft/ 原作者:Ben Darnell 原文日期:Jun 11, 2015 译:zifeiy 在Co ...
- CockroachDB学习笔记——[译]Hello World
原文链接:https://www.cockroachlabs.com/blog/hello-world/ 原作者:Spencer Kimball 原文日期:Jun 4, 2015 译:zifeiy 数 ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
随机推荐
- 如何实现数组和 List 之间的转换?(未完成)
如何实现数组和 List 之间的转换?(未完成)
- ZZNUOJ-2157: 水滴来袭-【干扰阅读-卡模糊精度1e-8的问题】
ZZNUOJ-2157: 水滴来袭 那是一个冷雨霏霏的秋天的下午,当罗辑拿着枪威胁三体文明的时候,如果过了三十秒三体人还没有同他展开谈判,罗辑就会扣动扳机即刻结束自己的生命,随后他身上的核弹控制器就会 ...
- FastDFS-基本介绍
1. 什么是FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fas ...
- Java集合--整体框架
Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合 ...
- 一个ball例程带你进入 Halcon 世界
* 此例程来自halcon自带例程,请打开 halcon->ctrl+E 打开例程->搜索框中输入ball added by xiejl* ball.hdev: Inspection of ...
- airflow--调度研究
1.从调度到airflow ETL,是英文 Extract,Transform,Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端 ...
- python3.6中 字典类型和字符串类型互相转换的方法
mydic = {"俄罗斯": {"1":"圣彼得堡", "2":"叶卡捷琳堡", "3& ...
- Proxy详解
一.Proxy基础 1. 什么是Proxy? Proxy是一个构造函数,可以通过它生成一个Proxy实例. const proxy = new Proxy(target, handler); // t ...
- 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )
题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...
- 2Dot grammar
http://www.cnblogs.com/mjios/archive/2013/04/08/3006577.html . #import <Foundation/Foundation.h&g ...