许多开发人员问我们的第一个问题是:
为什么我们以我们的经验要用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的正确选择的更多相关文章

  1. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  2. CockroachDB学习笔记——[译]如何优化Go语言中的垃圾回收

    原文链接:https://www.cockroachlabs.com/blog/how-to-optimize-garbage-collection-in-go/ 原作者:Jessica Edward ...

  3. CockroachDB学习笔记——[译]CockroachDB是如何进行分布式原子事务的

    原文:How CockroachDB Does Distributed, Atomic Transactions 原文链接:https://www.cockroachlabs.com/blog/how ...

  4. CockroachDB学习笔记——[译]Cgo的成本与复杂性

    原文链接:https://www.cockroachlabs.com/blog/the-cost-and-complexity-of-cgo/ 原作者:Tobias Schottdorf 原文日期:D ...

  5. CockroachDB学习笔记——[译]在CockroachDB中如何让在线模式更改成为可能

    原文链接:https://www.cockroachlabs.com/blog/how-online-schema-changes-are-possible-in-cockroachdb/ 原作者: ...

  6. CockroachDB学习笔记——[译]The New Stack:遇见CockroachDB,一个弹性SQL数据库

    原文链接:https://www.cockroachlabs.com/blog/the-new-stack-meet-cockroachdb-the-resilient-sql-database/ 原 ...

  7. CockroachDB学习笔记——[译]Scaling Raft

    原文链接:https://www.cockroachlabs.com/blog/scaling-raft/ 原作者:Ben Darnell 原文日期:Jun 11, 2015 译:zifeiy 在Co ...

  8. CockroachDB学习笔记——[译]Hello World

    原文链接:https://www.cockroachlabs.com/blog/hello-world/ 原作者:Spencer Kimball 原文日期:Jun 4, 2015 译:zifeiy 数 ...

  9. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile

    golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...

随机推荐

  1. Selenium(十)测试用例错误处理、日志接口、多用户测试

    1.一般的错误类型 2.查看错误提示,是一个div,以id为例找到该元素 3.修改测试用例 def checkResult(driver,err_id): try: err = driver.find ...

  2. JavaScript中数组的排序——sort()

    数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. arrayObject.sort(方法函数) 1.如果不指定<方法函数>,则按unicode码顺序排列. 2.如果 ...

  3. linux实操_shell系统函数

    basename函数: 功能:返回完整路径最后/的后面部分,常用于获取文件名. 基本语法: basename 路径 后缀 不加后缀:运行后 加后缀:运行后 dirname函数: 功能:返回完整路径最后 ...

  4. Checklist的补充规则

    常见问题: 1.什么时候该补充Checklist? 2.Checklist应该写哪些用例? 3.自己写的模块是否自己执行? 4.什么时候执行Checklist? 5.执行完Checklist大概需要花 ...

  5. Python+request 登录接口reponse的返回值token跨py文件的传递《二》

    主要使用场景: 一般我们在进行接口测试时,依赖登录接口后reponse中的某些返回值,因此需要将login接口单独写一个py文件,另外的py文件均可调用login的reponse返回值使用.共用登录接 ...

  6. 基于 Go 的可嵌入脚本语言 zygomys

    zygomys zygomys 是一种可嵌入的脚本语言. 它是一个具有面向对象风格的现代化 Lisp,提供了一个解释器和 REPL(Read-Eval-Print-Loop:也就是说,它带有一个命令行 ...

  7. [2019HDU多校第一场][HDU 6580][C. Milk]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6580 题目大意:\(n\times m\)大小的方格上有\(k\)瓶水,喝完每瓶水都需要一定的时间.初 ...

  8. sql 查询 between and 和 >= <= 比较

    好久没有更新博客了,积累了很多问题没有得到解决,自己也在纠结有些东西需不需要花时间研究一下,认真想了想,不管怎么样,不能停止更新博客,继续保持一周至少一篇的习惯,不能放弃. 今天说的问题比较简单,就是 ...

  9. min-width

    min-width 语法: min-width:<length> | <percentage> 默认值:0 适用于:除非置换内联元素,table-row, table-row- ...

  10. jquery的tap会执行2次的替换办法

    用touchend替换 $(".videoCall").on("touchend",function(){ })$(".videoCall" ...