偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

加快數(shù)據(jù)庫性能的八項(xiàng)技術(shù)

運(yùn)維 數(shù)據(jù)庫運(yùn)維
在本文中,您將學(xué)習(xí)垂直和水平分區(qū),分片,復(fù)制等的區(qū)別,以及加快數(shù)據(jù)庫的其他方式。

幾乎所有用于最終用戶的Web服務(wù)都需要存儲(chǔ)數(shù)據(jù)。它們幾乎所有人都將它們存儲(chǔ)在數(shù)據(jù)庫中。很多很多使用PostgreSQL,MySQL / MariaDB或MSSQL等關(guān)系數(shù)據(jù)庫。數(shù)據(jù)庫系統(tǒng)非常令人敬畏,因?yàn)槟梢酝浰鼈?。他們只是為了處理你的?shù)據(jù)持久性……直到他們變慢。

在本文中,您將學(xué)習(xí)垂直和水平分區(qū),分片,復(fù)制等的區(qū)別,以及加快數(shù)據(jù)庫的其他方式。我們走吧!

[[410567]]

我們關(guān)心什么?

對于數(shù)據(jù)庫系統(tǒng),我們關(guān)心一致的一致性和可用性。我們還需要一個(gè)用于交換破損設(shè)備和連續(xù)備份的工作解決方案。

一旦滿足最低要求,我們可能有幾個(gè)性能指標(biāo):

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

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

分析團(tuán)隊(duì)相比之下需要更復(fù)雜的疑問。如果這些查詢需要更多時(shí)間,它也是可以接受的。它們具有少量復(fù)雜的選擇查詢。他們有一個(gè)OLAP風(fēng)格的工作量。

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

算法改進(jìn)

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

對于數(shù)據(jù)庫,有兩種常見的方法可以改進(jìn):添加合理的索引和查詢優(yōu)化。

1. 索引

索引允許數(shù)據(jù)庫通過維護(hù)有效的搜索數(shù)據(jù)結(jié)構(gòu)(例如,B樹)更快地查找相關(guān)行。這是按表完成的。添加索引可以計(jì)算地昂貴,必須在生產(chǎn)系統(tǒng)上執(zhí)行,因此通常不經(jīng)常完成。

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

  1. CREATE INDEX arbitrary_index_name 
  2. ON your_table_name(column1, column2); 

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

2. 查詢優(yōu)化

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

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

查詢優(yōu)化主題的略微不同的子類別是n + 1問題/寫入循環(huán)以發(fā)送多個(gè)查詢,而不是對數(shù)據(jù)進(jìn)行一個(gè)查詢。

3. 業(yè)務(wù)變更和分區(qū)

當(dāng)您正在營業(yè)時(shí),您想取悅您的客戶。如果他們要求一個(gè)小型功能,您會(huì)嘗試包含它。這可能導(dǎo)致功能蠕變。UNIX哲學(xué)表明這是一個(gè)很多問題的問題:

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

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

4. 復(fù)制

> Image by Martin Thoma

如果讀是問題,復(fù)制是一個(gè)簡單的解決方案,如果更新的一點(diǎn)時(shí)間延遲并不大。復(fù)制將數(shù)據(jù)庫連續(xù)復(fù)制到另一臺計(jì)算機(jī)。它加速了讀取并充當(dāng)故障轉(zhuǎn)移機(jī)制。

該想法是擁有一個(gè)主服務(wù)器和多個(gè)復(fù)制服務(wù)器,該服務(wù)器以前在其他名稱下已知。主服務(wù)器處理數(shù)據(jù)的任何更改,而Replication Server只會(huì)復(fù)制主服務(wù)器。還有其他拓?fù)?,例如環(huán)或星形設(shè)置。

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

5. 水平分區(qū)

鑒于一個(gè)巨大的表,我們可以在另一臺機(jī)器上存儲(chǔ)一些行和其他機(jī)器。按行拆分?jǐn)?shù)據(jù)的想法稱為水平分區(qū)。

圖像解釋了多個(gè)單詞:

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

僅在MySQL / MariaDB中的ID簡單地分區(qū):

  1. ALTER TABLE shopping_carts 
  2. PARTITION BY RANGE(id) 
  3. ( Partition p0 VALUES LESS THAN (1234),  
  4.   Partition p1 VALUES LESS THAN (4567),  
  5.   Partition p2 VALUES LESS THAN MAXVALUE); 

