日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

如果一切似乎都在控制下,你就不會夠快”

加快數據庫性能的8項技術

> Photo by Christina Morillo (original). Thank you!

幾乎所有用于最終用戶的Web服務都需要存儲數據。它們幾乎所有所有人都將它們存儲在數據庫中。很多很多使用PostgreSQL,MySQL / MariaDB或MSSQL等關系數據庫。數據庫系統非常令人敬畏,因為您可以忘記它們。他們只是為了處理你的數據持久性……直到他們變慢。

在本文中,您將學習垂直和水平分區,分片,復制等的區別,以及加快數據庫的其他方式。我們走吧!

我們關心什么?

對于數據庫系統,我們關心一致的一致性和可用性。我們還需要一個用于交換破損設備和連續備份的工作解決方案。

一旦滿足最低要求,我們可能有幾個性能指標:

  • 讀取簡單查詢的性能
  • 讀取復雜查詢的性能
  • 插入/更新性能

不同應用程序的工作量以重要方式不同。許多Web應用程序僅使用CRUD,偶爾一次,非常簡單的連接。他們需要快速讀取和相對快速的寫入。他們有大量的小交易。他們有一個OLTP風格的工作量。

分析團隊相比之下需要更復雜的疑問。如果這些查詢需要更多時間,它也是可以接受的。它們具有少量復雜的選擇查詢。他們有一個OLAP風格的工作量。

找到單個慢查詢的一個工具正在記錄慢查詢(MySQL,PostgreSQL,MSSQL)。

算法改進

在許多情況下,在生產中運行的代碼只是恰好工作的第一件事。對于非開發人員來說,想想你寫的最后幾塊電子郵件。很可能,至少有一個在哪里你沒有花太多時間來改善你的溝通方式。這是一個代碼的故事。在好公司中,至少第二個人在代碼中快速瀏覽。但是,當它看起來合理時,我們的開發人員不會詳細介紹每一條線。這意味著總會有改進的空間。

對于數據庫,有兩種常見的方法可以改進:添加合理的索引和查詢優化。

1.索引

索引允許數據庫通過維護有效的搜索數據結構(例如,B樹)更快地查找相關行。這是按表完成的。添加索引可以計算地昂貴,必須在生產系統上執行,因此通常不經常完成。

通過SQL創建索引(MySQL,PostgreSQL)很容易:

CREATE INDEX arbitrary_index_name
ON your_table_name(column1, column2);

添加索引可以加速數據庫中的搜索,但慢下來更新/插入/刪除語句,除非“在”部分“部分成本耗時。

2.查詢優化

查詢優化由每個查詢的數據庫用戶完成。查詢可以用幾種不同的方式編寫,其中一些可以比其他方式更有效。您可能希望在數據上嘗試不同的查詢版本并使用Explate語句。

一個提及的工具是sqlcheck。它檢查常見的SQL查詢反模式,例如在一列中具有多個值而不是使用交叉表或通配符選擇。

查詢優化主題的略微不同的子類別是n + 1問題/寫入循環以發送多個查詢,而不是對數據進行一個查詢。

3.業務變更和分區

當您正在營業時,您想取悅您的客戶。如果他們要求一個小型功能,您會嘗試包含它。這可能導致功能蠕變。UNIX哲學表明這是一個很多問題的問題:

“做一件事并做得好。” - Doug McIlroy.

同樣,可以通過用戶組拆分Web服務數據。也許將它們分成區域是有意義的?我在AWS和安全的代碼戰士上看到過。也許你可以將其分成“私人客戶”,“小型企業客戶”或“大型商業客戶”?也許應用程序的一部分實際上可以與自己的數據庫有自己的服務?

4.復制

加快數據庫性能的8項技術

> Image by Martin Thoma

如果讀是問題,復制是一個簡單的解決方案,如果更新的一點時間延遲并不大。復制將數據庫連續復制到另一臺計算機。它加速了讀取并充當故障轉移機制。

該想法是擁有一個主服務器和多個復制服務器,該服務器以前在其他名稱下已知。主服務器處理數據的任何更改,而Replication Server只會復制主服務器。還有其他拓撲,例如環或星形設置。

