怎樣為我們的應用選擇合適的數據庫

怎樣為我們的應用選擇合適的數據庫

怎樣為我們的應用選擇合適的數據庫

選擇“正確的”數據庫通常對於應用程序的成功至關重要。下面是一些非常重要的問題:

存儲多少數據

如果您的估計數以GB計算或更少為單位,那麼幾乎任何數據庫都可以處理您的數據,甚至內存數據庫是完全可行的。當然也有許多數據庫選項可以處理TB級的數據。

如果您的答案以PB計算(百萬兆字節)或更多為單位,那麼只有少數幾個數據庫將為您提供良好的服務,並且您需要為大量數據存儲成本做好準備,無論是內部存儲的資本支出還是用於內部存儲的運營支出。

需要多少併發用戶

來自多個併發用戶的負載通常被視為要在安裝生產數據庫之前需要進行精細計算的。

然而很多時候,我們無法正確評估一個應用到底需要多少併發量,因為有些時候,我們的用戶量是會發生變化的,這個時候需要我們的數據庫可以支持伸縮擴展。

伸縮靈活性

儘管並非每個應用程序都需要以99.999%的可用性運行24/7,但有些應用程序卻需要。只要您在多個可用性區域中運行它們,一些雲數據庫就可以提供“五個九”的可用性。通常,可以將本地數據庫配置為在計劃的維護時段之外實現高可用性,尤其是在您可以負擔得起建立多個備份服務器的情況下。

從歷史上看,NoSQL數據庫的可伸縮性(尤其是水平可伸縮性)比SQL數據庫要好,但是一些SQL數據庫正在追趕。動態可伸縮性在雲中更容易實現。具有良好可伸縮性的數據庫可以通過向上或向外擴展滿足同時處理許多用戶。

每個用戶操作都將應該具有亞秒級的響應時間,分析查詢通常可能需要幾秒鐘或幾分鐘。

OLTP數據庫的吞吐量通常以每秒事務數來衡量。具有高吞吐量的數據庫可以支持更多併發用戶。

對於SQL數據庫,數據一致性通常是最重要的,這意味著所有讀取都將返回最新數據。對於NoSQL數據庫,數據只要最終一致性就可以。最終的一致性提供了較低的延遲,但存在讀取過時的數據的風​​險。

數據庫架構穩定性

如果您的數據庫模式不太可能隨著時間的推移發生顯著變化,並且您希望大多數字段在記錄之間保持一致的類型,那麼SQL數據庫將是您的理想選擇。否則,NoSQL數據庫(其中一些甚至不支持架構)可能對您的應用程序更好。但是也有例外。例如,Rockset允許SQL查詢,而無需在其導入的數據上施加固定的架構或一致的類型。

用戶的地理分佈

當您的數據庫用戶遍佈世界各地時,除非您在他們的區域中提供其他服務器,否則最好選擇光纜來為用戶提供較低的數據庫延遲。

OLTP,OLAP或HTAP?

您的應用程序是否需要數據庫支持事務,分析或兩者兼而有之。需要快速的事務意味著快速的寫入速度和最小的索引。需要分析意味著讀取速度快並且索引很多。混合系統使用各種技巧來滿足這兩個要求,包括讓主事務存儲通過複製為輔助分析存儲提供服務。

讀寫比

一些數據庫在讀取和查詢方面速度更快,而一些數據庫則在寫入方面速度更快。索引類型的最佳選擇在需要大量讀取的應用程序(通常是B樹)和需要大量寫入的應用程序(通常是日誌結構的合併樹,也稱為LSM樹)之間有所不同。

地理空間索引和查詢

如果您具有地理或幾何數據,並且想要執行有效的查詢以查找邊界內的對象或位置的給定距離內的對象,則與典型關係數據相比,您需要的索引不同。 R樹通常是地理空間索引的首選選擇,但是有十多種其他可能的地理空間索引數據結構。有幾十個支持空間數據的數據庫。大多數支持部分或全部開放地理空間聯盟標準。

全文索引和查詢

同樣,對文本字段進行有效的全文搜索需要的索引比關係或地理空間數據要不同。通常,您構建標記詞的倒排列表索引,並進行搜索以避免進行昂貴的表掃描。

首選編程語言

儘管大多數數據庫都支持許多編程語言的API,但是應用程序中首選的編程語言有時會影響數據庫的選擇。例如,JSON是JavaScript的自然數據格式,因此您可能希望選擇一個支持JavaScript應用程序的JSON數據類型的數據庫。當您使用強類型的編程語言時,您可能希望選擇一個強類型的數據庫。

預算限制

數據庫的價格從免費到高昂的付費版本。許多數據庫既有免費版本又有付費版本,有時具有不止一個級別的付費產品,例如,提供企業版和不同的服務響應時間。此外,雲中的某些數據庫可以按需付費。

如果選擇免費的開放源數據庫,則可能不得不放棄供應商支持。只要您具有內部專業知識,那也可以。另一方面,讓您的員工專注於應用程序,而將數據庫管理和維護留給供應商或雲提供商,可能會更有效率。

法律的限制

有關數據安全和隱私的法律很多。在歐盟,GDPR對隱私,數據保護和數據位置具有廣泛的影響。在美國,HIPAA規定醫療信息,而GLBA規定金融機構處理客戶私人信息的方式。在加利福尼亞,新的CCPA增強了隱私權和消費者保護。

只要您遵循最佳實踐,某些數據庫就能以符合某些或所有這些法規的方式處理數據。其他數據庫也存在缺陷,無論您多麼小心,都很難將其用於個人身份信息。

數據庫的選擇需要考慮的因素非常的多,我們幾乎永遠無法考慮到所有的情況。但是我們可以儘量避免那些常見的問題,這樣我們的應用至少可以長期穩定的運行。


分享到:


相關文章: