Redis 如何以一己之力颠覆数据库市场?

Stella981
• 阅读 369

Redis 如何以一己之力颠覆数据库市场?

本文由 Redis 业界权威专家黄健宏翻译自 thenewstack.io/open-source-builders-how-redis-upended-the-database-market/ ,首发于 blog.huangz.me 。

按理来说,如果 Salvatore Sanfilippo 打算在数据库领域闯荡一番,那么他至少应该具备相应的资质,比如先在 Oracle 或者 SQL Server 上耕耘个十年八年,然后再辞职去追梦——但事实并非如此。Sanfilippo 说当初他在 2009 年开始创作 Redis 的时候,自己还只是一个数据库的业余爱好者,并且也是第一次进入数据库领域。 实际上,正因为他在数据库方面缺少经验,所以才导致他打破了各种被认为是正确无比的数据库工程“铁则”。

但实际上这种离经叛道并不是一件坏事。

现如今,Redis 已经成为了世界上最受欢迎的数据库之一,而我们正享受着 Sanfilippo 打破规则带来的好处。虽然那些依赖 Redis 的产品和服务很多都没有贴上“Redis inside”的贴纸,但我们很有可能每天都在使用 Redis ,毕竟 Uber 、Instacart 、 Slack 、 Hulu 、 Twitter 、 Instagram 以及很多公司都在使用 Redis 。不过 Sanfilippo 并没有打算告诉我们该如何使用 Redis ,“Redis 应该用在什么地方我说了不算——应用的开发者在这方面更有发言权”,他说。

为了弄清楚 Redis 出现的原因以及它的发展历程,我们采访了开源项目 Redis 的创始人 Salvatore Sanfilippo 。

无需 DBA 专长

在创作 Redis 之前,Sanfilippo 在安全领域等方面已经小有名气。在安全领域,他创建了网络安全工具 hping 以及名为 Idle Scan 的端口扫描技术。此外,他还创建了名为 Visitors 的网络日志分析器,Jim 解释器(一个小型的 Tcl 编程语言实现),还有几种硬件驱动。换句话说,他并没有闲着,而是一直都有所作为。

这些忙碌主要和他努力扩大自己的创业公司规模有关,特别是其中一个名为 lloogg.com 的实时分析服务。Sanfilippo 挣扎着想要让 lloogg.com 运行在 MySQL 这一关系数据库上,但尝试之后却发现,为 1 万名用户提供服务所需的硬件开销要比提供服务带来的收入高得多。他觉得把工作负载(workload)储存在内存里面似乎是一个不错的想法,并且更关键的是,这些负载——将数据推入至列表然后再将列表裁剪为固定长度——无法简单地使用关系数据库来实现。于是他就开始着手构建 Redis 。

Sanfilippo 在创建 Redis 并没有拼凑不同数据库的特性,而是对底层的数据模型做了不同的思考。 最终,他构建出了一个内存 NoSQL 数据库,它既可以储存数据又可以用作缓存,并且在这个过程中打破了各种数据库的“铁则”。

实际上,Sanfilippo 的做法遭到了数据库知识分子的一致批评。刚开始,他们指责 Redis 将数据放在内存里面的做法。之后又批评 Redis 使用 fork 系统调用来实现数据库持久化,并认为 Lua 脚本应该使用名字而不是脚本体的 SHA1 校验和来进行调用。

这些批评者也许对传统数据库的构建方法了然于胸,但他们却对如何构建未来数据库一窍不通。

如何结识朋友并影响他人

Sanfilippo 说尽管数据库专家对他的工作有诸多抱怨,但他仍然还是能够自由地创建一种新型的数据库。考虑到开源一直以来都是他生活中的重要部分,他选择在开放的环境中进行创新也是理所当然的。“我相信分享的力量”,他说。根据 Sanfilippo 的说法,自从在 18 岁时安装了 Slackware 1.2.3 ,并且意识到它包含了 C 语言编译器在内的诸多东西之后,他的职业生涯就开始了。“实际上,我的软件开发生涯就是伴随着开源开始的,所以对我来说开源就是一种自然而然的方式。”他说。

但对 Sanfilippo 来说,开源并不是仅仅和授权有关。

“我相信软件开发是一种人类活动,并且需要有人来讲述故事”,Sanfilippo 说,“所以我到了不同的地方去讲 Redis 的故事”。逐渐地,人们开始聆听并拥抱 Redis ,刚开始是在初创企业社区,后来是在成熟的企业里面。

Sanfilippo 指出,刚开始的时候,比起所谓的数据库专家的帮助,他更看重自己的自由,但随着时间的推移,围绕 Redis 已经出现了一个社区。Sanfilippo 说,10 年之后,“Redis 的内核必定将是多人合作的产物”。

但这并不意味着 Sanfilippo 已经把自己的手从方向盘上拿开了:他承认自己很不擅长委派工作,以至于直到今天他还是自己一个人编写所有的 Redis 文档。

虽然 Sanfilippo 欢迎人们对 Redis 做出贡献,但他也承认社区的意见有好也有坏。 例如,有些人可能会想要用 Redis 去解决一些 Sanfilippo 并没有打算解决的问题。另外,还有一个事实,那就是构建系统软件并不是一件简单的事情。“在大多数时候,你只能从那些拿着薪水编写这种软件的人那里得到严肃的贡献”,他说,当然有时候也会有例外。他承认,向 Redis 这样一个严肃的数据库系统做贡献并不是一件可以在周日早上进行的休闲活动。

个人选择

在过去的十多年,Sanfilippo 常常会感受到压力,担心 Redis 是否会成功,钱是否够用等问题。 但幸运的是,随着 Redis 的成功,这些问题都已经不再是问题了。今天,Sanfilippo 很幸运,他能够作为 Redis Labs 的员工,全身心地投入到 Redis 的开发中。

不过你可别指望他能够告诉你该如何使用 Redis 。

“我对于如何使用 Redis 没有太多发言权,应用开发者比我知道得更清楚”,他说,并解释道:每个应用都有自己的目标,必须提供的保证,以及延迟和可扩展性考虑。Sanfilippo 说,他唯一希望的就是 Redis 可以用于解决问题:无论是作为主数据库,还是其他数据库的索引,又或者是智能缓存、消息队列,等等。

Sanfilippo 说,他没有硬性地规划 Redis 的未来,而是提供了一套组件,使得人们可以创造性地组装它们。 Redis 也很容易修改,“开发者只要进行少量改动,就能够让 Redis 完成一些预想之外的事情。” Sanfilippo 说,这种做法是可行的。

Sanfilippo 并没有把自己看作是某种权威的领导者。“我更喜欢设计新的东西,并通过编码将它们变为现实”,他说,如果人们也喜欢我创造的东西,那当然最好不过了。对于 Redis 来说,“开发者想成为国王还是王后——都取决于他们自身。”Sanfilippo 总结道。


长按识别下图二维码,关注公众号「Doocs开源社区」,第一时间跟你们分享好玩、实用的技术文章与业内最新资讯。

Redis 如何以一己之力颠覆数据库市场?

本文分享自微信公众号 - Doocs开源社区(idoocs)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这