0

0

Go rqlite作者告诉你:开发数据库软件,算法多重要!

藏色散人

藏色散人

发布时间:2022-01-22 09:19:49

|

5286人浏览过

|

来源于learnku

转载

本文由golang教程栏目给大家介绍关于《go rqlite作者告诉你:开发数据库软件,算法多重要!》,希望对需要的朋友有所帮助!

编写数据库程序是一项迷人的工作。在过去的两年里,我一直深度参与开源数据库的开发,而数据库编程可能是作为一个软件开发者所能完成的最有启发性的项目了。

然而,真正令人震惊的是, 在过去的 6 年里,我对数据库的态度发生了很大的变化。 从一开始不感兴趣的状态,到现在我开始认为数据库系统是软件工程的一个巅峰。

不知道什么是更好的

在我的职业生涯的大部分时间里, 我对数据库的唯一经验就是阅读有关它们的资料。 通常是在想当枯燥的背景下 — 打开任何一本有关数据库的本科教科书,就能明白我的意思。 通常你会看到如下表格,作为关系型数据库的典型用例:

ID FIRST LAST TITLE DEPARTMENT
1 Robert Kelly Director Marketing
2 Tom Burke Representative Sales
3 John Smith Vice President Sales

你能再多读些无聊的东西吗?如果这些都是关于数据库的,我不想和它们有任何关系。重点是什么?软件比这酷多了,对吧?所以我在很长一段时间里完全避免了与数据库有关的任何事情

您永远不会忘记您的第一次CRUD应用

2009年,经过多年的写作 嵌入式软件, Linux 设备驱动程序, 和 网络软件, 我发现自己领导的团队需要构建一个基于web的系统。你看,这个 AWS 云计算已经到来,基于云计算的许可技术 MAC 地址 不再有效。我的团队必须建立一个 许可门户 用于我们新的基于EC2的软件设备。因为我们在这方面有很多经验 Python, 我们选择了 Django, 运行在 MySQL. 发生了一些新的事情。实际上,我是从数据库开始工作的。

随着我国平原地区的发展CRUD应用程序继续运行,我开始意识到数据库是多么重要——它对我们的系统是多么重要。如果我们丢失了数据库,我们的软件开发就白费了。如果数据库损坏了数据,我们客户的设备可能会未经许可,他们的网络将停止运行。如果数据库不能正常运行,成千上万的人将同时受到影响。但这些事情都没有发生过。数据库始终工作。它从不让我们失望。我印象深刻。
后来我发现了外键约束,唯一约束,引用完整性,索引,(记住,在这个时候我什么都不知道关于这些事情)-数据库可以通过各种方式帮助我构建一个更健壮的系统。我终于意识到现代数据库是惊人的-数据库是世界上最无聊的东西直到你真的必须用它们来构建一个系统

你也永远不会忘记你的第一个搜索系统

到2012年,我领导了一个团队,建立了一个大型索引和搜索系统基础上的大型键值数据库,带有弹性搜索在其核心。看看elasticsearch这样的系统能做什么 —— 一个建立在世界级索引这项技术——即使其下有TB级的日志数据,也让人大开眼界。
到现在为止,我甚至看到数据库和搜索系统也失败了,但我被数据库技术迷住了。到2014年,我加入了一个小型专门团队,开发[开源时间序列数据库]的核心(github.com/influxdata/influxdb).

我学到的

算法真的很重要

只有在数据库开发中才有大O分析真的活过来了。数据库是程序员仍然需要循环、排序和过滤数百万对象的少数应用程序之一。这是少数几个在CS课上学到的很多枯燥材料都很重要的地方之一。

其他许多软件开发都不是这样。写入启动ROM固件?不,算法对我来说从来都不重要。调谐器设备驱动程序? 不,没关系。网络设备管理软件? CRUD应用程序?几乎不所有这些学科都需要不同的技能和知识。大多数时候,我只是在面试中讨论了运行时的复杂性。
但随着数据库的发展,这一切都发生了变化。实际上看到一个系统返回正确的结果,但是由于算法的改变,只在以前的一小部分时间内,看到它发生在您的代码中,在您构建的系统中,这是一件美妙的事情。

表现也很重要

