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 ...
随机推荐
- Anton and Chess(模拟+思维)
http://codeforces.com/group/1EzrFFyOc0/contest/734/problem/D 题意:就是给你一个很大的棋盘,给你一个白棋的位置还有n个黑棋的位置,问你黑棋能 ...
- 多线程 multiprocessing 的几个小例子
1.Pipe import multiprocessing as multip,time from multiprocessing import Process,Pipe,Event,Conditio ...
- pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 今天是5.1号. 这一部分主要学习pandas中基于前面两种数据结构的基本操作 ...
- ASP.NET Core 2.0身份和角色管理入门
见 https://blog.csdn.net/mzl87/article/details/84892916 https://www.codeproject.com/Articles/1235077 ...
- 按下开机键,Linux做了什么?
作者:Vamei 来源:见文末 计算机开机是一个神秘的过程.我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面.然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面 ...
- date对象获取get
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 3、获取Class对象的三种方式
3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ...
- java获取windows和linux下本机ip通用方法
public InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketE ...
- 修改quartus 配置rom时memory很小的问题。
我用的是quartus ii 13版本的仿真软件,在做VGA实验时显示用到640*480的图片所以就需要307200*1bit的rom.但是坑爹的megawizard- plug-in-manager ...
- [shell]如何测试shell脚本,保证正确
如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即sh ...