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

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

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

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

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

[[410567]]

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

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

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

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

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

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

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

算法改進(jìn)

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

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

1. 索引

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

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

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

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

2. 查詢(xún)優(yōu)化

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

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

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

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

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

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

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

4. 復(fù)制

> Image by Martin Thoma

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

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

另請(qǐng)參閱:MySQL文檔,PostgreSQL文檔,MSSQL文檔

5. 水平分區(qū)

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

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

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

僅在MySQL / MariaDB中的ID簡(jiǎn)單地分區(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ù)庫(kù)系統(tǒng)的用戶仍然能夠使用典型查詢(xún)查詢(xún)數(shù)據(jù)庫(kù),或許使用以下內(nèi)容:

  1. SELECT * FROM shopping_carts WHERE cart_id = 3 

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

6. 垂直分區(qū)

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

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

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

> Image by Martin Thoma

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

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

分片 - 以下一級(jí)分配

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

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

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

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

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

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

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

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

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

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

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

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

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

下一步是什么?

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

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

 

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

2011-05-18 09:39:19

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

2009-03-30 14:19:26

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

2010-04-21 14:00:48

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

2010-05-04 17:08:24

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

2023-06-06 18:51:34

2023-10-08 08:09:16

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

2011-04-18 09:03:36

數(shù)據(jù)庫(kù)查詢(xún)

2011-05-13 13:54:02

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

2009-07-02 09:00:25

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

2009-07-01 16:01:58

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

2010-06-17 12:59:07

Oracle

2013-08-21 09:43:45

vSphere

2011-03-04 10:03:45

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

2011-05-19 10:29:40

數(shù)據(jù)庫(kù)查詢(xún)

2010-06-17 13:34:47

SQL Server數(shù)

2023-11-14 08:24:59

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

2017-09-29 08:56:13

2011-04-13 13:45:04

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

2018-09-27 15:58:06

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

2023-01-05 08:42:47

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

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