软件中有一个老故事是这样的:程序员编写的一些代码的运行速度比以前的版本快十倍。他展示了它,但有人指出,它产生的数据与正确的数据略有不同。“但是速度快了十倍。”程序员指出。“好吧,如果它不需要是正确的,我可以制作一个完全不占用空间、运行速度无限快的版本”,另一个回答说。
这个道德故事一直对我影响很大。正确总是比什么都重要。这是真的。但这也让我相信,项目之所以有价值,仅仅是因为它们产生了正确的结果。

PNG Maker
PNG Maker

利用 PNG Maker AI 将文本转换为 PNG 图像。

下载

对于数据库,情况并非如此。
性能不仅仅是一项功能。这是一个要求。那些愿意为数据库掏钱的人经常这样做,因为他们拥有大量的数据。如果数据库在这种情况下不能很好地执行—如果它不能快速有效地返回结果—那么它可能根本不工作。

你认为写系统很复杂吗?

我认为开发数据库最让我震惊的是查询引擎变得如此复杂。我有很多构建系统的经验,可以将数据写入并存储到磁盘。使这些系统运行良好可能是一项重大挑战。
但这种复杂性通常比查询引擎的复杂性要小得多。一个灵活的查询系统——有效地构建一个系统来回答问题,当你不知道问题会是什么的时候——需要认真的设计思想。查询计划器必须有效。查询系统必须支持许多正交需求——按某些维度过滤,按其他维度分组,连接来自不同表的数据——有时还支持来自外部源的数据。最后,查询系统必须高效且性能良好。这导致了设计和实现中抽象和优化之间的紧张关系,这需要真正的技巧才能很好地管理。

在现实世界中,它必须被操作

任何重要的数据库都必须支持备份、恢复、碎片管理和监视等基本操作。
如果我,作为一个严肃的操作员,不能备份你的数据库,我不能使用它,就这么简单。数据库接受写操作的速度有多快并不重要。在查询过程中,它的内存占用有多小并不重要。如果我不能保护数据库中的数据不受数据库创建者您无法控制的故障的影响,我将永远无法舒适地运行它。
当然,有很多方法可以备份数据库,而不需要数据库的合作。但内置方法通常是最好的。这也是我向 rqlite v2.0.如果我想让任何人认真地使用rqlite,我必须解决现实世界中的问题,即系统可能完全失败,并将数据拖得很长时间。

因此,在设计和实现数据库时,从一开始就要构建操作支持。将其作为设计的基本部分。您的用户将为此感谢您。

答案通常是“视情况而定”

当您第一次开始使用数据库时,尤其是作为一名操作员,您经常会问这样的问题:系统可以以什么速率索引?它对查询的响应速度有多快?我需要多少磁盘空间?一块碎片能有多大,而且还能正常工作?我怎样才能加快速度?所有人都毫无保留地问。我过去常常自己做。
也许你可以和数据库程序员谈谈,问他们这些问题。而你经常——也许永远——得到的回答是:这取决于你。你必须基准,你必须衡量。听到这个消息可能会很恼火,而且可能看起来像是在逃避责任。

但事实并非如此。
现在,当我听到这样的问题时,我会微笑。太天真了。
索引率可能取决于数据的大小,而不仅仅是文档或数据点的数量。这可能取决于批处理、数据的基数、数据库是否群集、数据中的哪些列和字段被索引、是新数据还是对现有数据的更新、运行数据库的机器、RAM、IO性能以及使用的复制。
控制性能的变量永远不会结束。
对于查询,可能取决于时间序列数据的时间范围。它取决于命中的记录数、查询的字段数、是否涉及范围扫描、数据是否索引、使用的索引类型、可能访问的碎片数、数据是否为本地数据。以及机器的特点。它有货吗?它正在进行维护吗?网络忙吗?

所以答案总是, 视情况而定。 数据库设计者是诚实的。 他们可以知道他们建立的系统的一切, 但仍然不知道您的问题的答案。

编程遗愿清单

如果给那些希望提高编程能力的开发人员一条建议的话,那就是加入数据库开发团队。因为数据库开发,我的编程技能大大提高了——这是一次美妙的编码体验。

原文地址:https://www.philipotoole.com/what-i-learned-from-programming-a-database/

译文地址:https://learnku.com/go/t/64605

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

178

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

35

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

79

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

2

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

4

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

8

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

24

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

122

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

72

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4.3万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号