目錄
不知道什麼是更好的
您永遠不會忘記您的第一次CRUD應用
你也永遠不會忘記你的第一個搜尋系統
我學到的
演算法真的很重要
表現也很重要
你認為寫系統很複雜嗎?
在現實世界中,它必須被操作
答案通常是「視情況而定」
程式設計遺願清單
首頁 後端開發 Golang Go rqlite作者告訴你:開發資料庫軟體,演算法多重要!

Go rqlite作者告訴你:開發資料庫軟體,演算法多重要!

Jan 22, 2022 am 09:19 AM
go golang

本文由golang教學專欄跟大家介紹關於《Go rqlite作者告訴你:開發資料庫軟體,演算法多重要! 》,希望對需要的朋友有幫助!

撰寫資料庫程式中迷人的作品。在過去的兩年裡,我一直深入參與開源資料庫的開發,而資料庫程式設計可能是作為一個軟體開發者所能完成的最具啟發性的專案了。

然而,真正令人震驚的是, 在過去的 6 年裡,我對資料庫的態度發生了很大的變化。從一開始不感興趣的狀態,到現在我開始認為資料庫系統是軟體工程的巔峰。

不知道什麼是更好的

在我的職業生涯的大部分時間裡, 我對資料庫的唯一經驗就是閱讀有關它們的資料。通常是在想當枯燥的背景下 — 打開任何一本有關資料庫的本科教科書,就能明白我的意思。通常你會看到如下表格,作為關係型資料庫的典型使用案例:

##LASTTITLEDEPARTMENT#1Robert23

你能再多讀些無聊的東西嗎?如果這些都是關於資料庫的,我不想和它們有任何關係。重點是什麼?軟體比這酷多了,對吧?所以我在很長一段時間裡完全避免了與資料庫有關的任何事情

您永遠不會忘記您的第一次CRUD應用

2009年,經過多年的寫作 嵌入式軟體, Linux 設備驅動程式, 和 網路軟體, 我發現自己領導的團隊需要建立一個基於web的系統。你看,這個 AWS 雲端運算已經到來,基於雲端運算的授權技術 MAC 位址 不再有效。我的團隊必須建立一個 許可入口網站 用於我們新的基於EC2的軟體設備。因為我們在這方面有很多經驗 Python, 我們選擇了 Django, 運行在 MySQL. 發生了一些新的事情。實際上,我是從資料庫開始工作的。

隨著我國平原地區的發展CRUD應用程式繼續運行,我開始意識到資料庫是多麼重要——它對我們的系統是多麼重要。如果我們遺失了資料庫,我們的軟體開發就白費了。如果資料庫損壞了數據,我們客戶的設備可能會未經許可,他們的網路將停止運作。如果資料庫不能正常運行,成千上萬的人將同時受到影響。但這些事情都沒有發生過。資料庫始終工作。它從不讓我們失望。我印象深刻。
後來我發現了外鍵約束,唯一約束,引用完整性,索引,(記住,在這個時候我什麼都不知道關於這些事情)-數據庫可以通過各種方式幫助我構建一個更健壯的系統。我終於意識到現代資料庫是驚人的-資料庫是世界上最無聊的東西直到你真的必須用它們來建立一個系統

你也永遠不會忘記你的第一個搜尋系統

到2012年,我領導了一個團隊,建立了一個大型索引和搜尋系統基礎上的大型鍵值資料庫,帶有彈性搜尋在其核心。看看elasticsearch這樣的系統能做什麼 —— 一個建立在世界級索引這項技術——即使其下有TB級的日誌數據,也讓人大開眼界。
到目前為止,我甚至看到資料庫和搜尋系統也失敗了,但我被資料庫技術迷住了。到2014年,我加入了一個小型專門團隊,開發[開源時間序列資料庫]的核心(github.com/influxdata/influxdb).

我學到的

演算法真的很重要

只有在資料庫開發中才有大O分析真的活過來了。資料庫是程式設計師仍然需要循環、排序和過濾數百萬物件的少數應用程式之一。這是少數幾個在CS課上學到的很多枯燥材料都很重要的地方之一。

其他許多軟體開發都不是這樣。寫入啟動ROM韌體?不,演算法對我來說從來都不重要。調諧器設備驅動程式? 不,沒關係。網路設備管理軟體? CRUD應用程式?幾乎不所有這些學科都需要不同的技能和知識。大多數時候,我只是在面試中討論了運行時的複雜性。
但隨著資料庫的發展,這一切都改變了。實際上看到一個系統返回正確的結果,但是由於演算法的改變,只在以前的一小部分時間內,看到它發生在您的程式碼中,在您構建的系統中,這是一件美妙的事情。

表現也很重要

軟體中有一個老故事是這樣的:程式設計師所寫的一些程式碼的運行速度比以前的版本快十倍。他展示了它,但有人指出,它產生的數據與正確的數據略有不同。 「但是速度快了十倍。」程式設計師指出。 “好吧,如果它不需要是正確的,我可以製作一個完全不佔用空間、運行速度無限快的版本”,另一個回答說。
這個道德故事一直對我影響很大。正確總是比什麼都重要。這是真的。但這也讓我相信,專案之所以有價值,只是因為它們產生了正確的結果。

對於資料庫,情況並非如此。
效能不僅僅是一項功能。這是一個要求。那些願意為資料庫掏錢的人經常這樣做,因為他們擁有大量的數據。如果資料庫在這種情況下不能很好地執行—如果它不能快速有效地傳回結果—那麼它可能根本不工作。

