亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    Go rqlite作者告訴你:開發(fā)數(shù)據(jù)庫軟件,算法多重要!

    本文由golang教程欄目給大家介紹關(guān)于《Go rqlite作者告訴你:開發(fā)數(shù)據(jù)庫軟件,算法多重要!》,希望對需要的朋友有所幫助!

    編寫數(shù)據(jù)庫程序是一項迷人的工作。在過去的兩年里,我一直深度參與開源數(shù)據(jù)庫的開發(fā),而數(shù)據(jù)庫編程可能是作為一個軟件開發(fā)者所能完成的最有啟發(fā)性的項目了。

    然而,真正令人震驚的是, 在過去的 6 年里,我對數(shù)據(jù)庫的態(tài)度發(fā)生了很大的變化。 從一開始不感興趣的狀態(tài),到現(xiàn)在我開始認(rèn)為數(shù)據(jù)庫系統(tǒng)是軟件工程的一個巔峰。

    不知道什么是更好的

    在我的職業(yè)生涯的大部分時間里, 我對數(shù)據(jù)庫的唯一經(jīng)驗就是閱讀有關(guān)它們的資料。 通常是在想當(dāng)枯燥的背景下 — 打開任何一本有關(guān)數(shù)據(jù)庫的本科教科書,就能明白我的意思。 通常你會看到如下表格,作為關(guān)系型數(shù)據(jù)庫的典型用例:

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

    你能再多讀些無聊的東西嗎?如果這些都是關(guān)于數(shù)據(jù)庫的,我不想和它們有任何關(guān)系。重點是什么?軟件比這酷多了,對吧?所以我在很長一段時間里完全避免了與數(shù)據(jù)庫有關(guān)的任何事情

    您永遠(yuǎn)不會忘記您的第一次CRUD應(yīng)用

    2009年,經(jīng)過多年的寫作 嵌入式軟件, Linux 設(shè)備驅(qū)動程序, 和 網(wǎng)絡(luò)軟件, 我發(fā)現(xiàn)自己領(lǐng)導(dǎo)的團(tuán)隊需要構(gòu)建一個基于web的系統(tǒng)。你看,這個 AWS 云計算已經(jīng)到來,基于云計算的許可技術(shù) MAC 地址 不再有效。我的團(tuán)隊必須建立一個 許可門戶 用于我們新的基于EC2的軟件設(shè)備。因為我們在這方面有很多經(jīng)驗 Python, 我們選擇了 Django, 運行在 MySQL. 發(fā)生了一些新的事情。實際上,我是從數(shù)據(jù)庫開始工作的。

    隨著我國平原地區(qū)的發(fā)展CRUD應(yīng)用程序繼續(xù)運行,我開始意識到數(shù)據(jù)庫是多么重要——它對我們的系統(tǒng)是多么重要。如果我們丟失了數(shù)據(jù)庫,我們的軟件開發(fā)就白費了。如果數(shù)據(jù)庫損壞了數(shù)據(jù),我們客戶的設(shè)備可能會未經(jīng)許可,他們的網(wǎng)絡(luò)將停止運行。如果數(shù)據(jù)庫不能正常運行,成千上萬的人將同時受到影響。但這些事情都沒有發(fā)生過。數(shù)據(jù)庫始終工作。它從不讓我們失望。我印象深刻。
    后來我發(fā)現(xiàn)了外鍵約束,唯一約束,引用完整性,索引,(記住,在這個時候我什么都不知道關(guān)于這些事情)-數(shù)據(jù)庫可以通過各種方式幫助我構(gòu)建一個更健壯的系統(tǒng)。我終于意識到現(xiàn)代數(shù)據(jù)庫是驚人的-數(shù)據(jù)庫是世界上最無聊的東西直到你真的必須用它們來構(gòu)建一個系統(tǒng)

    你也永遠(yuǎn)不會忘記你的第一個搜索系統(tǒng)

    到2012年,我領(lǐng)導(dǎo)了一個團(tuán)隊,建立了一個大型索引和搜索系統(tǒng)基礎(chǔ)上的大型鍵值數(shù)據(jù)庫,帶有彈性搜索在其核心??纯磂lasticsearch這樣的系統(tǒng)能做什么 —— 一個建立在世界級索引這項技術(shù)——即使其下有TB級的日志數(shù)據(jù),也讓人大開眼界。
    到現(xiàn)在為止,我甚至看到數(shù)據(jù)庫和搜索系統(tǒng)也失敗了,但我被數(shù)據(jù)庫技術(shù)迷住了。到2014年,我加入了一個小型專門團(tuán)隊,開發(fā)[開源時間序列數(shù)據(jù)庫]的核心(github.com/influxdata/influxdb).

    我學(xué)到的

    算法真的很重要

    只有在數(shù)據(jù)庫開發(fā)中才有大O分析真的活過來了。數(shù)據(jù)庫是程序員仍然需要循環(huán)、排序和過濾數(shù)百萬對象的少數(shù)應(yīng)用程序之一。這是少數(shù)幾個在CS課上學(xué)到的很多枯燥材料都很重要的地方之一。

    其他許多軟件開發(fā)都不是這樣。寫入啟動ROM固件?不,算法對我來說從來都不重要。調(diào)諧器設(shè)備驅(qū)動程序? 不,沒關(guān)系。網(wǎng)絡(luò)設(shè)備管理軟件? CRUD應(yīng)用程序?幾乎不所有這些學(xué)科都需要不同的技能和知識。大多數(shù)時候,我只是在面試中討論了運行時的復(fù)雜性。
    但隨著數(shù)據(jù)庫的發(fā)展,這一切都發(fā)生了變化。實際上看到一個系統(tǒng)返回正確的結(jié)果,但是由于算法的改變,只在以前的一小部分時間內(nèi),看到它發(fā)生在您的代碼中,在您構(gòu)建的系統(tǒng)中,這是一件美妙的事情。

    表現(xiàn)也很重要

    軟件中有一個老故事是這樣的:程序員編寫的一些代碼的運行速度比以前的版本快十倍。他展示了它,但有人指出,它產(chǎn)生的數(shù)據(jù)與正確的數(shù)據(jù)略有不同?!暗撬俣瓤炝耸丁!背绦騿T指出。“好吧,如果它不需要是正確的,我可以制作一個完全不占用空間、運行速度無限快的版本”,另一個回答說。
    這個道德故事一直對我影響很大。正確總是比什么都重要。這是真的。但這也讓我相信,項目之所以有價值,僅僅是因為它們產(chǎn)生了正確的結(jié)果。

    對于數(shù)據(jù)庫,情況并非如此。
    性能不僅僅是一項功能。這是一個要求。那些愿意為數(shù)據(jù)庫掏錢的人經(jīng)常這樣做,因為他們擁有大量的數(shù)據(jù)。如果數(shù)據(jù)庫在這種情況下不能很好地執(zhí)行—如果它不能快速有效地返回結(jié)果—那么它可能根本不工作。

    你認(rèn)為寫系統(tǒng)很復(fù)雜嗎?

    我認(rèn)為開發(fā)數(shù)據(jù)庫最讓我震驚的是查詢引擎變得如此復(fù)雜。我有很多構(gòu)建系統(tǒng)的經(jīng)驗,可以將數(shù)據(jù)寫入并存儲到磁盤。使這些系統(tǒng)運行良好可能是一項重大挑戰(zhàn)。
    但這種復(fù)雜性通常比查詢引擎的復(fù)雜性要小得多。一個靈活的查詢系統(tǒng)——有效地構(gòu)建一個系統(tǒng)來回答問題,當(dāng)你不知道問題會是什么的時候——需要認(rèn)真的設(shè)計思想。查詢計劃器必須有效。查詢系統(tǒng)必須支持許多正交需求——按某些維度過濾,按其他維度分組,連接來自不同表的數(shù)據(jù)——有時還支持來自外部源的數(shù)據(jù)。最后,查詢系統(tǒng)必須高效且性能良好。這導(dǎo)致了設(shè)計和實現(xiàn)中抽象和優(yōu)化之間的緊張關(guān)系,這需要真正的技巧才能很好地管理。

    在現(xiàn)實世界中,它必須被操作

    任何重要的數(shù)據(jù)庫都必須支持備份、恢復(fù)、碎片管理和監(jiān)視等基本操作。
    如果我,作為一個嚴(yán)肅的操作員,不能備份你的數(shù)據(jù)庫,我不能使用它,就這么簡單。數(shù)據(jù)庫接受寫操作的速度有多快并不重要。在查詢過程中,它的內(nèi)存占用有多小并不重要。如果我不能保護(hù)數(shù)據(jù)庫中的數(shù)據(jù)不受數(shù)據(jù)庫創(chuàng)建者您無法控制的故障的影響,我將永遠(yuǎn)無法舒適地運行它。
    當(dāng)然,有很多方法可以備份數(shù)據(jù)庫,而不需要數(shù)據(jù)庫的合作。但內(nèi)置方法通常是最好的。這也是我向 rqlite v2.0.如果我想讓任何人認(rèn)真地使用rqlite,我必須解決現(xiàn)實世界中的問題,即系統(tǒng)可能完全失敗,并將數(shù)據(jù)拖得很長時間。

    因此,在設(shè)計和實現(xiàn)數(shù)據(jù)庫時,從一開始就要構(gòu)建操作支持。將其作為設(shè)計的基本部分。您的用戶將為此感謝您。

    答案通常是“視情況而定”

    當(dāng)您第一次開始使用數(shù)據(jù)庫時,尤其是作為一名操作員,您經(jīng)常會問這樣的問題:系統(tǒng)可以以什么速率索引?它對查詢的響應(yīng)速度有多快?我需要多少磁盤空間?一塊碎片能有多大,而且還能正常工作?我怎樣才能加快速度?所有人都毫無保留地問。我過去常常自己做。
    也許你可以和數(shù)據(jù)庫程序員談?wù)?,問他們這些問題。而你經(jīng)?!苍S永遠(yuǎn)——得到的回答是:這取決于你。你必須基準(zhǔn),你必須衡量。聽到這個消息可能會很惱火,而且可能看起來像是在逃避責(zé)任。

    但事實并非如此。
    現(xiàn)在,當(dāng)我聽到這樣的問題時,我會微笑。太天真了。
    索引率可能取決于數(shù)據(jù)的大小,而不僅僅是文檔或數(shù)據(jù)點的數(shù)量。這可能取決于批處理、數(shù)據(jù)的基數(shù)、數(shù)據(jù)庫是否群集、數(shù)據(jù)中的哪些列和字段被索引、是新數(shù)據(jù)還是對現(xiàn)有數(shù)據(jù)的更新、運行數(shù)據(jù)庫的機器、RAM、IO性能以及使用的復(fù)制。
    控制性能的變量永遠(yuǎn)不會結(jié)束。
    對于查詢,可能取決于時間序列數(shù)據(jù)的時間范圍。它取決于命中的記錄數(shù)、查詢的字段數(shù)、是否涉及范圍掃描、數(shù)據(jù)是否索引、使用的索引類型、可能訪問的碎片數(shù)、數(shù)據(jù)是否為本地數(shù)據(jù)。以及機器的特點。它有貨嗎?它正在進(jìn)行維護(hù)嗎?網(wǎng)絡(luò)忙嗎?

    所以答案總是, 視情況而定。 數(shù)據(jù)庫設(shè)計者是誠實的。 他們可以知道他們建立的系統(tǒng)的一切, 但仍然不知道您的問題的答案。

    編程遺愿清單

    如果給那些希望提高編程能力的開發(fā)人員一條建議的話,那就是加入數(shù)據(jù)庫開發(fā)團(tuán)隊。因為數(shù)據(jù)庫開發(fā),我的編程技能大大提高了——這是一次美妙的編碼體驗。

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

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

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號