Performance

關係數據庫對於大型電子商務平台是否可行?

  • August 2, 2021

我被分配到一個擁有大量數據(數十萬種產品、賣家等)的電子商務平台,我一直在嘗試選擇執行此操作所需的適當工具和方法。

雖然有許多電子商務平台使用關係數據庫(WooCommerce、Magento、Presta 等),但我並不完全相信使用關係數據庫開發這樣的東西是有效的。由於產品構成了數據集的主要部分,並且每個產品都有自己特定的藍圖,除非您為每個產品添加大量元數據、儲存重複數據等,否則這些藍圖無法映射到單個藍圖。有人可能會建議使用 JSON,但我不確定在查詢方面是否進行了優化。

所以我想知道,使用 2 種不同的數據庫類型開發這樣的項目會是一個好主意嗎?用於目錄的非關係數據庫和用於數據(例如使用者數據)的關係數據庫?

我不是 NoSQL 方面的專家,我特別關心搜尋和查詢商店時的性能。

什麼是最大化效率和性能的好方法?我的雙手可以自由選擇所需的任何技術和堆棧。

這裡真的有三個不同的問題。

問:幾十萬行的表很大嗎?

一般來說,沒有。例如,您可以下載Stack Overflow 公共數據導出,它有超過一億行的表。

超大型數據庫 (VLDB) 的定義隨著時間的推移而發生變化,但是當每個表有超過 10 億行或單個數據庫中有超過 1 TB 的數據時,您經常會聽到人們抱怨性能和維護問題。當然,這並不是說你不會更早聽到人們抱怨。

問:使用 2 種不同的數據庫類型來開發這樣的項目是一個好主意嗎?

當您剛剛開始時,我建議您專注於單個數據庫。用一個你不太了解的持久層來建構一個應用程序已經夠難的了,更不用說兩個了。

當您遇到增長的痛苦並且正在考慮額外的持久層時,請從 Redis 之類的記憶體層開始。在那裡保存經常訪問的、很少更改的數據 - 在您的情況下,產品表將是一個很好的例子。產品可能每 5-10 分鐘不會更改一次以上,但與此同時,它們會不斷被查詢以呈現網頁。記憶體產品是一種快速減少數據庫工作量的方法,無需成為多個數據庫平台的專家。

問:開發新應用程序時我應該選擇哪個數據庫?

你最了解的那個。

對於數十萬行範圍內的表,所有關係數據庫都可以表現良好或表現不佳。它更多地取決於您如何編寫查詢,而不是數據庫本身的內部結構。

如果沒有關於您的案例和數據類型的更多資訊,很難說什麼是合適的。關於性能,如果架構得當,關係數據庫管理系統 (RDBMS)的性能將與****NoSQL系統沒有什麼不同,無論您計劃儲存多少數據。

除此之外,有些人確實有同時利用 RDBMS 和 NoSQL 系統來實現數據的不同目的的案例。Facebook 就是一個很好的例子。他們最初在開始時主要使用 RDBMS,然後將 NoSQL 系統合併到組合中(除了他們的 RDBMS)作為一種方式,以幫助他們更快地擴展和開發系統的某些部分,因為他們的架構發生變化,以保持與他們獲得新使用者的速度保持同步。現在他們仍然使用兩者,儘管最近的消息表明他們又開始更加依賴 MySQL。

無論如何,就數據管理而言,這兩種工具都不比另一種更高效。在 RDBMS 上,表中的數十萬行也很小,我在一個表中處理了數十億行。相反,問題變成了數據的結構是什麼,它的結構變化頻率如何,以及 NoSQL 是否會通過抵消由於其無模式特性而需要何時以及如何維護該結構來幫助您更快地開發?通常,如果您擁有結構良好的數據並且在維護該結構方面沒有任何問題,那麼 RDBMS 非常適合。

引用自:https://dba.stackexchange.com/questions/297444