你認為寫系統很複雜嗎?

我認為開發資料庫最讓我震驚的是查詢引擎變得如此複雜。我有很多建置系統的經驗,可以將資料寫入並儲存到磁碟。使這些系統運作良好可能是一項重大挑戰。
但這種複雜性通常比查詢引擎的複雜性小得多。一個靈活的查詢系統——有效地建立一個系統來回答問題,當你不知道問題會是什麼的時候——需要認真的設計想法。查詢計劃器必須有效。查詢系統必須支援許多正交需求——按某些維度過濾,按其他維度分組,連接來自不同表的資料——有時還支援來自外部來源的資料。最後,查詢系統必須有效率且效能良好。這導致了設計和實現中抽象和優化之間的緊張關係,這需要真正的技巧才能很好地管理。

在現實世界中,它必須被操作

任何重要的資料庫都必須支援備份、復原、碎片管理和監視等基本操作。
如果我,作為一個嚴肅的操作員,不能備份你的資料庫,我不能使用它,就這麼簡單。資料庫接受寫入操作的速度有多快並不重要。在查詢過程中,它的記憶體佔用有多小並不重要。如果我無法保護資料庫中的資料不受資料庫建立者您無法控制的故障的影響,我將永遠無法舒適地運行它。
當然,有很多方法可以備份資料庫,而不需要資料庫的合作。但內建方法通常是最好的。這也是我向 rqlite v2.0.如果我想讓任何人認真地使用rqlite,我必須解決現實世界中的問題,即係統可能完全失敗,並將數據拖得很長時間。

因此,在設計和實作資料庫時,從一開始就要建立操作支援。將其作為設計的基本部分。您的用戶將為此感謝您。

答案通常是「視情況而定」

當您第一次開始使用資料庫時,尤其是作為一名操作員,您經常會問這樣的問題:系統可以以什麼速率索引?它對查詢的回應速度有多快?我需要多少磁碟空間?一塊碎片能有多大,而且還能正常運作?我怎樣才能加快速度?所有人都毫無保留地問。我過去常常自己做。
也許你可以和資料庫程式設計師談談,問他們這些問題。而你經常——也許永遠——得到的答案是:這取決於你。你必須基準,你必須衡量。聽到這個消息可能會很惱火,而且可能看起來像是在逃避責任。

但事實並非如此。
現在,當我聽到這樣的問題時,我會微笑。太天真了。
索引率可能取決於資料的大小,而不僅僅是文件或資料點的數量。這可能取決於批次、資料的基數、資料庫是否群集、資料中的哪些欄位和欄位被​​索引、是新資料或對現有資料的更新、運行資料庫的機器、RAM、IO效能以及使用的複製。
控制性能的變數永遠不會結束。
對於查詢,可能取決於時間序列資料的時間範圍。它取決於命中的記錄數、查詢的欄位數、是否涉及範圍掃描、資料是否為索引、使用的索引類型、可能存取的碎片數、資料是否為本機資料。以及機器的特點。它有貨嗎?它正在進行維護嗎?網路忙嗎?

所以答案總是, 視情況而定。資料庫設計者是誠實的。他們可以知道他們建立的系統的一切, 但仍然不知道您的問題的答案。

程式設計遺願清單

如果給那些希望提高程式設計能力的開發人員一條建議的話,那就是加入資料庫開發團隊。因為資料庫開發,我的程式設計技能大大提高了——這是一次美妙的編碼體驗。

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

翻譯網址:https://learnku .com/go/t/64605

ID FIRST
##Kelly Director Marketing
Tom #Burke Representative Sales
John Smith #Vice President #Sales

以上是Go rqlite作者告訴你:開發資料庫軟體,演算法多重要!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1675
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
如何使用 Golang 安全地讀取和寫入檔案? 如何使用 Golang 安全地讀取和寫入檔案? Jun 06, 2024 pm 05:14 PM

在Go中安全地讀取和寫入檔案至關重要。指南包括:檢查檔案權限使用defer關閉檔案驗證檔案路徑使用上下文逾時遵循這些準則可確保資料的安全性和應用程式的健全性。

如何為 Golang 資料庫連線配置連線池? 如何為 Golang 資料庫連線配置連線池? Jun 06, 2024 am 11:21 AM

如何為Go資料庫連線配置連線池?使用database/sql包中的DB類型建立資料庫連線;設定MaxOpenConns以控制最大並發連線數;設定MaxIdleConns以設定最大空閒連線數;設定ConnMaxLifetime以控制連線的最大生命週期。

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。

Golang框架與Go框架:內部架構與外部特性對比 Golang框架與Go框架:內部架構與外部特性對比 Jun 06, 2024 pm 12:37 PM

GoLang框架與Go框架的差異體現在內部架構與外部特性。 GoLang框架基於Go標準函式庫,擴充其功能,而Go框架由獨立函式庫組成,以實現特定目的。 GoLang框架更靈活,Go框架更容易上手。 GoLang框架在效能上稍有優勢,Go框架的可擴充性更高。案例:gin-gonic(Go框架)用於建立RESTAPI,而Echo(GoLang框架)用於建立Web應用程式。

從前端轉型後端開發,學習Java還是Golang更有前景? 從前端轉型後端開發,學習Java還是Golang更有前景? Apr 02, 2025 am 09:12 AM

後端學習路徑:從前端轉型到後端的探索之旅作為一名從前端開發轉型的後端初學者,你已經有了nodejs的基礎,...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

See all articles