许多开发人员问我们的第一个问题是:
为什么我们以我们的经验要用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. Ubuntu系统---C++之Eclipse编译器 CDT插件安装

                                                                                         Ubuntu系统---Ecli ...

  2. Reverse数组以及大O表达式

    这篇主要是对数组实现一个倒排序(比如数组1.2.3,最后输出3.2.1),当然实现这个功能是非常easy的事,但是这里需要引入另外一个很重要的概念-----如何计算一个算法的时间复杂度并学会用大O表达 ...

  3. python_tkinter弹出对话框1

    tkinter提供了三个模块,可以创建弹出对话窗口:(使用必须单独导入模块) 1.messagebox 消息对话框 示例:askokcancel import tkinter # 导入消息对话框子模块 ...

  4. 一个有趣的 SQL 查询

    来源:站长资讯 一个朋友有这样一个SQL查询需求: 有一个登录表(tmp_test),包含用户ID(uid)和登录时间(login_time).表结构如下: ********************* ...

  5. Girls and Boys POJ - 1466 【(二分图最大独立集)】

    Problem DescriptionIn the second year of the university somebody started a study on the romantic rel ...

  6. Codeforces Round #587 (Div. 3) C题 【判断两个矩形是否完全覆盖一个矩形问题】 {补题 [差点上分系列]}

    C. White Sheet There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle ...

  7. mouseout([[data],fn])

    mouseout([[data],fn]) 概述 当鼠标指针从元素上移开时,发生 mouseout 事件. 该事件大多数时候会与 mouseover 事件一起使用.深圳dd马达 注释:与 mousel ...

  8. php MySQL 查询数据

    以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT ...

  9. 让JPA的Query查询接口返回Map对象

    在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,query.getResultList() ...

  10. leetcode解题报告(5):Longest Consecutive Sequence

    描述 Given an unsorted array of integers, find the length of the longest consecutive elements sequence ...