您希望數(shù)據(jù)庫系統(tǒng)的用戶仍然能夠使用典型查詢查詢數(shù)據(jù)庫,或許使用以下內(nèi)容:

  1. SELECT * FROM shopping_carts WHERE cart_id = 3 

這里有一個(gè)重要的事情:水平分區(qū)完全無關(guān)與水平縮放!

6. 垂直分區(qū)

我們可以根據(jù)行劃分大數(shù)據(jù)庫,而是可以按列劃分。這可能會(huì)給你一種不安的感覺,因?yàn)槟阍诖髮W(xué)學(xué)習(xí)了一個(gè)正?;瘮?shù)據(jù)庫是一個(gè)好主意。這里要注意的重要事項(xiàng)是我們正在談?wù)摂?shù)據(jù)庫設(shè)計(jì)中的不同階段。各種數(shù)據(jù)庫正常形式與邏輯設(shè)計(jì)有關(guān)。在這個(gè)階段,我們照顧了物理設(shè)計(jì)。

應(yīng)用程序的不同部分可能不需要行的大多數(shù)列。出于這個(gè)原因,可以將它們分開。因此,垂直分區(qū)也稱為行分離。

一個(gè)常用的實(shí)踐是從內(nèi)容中拆分元數(shù)據(jù)。這是一個(gè)圖片:

> Image by Martin Thoma

這里有一個(gè)重要的事情:垂直分區(qū)與垂直縮放完全無關(guān)!

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

分片 - 以下一級分配

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

分片正在劃分單個(gè)邏輯數(shù)據(jù)集并將其分發(fā)在不同的機(jī)器上。

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

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

第二個(gè)大問題是橫跨碎片加入。

第三個(gè)問題是如何定義分片。要真正可擴(kuò)展,您想要進(jìn)行動(dòng)態(tài)定義分片。擁有分層結(jié)構(gòu)可以幫助實(shí)現(xiàn)這一目標(biāo)。

8. 數(shù)據(jù)庫群集

在看Vitess時(shí),我只會(huì)遇到這個(gè)術(shù)語。這個(gè)想法似乎隱藏了碎片的問題,也是在引擎蓋下使用復(fù)制:

WintgreSQL還有文檔,MySQL群集是另一種產(chǎn)品。

獎(jiǎng)金:查詢緩存

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

缺點(diǎn)是您不知道您獲得的數(shù)據(jù)是否是最近的數(shù)據(jù)。

讓我們總結(jié)一下!

下一步是什么?

一些主題對于發(fā)展至關(guān)重要,但不是日常工作或計(jì)算機(jī)科學(xué)課程的一部分。在我們專業(yè)的軟件開發(fā)系列中,您可以了解更多主題。

原文鏈接:https://betterprogramming.pub/8-techniques-to-speed-up-your-database-292754ff7739

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2011-05-18 09:39:19

Oracle數(shù)據(jù)庫性能優(yōu)化

2009-03-30 14:19:26

優(yōu)化數(shù)據(jù)庫MySQL

2010-04-21 14:00:48

Oracle數(shù)據(jù)庫

2010-05-04 17:08:24

Oracle數(shù)據(jù)庫

2023-06-06 18:51:34

2023-10-08 08:09:16

數(shù)據(jù)庫性能服務(wù)器

2011-04-18 09:03:36

數(shù)據(jù)庫查詢

2011-05-13 13:54:02

數(shù)據(jù)庫文檔數(shù)據(jù)庫

2009-07-02 09:00:25

JDBC設(shè)計(jì)JSP訪問數(shù)據(jù)庫

2013-08-21 09:43:45

vSphere

2009-07-01 16:01:58

JSP數(shù)據(jù)庫

2011-05-19 10:29:40

數(shù)據(jù)庫查詢

2011-03-04 10:03:45

EJB數(shù)據(jù)庫應(yīng)用

2010-06-17 12:59:07

Oracle

2010-06-17 13:34:47

SQL Server數(shù)

2011-04-13 13:45:04

數(shù)據(jù)庫虛擬化

2023-11-14 08:24:59

性能Scylla系統(tǒng)架構(gòu)

2017-09-29 08:56:13

2018-09-27 15:58:06

MySQL數(shù)據(jù)庫性能優(yōu)化

2023-01-05 08:42:47

數(shù)據(jù)庫優(yōu)化方案
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號