另請參閱:MySQL文檔,PostgreSQL文檔,MSSQL文檔

5.水平分區

鑒于一個巨大的表,我們可以在另一臺機器上存儲一些行和其他機器。按行拆分數據的想法稱為水平分區。

圖像解釋了多個單詞:

加快數據庫性能的8項技術

> Conceptual example for horizontal partitioning. Image by Martin Thoma.

僅在MySQL / MariaDB中的ID簡單地分區:

ALTER TABLE shopping_carts
PARTITION BY RANGE(id)
( Partition p0 VALUES LESS THAN (1234), 
  Partition p1 VALUES LESS THAN (4567), 
  Partition p2 VALUES LESS THAN MAXVALUE);

您希望數據庫系統的用戶仍然能夠使用典型查詢查詢數據庫,或許使用以下內容:

SELECT * FROM shopping_carts WHERE cart_id = 3

這里有一個重要的事情:水平分區完全無關與水平縮放!

6.垂直分區

我們可以根據行劃分大數據庫,而是可以按列劃分。這可能會給你一種不安的感覺,因為你在大學學習了一個正?;瘮祿焓且粋€好主意。這里要注意的重要事項是我們正在談論數據庫設計中的不同階段。各種數據庫正常形式與邏輯設計有關。在這個階段,我們照顧了物理設計。

應用程序的不同部分可能不需要行的大多數列。出于這個原因,可以將它們分開。因此,垂直分區也稱為行分離。

一個常用的實踐是從內容中拆分元數據。這是一個圖片:

加快數據庫性能的8項技術

> Image by Martin Thoma

這里有一個重要的事情:垂直分區與垂直縮放完全無關!

當您避免隱私或監管問題時,垂直分區可能很有用。想想信用卡信息。這可以符合其他信息符合良好,但大多數應用程序都不需要它。您甚至可能將其放在完全不同的數據庫中,并將其隱藏在私人微服務后面。

分片 - 以下一級分配

您已經看到數據可以以兩種不同的方式分組。它可能已經有意義地分區同一臺計算機以幫助數據庫更快地執行常見查詢。但如果數據庫最大限度地熄滅CPU或RAM,則使用不同的機器可能有意義。

分片正在劃分單個邏輯數據集并將其分發在不同的機器上。

正如您可能猜到的那樣,這有很多問題 - 因此應該只應該是你最后的出路。例如,由于2010年10月(來源)的分配問題,FourSquare已下降了11小時。到目前為止,我一直很幸運,我不必處理分片。

第一個明顯的問題是您的應用程序需要知道哪些碎片包含您正在尋找的數據。因此,您的應用程序邏輯受到影響,可能在所有地方受到影響。

第二個大問題是橫跨碎片加入。

第三個問題是如何定義分片。要真正可擴展,您想要進行動態定義分片。擁有分層結構可以幫助實現這一目標。

8.數據庫群集

在看Vitess時,我只會遇到這個術語。這個想法似乎隱藏了碎片的問題,也是在引擎蓋下使用復制:

WintgreSQL還有文檔,MySQL群集是另一種產品。

獎金:查詢緩存

如果您有一些沉重的查詢,該查詢是對很少發生更改的數據,您可以嘗試緩存查詢。我不確定默認情況下的數據庫提供了什么,但您可以簡單地將鍵值存儲置于該查詢的位置。您可以直接向數據庫發送查詢,而不是將查詢發送到在鍵值存儲中查找它的微服務。如果它不存在或無效,則會查詢真實數據庫。

缺點是您不知道您獲得的數據是否是最近的數據。

讓我們總結一下!

加快數據庫性能的8項技術

 

下一步是什么?

一些主題對于發展至關重要,但不是日常工作或計算機科學課程的一部分。在我們專業的軟件開發系列中,您可以了解更多主題。

 

(本文由聞數起舞翻譯自Iris Winter的文章《8 Techniques To Speed up Your Database》,轉載請注明出處,原文鏈接:
https://betterprogramming.pub/8-techniques-to-speed-up-your-database-292754ff7739)

分享到:
標簽:性能 數據庫
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定