簡體   English   中英

具有大量數據的SQL與NoSQL性能

[英]SQL vs NoSQL performance with large amounts of data

在我自己的服務器和AWS服務器上進行了多天的研究和多次負載測試后,我決定向社區提問。

我正在開發一個圖像跟蹤平台。 在此平台上,用戶可以關注圖像和其他圖像,這些圖像是作為對后續圖像的回復而發送的。

基本方案

示例模式

“跟蹤”表可在未來12個月內達到1,000,000,000條記錄。 我們擔心,每個用戶訪問我們的家必須咨詢后面的所有照片,並通過他們加入以收集照片顯示。 在跟蹤表中,不進行DELETE和UPDATE,僅進行INSERTS。

我已經使用Spawner數據生成器執行測試生成虛擬數據,在“跟蹤”表中放置了1億條記錄。 在完成三個必需的JOIN時,我得到了一個非常好的respio時間(或者我認為)~35ms,但是當我執行100個或更多並發查詢時,系統運行速度非常慢,甚至需要25秒才能回答。

我開始認為MongoDB至少可以幫助每個用戶(文檔)有一系列照片跟隨(子文檔),但其中一個問題是16mb的限制,另一個是帶來每個“回復” “(帶有字段photo_id的文件)。 我還試圖做一個除了跟蹤之外的集合(帶有user_id和photo_id的文檔)以避免16mb的問題,但仍然存在帶來“回復”的問題(我不認為這是一個最佳解決方案,除了我理解對於Relational數據,不使用NoSQL。您必須使用適當的工具)

問題:

1 - SQL是設計用於進行此類查詢還是我對技術的使用不當?

2 - 在這種情況下不應使用MongoDB,因為它依賴於關系數據。 我對嗎?

3 - 你有什么建議嗎?

老實說,我非常關心性能,特別是公寓達到了一排排

為什么你不應該使用MongoDB - Sarah Mei :感興趣的文章引起了標題的巨大轟動。 我已經閱讀了有關該文章的幾個意見,我變得更加困惑

用於測試的服務器:

第一:

與MariaDB的-AWS免費套餐。

第二:

-CPU:Celeron J1900

-RAM:4GB 1666mhz

-SSD:32 GB

-OS:Ubuntu服務器16.04

- 軟件:MariaDB

第三:

-CPU:i7 7700

-RAM:16GB 2133mhz

-SSD:512

-OS:Windows 10

- 軟件:MariaDB

SQL是否設計用於進行此類查詢...?

查詢喜歡什么? 您尚未顯示任何疑問。

當您需要優化查詢對數百萬行的,你必須非常具體哪些查詢您正在優化。 您可以使用索引或分區或其他技術,但每種優化都會以犧牲其他查詢為代價來優化特定查詢。

在這種情況下不應使用MongoDB,因為它依賴於關系數據。 我對嗎?

MongoDB 3.2支持$lookup ,有點像外連接。 但它不可能像SQL中的索引連接一樣高效。

MongoDB的另一個策略是存儲更復雜的文檔,所有依賴數據都嵌套在嵌套結構中。 這樣您就不必進行連接,但它會針對某種數據檢索進行優化。

你有什么建議?

我建議您正確調整服務器的大小以適應您將要使用的數據量。

  • 給他們足夠的RAM,以便您可以將數據集保存在InnoDB緩沖池中。 確保調整MySQL / MariaDB選項以利用系統RAM。

  • 給他們更強大的CPU,可以執行更多的並發線程(在你的情況下,頂級CPU仍然是一個4核CPU,HT只有8個線程)。 毫不奇怪,你的適度CPU被100個並發線程所淹沒。

還計划更多地使用緩存。 針對大型數據集的查詢將非常昂貴。 最快的查詢可能是您根本不必執行的查詢,因為結果已經在緩存中。 您需要在應用程序級別進行架構以減少SQL查詢負載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM