搜尋
首頁後端開發GolangGo rqlite作者告訴你:開發資料庫軟體,演算法多重要!

本文由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中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
Golang vs.C:代碼示例和績效分析Golang vs.C:代碼示例和績效分析Apr 15, 2025 am 12:03 AM

Golang適合快速開發和並發編程,而C 更適合需要極致性能和底層控制的項目。 1)Golang的並發模型通過goroutine和channel簡化並發編程。 2)C 的模板編程提供泛型代碼和性能優化。 3)Golang的垃圾回收方便但可能影響性能,C 的內存管理複雜但控制精細。

Golang的影響:速度,效率和簡單性Golang的影響:速度,效率和簡單性Apr 14, 2025 am 12:11 AM

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

C和Golang:表演至關重要時C和Golang:表演至關重要時Apr 13, 2025 am 12:11 AM

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang行動:現實世界中的示例和應用程序Golang行動:現實世界中的示例和應用程序Apr 12, 2025 am 12:11 AM

Golang在实际应用中表现出色,以简洁、高效和并发性著称。1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Golang:Go編程語言解釋了Golang:Go編程語言解釋了Apr 10, 2025 am 11:18 AM

Go語言的核心特性包括垃圾回收、靜態鏈接和並發支持。 1.Go語言的並發模型通過goroutine和channel實現高效並發編程。 2.接口和多態性通過實現接口方法,使得不同類型可以統一處理。 3.基本用法展示了函數定義和調用的高效性。 4.高級用法中,切片提供了動態調整大小的強大功能。 5.常見錯誤如競態條件可以通過gotest-race檢測並解決。 6.性能優化通過sync.Pool重用對象,減少垃圾回收壓力。

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

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

SQL排序中ORDER BY語句結果為何有時看似隨機?SQL排序中ORDER BY語句結果為何有時看似隨機?Apr 02, 2025 pm 05:24 PM

關於SQL查詢結果排序的疑惑學習SQL的過程中,常常會遇到一些令人困惑的問題。最近,筆者在閱讀《MICK-SQL基礎�...

技術棧收斂是否僅僅是技術棧選型的過程?技術棧收斂是否僅僅是技術棧選型的過程?Apr 02, 2025 pm 05:21 PM

技術棧收斂與技術選型的關係在軟件開發中,技術棧的選擇和管理是一個非常關鍵的問題。最近,有讀者提出了...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中