[英]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.