亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享

如何選擇數據庫

2024-11-08 09:21:23
2
0

我將其分為四個基本組:傳統、MPP(大規模并行處理)、列式存儲和一種新興技術稱為 NewSQL。

傳統

這些是我們多年來常見的數據庫。一些供應商可能包括 MySQL、PostgreSQL、MS SQL Server、Sybase、Oracle 數據庫等。它們符合 SQL 標準并提供完整的 ACID 事務。也就是說,你可以在平臺上直接進行大量的數據轉換,并保證不同的人查看相同的數據時會看到相同的值。它們也是關系型的,即不同表中的數據通常會被連接在一起。大多數情況下,這些數據庫會在單個節點或網格中的幾個節點上運行(有些例外)。這些數據庫通常用于處理原子(最低粒度)級別事務的業務應用程序。它們也在處理和存儲涉及物理價值的數據時使用。例如,你公司的 ERP 和供應鏈系統將使用這些數據庫來存儲數據。正確調整、配置和建模后,它們也可以很好地用作數據倉庫解決方案。

MPP(大規模并行處理)

一般來說,提供了與傳統數據庫大部分相同的功能,但是可以擴展到數百或數千個節點。該領域的供應商包括 Oracle Exadata、Teradata、EMC Greenplum 和 IBM Netezza。這些通常在大型企業中作為數據倉庫的核心使用。一些供應商還為 MPP 數據庫提供了專門的方法。例如,像 Vertica 數據庫、Actian Matrix 和 Sybase IQ 這樣的平臺在 MPP 解決方案中提供了列式存儲(見下文)。SAP HANA 和 Exasol 是主要在內存中操作的 MPP 數據庫的例子。

NewSQL

同樣,非常類似于 MPP 和傳統數據庫,因為它們是 ACID 兼容和支持 SQL 標準的,只是這些解決方案傾向于非常依賴或完全依賴內存數據存儲。它們也傾向于橫向擴展。這與主要使用磁盤作為存儲機制的其他解決方案相反。這里的權衡是 NewSQL 傾向于存儲更少的數據,因為磁盤可以存儲比 RAM 更多的數據。實際上,即使是 MPP 解決方案也傾向于使用磁盤、固態硬盤和內存的混合存儲。這些解決方案非常流行用于 OLAP 解決方案,因為它們可以快速對大型數據集進行數據更改。NewSQL 的例子有 Oracle Timesten 和 VoltDB。在某些情況下,數據庫供應商正在將這些功能融合到現有的平臺中。Oracle Database 12c 允許你將表“固定”到內存中。

列式存儲

基本上就像聽起來那樣,數據是以列的形式存儲的。如果你想想傳統 SQL 數據庫中數據是如何通常存儲的,你會有一個包含不同類型數據的單一數據行。以用戶表為例,你可能有一個 id、一個名字、姓氏、地址信息、人口統計學等。當數據以行的形式存儲在磁盤上時,很難以一致的方式壓縮它。而當數據以列而非行的形式存儲時,使用同樣的用戶表例子,所有的 ID 都存放在一處,所有的名字都存放在一處等等。這樣可以讓數據庫大大壓縮數據,因為現在相似類型的數據都存放在了一起,從而在查詢大量記錄時減少了物理磁盤讀取量。

權衡之處在于,你選擇的列越多,你的查詢速度就越慢,因為必須從磁盤讀取更多的數據。這與傳統的 SQL 形成對比,在傳統的 SQL 中,向 SELECT 查詢添加更多列通常只對查詢性能產生很小的影響。它們也不適合高并發查詢的使用場景,因為單個查詢將使用大量的可用資源。它們也被設計為批量加載,DML 操作非常緩慢。這使得它們非常不適合 OLTP 類型的工作負載。列式數據庫的例子有 MonetDB、Sybase IQ 和 Actian Vector。此外,大多數 MPP 和其他數據庫供應商提供了列式壓縮的機制。

NoSQL 數據存儲

這類數據庫如此之多,以至于很難真正對其進行一般性的分類,但我會嘗試通過描述五種主要的“類型”來進行分類:鍵值、文檔、圖、Elastic Search 和時間序列。NoSQL 數據庫的共同點是它們都設計為可以在多個服務器之間水平擴展,使用由“網關”節點管理的索引和分片鍵。幾乎所有 NoSQL 數據存儲都是基于這一概念,并應用某種程度的數據結構、索引或存儲策略,以進一步為某些使用場景提供特定的優勢。

它們通常在需要能夠同時讀取和寫入大量數據的情況下使用。這與傳統數據庫不同,后者通常只能調整為擅長其中之一(再次強調,這是在非常寬泛的術語下)。值得注意的是,NoSQL 是指這些數據庫不使用 SQL 作為查詢語言,并不意味著對傳統 SQL 的拒絕。

你需要記住的是,沒有 SQL 兼容性,大多數這些數據庫無法在其引擎內部轉換數據。你必須將數據提取到其他地方,編寫一些代碼,然后將轉換后的數據放置到你需要的地方。幾乎所有的 NoSQL 數據庫也都缺乏 ACID 兼容性,而是依賴于“最終一致性”。從高層次上看,這意味著不同的人查詢完全相同的數據可能會看到不同的值。你也無法直接在這些數據庫中連接數據。

鍵值

這些基本上提供了一種非常簡單的方法來存儲和檢索二進制數據。對于每條記錄,你定義它的鍵并存儲一個值。通常人們會創建大的編程對象,序列化它們,然后存儲起來。這些例子包括 OracleNoSQL 和 Berkeley DB、Dynamo和 Riak。我也把 Cassandra 放在這個組里,但實際上,它在每個值內提供了更多的結構,而不僅僅是一個開放的二進制存儲。這可以用于存儲類似視頻游戲用戶狀態的東西。

文檔存儲

這些與鍵值存儲相似,但區別在于值不僅僅是簡單的二進制對象,而是數據背后有更多的結構。最常見的是數據以 JSON 格式存儲,少數使用 XML。同樣,對于每個鍵,你將檢索文檔值。文檔通常是很大的對象,通常是逐個訪問的。這些適用于存儲具有一定結構的數據,如法律文件或你網站上的整個在線個人資料。

圖形

這與鍵值和文檔存儲有所不同,這些數據庫旨在創建“圖”形式的數據。這基本上意味著你可以定義不同數據點之間非常復雜的關系。你還可以輕松地遍歷定義了關系的數據,即使它是許多節點之外的數據。可以將其視為社交網絡,其中你有朋友、興趣、簽到、喜歡等,并希望定義這些事物之間的關系然后查詢它們。例子包括 Neo4j 和 SPARQL。

彈性搜索

這種類型的 NoSQL 數據庫往往因對其用途的誤解而受到很多關注。最基本來說,這些數據存儲索引“單詞”,并提供類似于在 Google 中輸入內容的搜索功能。它們非常擅長基于關鍵字搜索在非常大的分布式數據集中查找東西,這是一種“企業搜索”。創建索引需要前期投入,而且它們并不適合執行大量數據掃描的操作(即:分析工作負載)。例子包括 Apache Solr、Elasticsearch 和 Kibana。

時間序列

這些數據存儲基于相同的索引和分片鍵的基本原理。然而,不同之處在于時間戳總是連接鍵的一部分。記錄僅使用“插入”操作追加。這種平臺的主要使用場景是為數據用例提供持久化的數據存儲,其中你主要希望以趨勢的形式檢索數據。例如,具有唯一 ID 的傳感器不斷流式傳輸數據。任何給定唯一 ID 的數據都存儲在同一節點上,并按最近的時間戳排序。這使得針對特定 ID 在特定時間點或時間范圍內檢索數據變得高效。許多這樣的數據存儲還根據時間序列提供了額外的功能,如匯總匯總、基于時間的聚合和視覺趨勢分析。例子包括 Druid、InfluxDB 和 OpenTSDB。我也可以強烈認為應該把 HBase 歸類到這里。

 

0條評論
0 / 1000
朱承禹
4文章數
0粉絲數
朱承禹
4 文章 | 0 粉絲
朱承禹
4文章數
0粉絲數
朱承禹
4 文章 | 0 粉絲

如何選擇數據庫

2024-11-08 09:21:23
2
0

我將其分為四個基本組:傳統、MPP(大規模并行處理)、列式存儲和一種新興技術稱為 NewSQL。

傳統

這些是我們多年來常見的數據庫。一些供應商可能包括 MySQL、PostgreSQL、MS SQL Server、Sybase、Oracle 數據庫等。它們符合 SQL 標準并提供完整的 ACID 事務。也就是說,你可以在平臺上直接進行大量的數據轉換,并保證不同的人查看相同的數據時會看到相同的值。它們也是關系型的,即不同表中的數據通常會被連接在一起。大多數情況下,這些數據庫會在單個節點或網格中的幾個節點上運行(有些例外)。這些數據庫通常用于處理原子(最低粒度)級別事務的業務應用程序。它們也在處理和存儲涉及物理價值的數據時使用。例如,你公司的 ERP 和供應鏈系統將使用這些數據庫來存儲數據。正確調整、配置和建模后,它們也可以很好地用作數據倉庫解決方案。

MPP(大規模并行處理)

一般來說,提供了與傳統數據庫大部分相同的功能,但是可以擴展到數百或數千個節點。該領域的供應商包括 Oracle Exadata、Teradata、EMC Greenplum 和 IBM Netezza。這些通常在大型企業中作為數據倉庫的核心使用。一些供應商還為 MPP 數據庫提供了專門的方法。例如,像 Vertica 數據庫、Actian Matrix 和 Sybase IQ 這樣的平臺在 MPP 解決方案中提供了列式存儲(見下文)。SAP HANA 和 Exasol 是主要在內存中操作的 MPP 數據庫的例子。

NewSQL

同樣,非常類似于 MPP 和傳統數據庫,因為它們是 ACID 兼容和支持 SQL 標準的,只是這些解決方案傾向于非常依賴或完全依賴內存數據存儲。它們也傾向于橫向擴展。這與主要使用磁盤作為存儲機制的其他解決方案相反。這里的權衡是 NewSQL 傾向于存儲更少的數據,因為磁盤可以存儲比 RAM 更多的數據。實際上,即使是 MPP 解決方案也傾向于使用磁盤、固態硬盤和內存的混合存儲。這些解決方案非常流行用于 OLAP 解決方案,因為它們可以快速對大型數據集進行數據更改。NewSQL 的例子有 Oracle Timesten 和 VoltDB。在某些情況下,數據庫供應商正在將這些功能融合到現有的平臺中。Oracle Database 12c 允許你將表“固定”到內存中。

列式存儲

基本上就像聽起來那樣,數據是以列的形式存儲的。如果你想想傳統 SQL 數據庫中數據是如何通常存儲的,你會有一個包含不同類型數據的單一數據行。以用戶表為例,你可能有一個 id、一個名字、姓氏、地址信息、人口統計學等。當數據以行的形式存儲在磁盤上時,很難以一致的方式壓縮它。而當數據以列而非行的形式存儲時,使用同樣的用戶表例子,所有的 ID 都存放在一處,所有的名字都存放在一處等等。這樣可以讓數據庫大大壓縮數據,因為現在相似類型的數據都存放在了一起,從而在查詢大量記錄時減少了物理磁盤讀取量。

權衡之處在于,你選擇的列越多,你的查詢速度就越慢,因為必須從磁盤讀取更多的數據。這與傳統的 SQL 形成對比,在傳統的 SQL 中,向 SELECT 查詢添加更多列通常只對查詢性能產生很小的影響。它們也不適合高并發查詢的使用場景,因為單個查詢將使用大量的可用資源。它們也被設計為批量加載,DML 操作非常緩慢。這使得它們非常不適合 OLTP 類型的工作負載。列式數據庫的例子有 MonetDB、Sybase IQ 和 Actian Vector。此外,大多數 MPP 和其他數據庫供應商提供了列式壓縮的機制。

NoSQL 數據存儲

這類數據庫如此之多,以至于很難真正對其進行一般性的分類,但我會嘗試通過描述五種主要的“類型”來進行分類:鍵值、文檔、圖、Elastic Search 和時間序列。NoSQL 數據庫的共同點是它們都設計為可以在多個服務器之間水平擴展,使用由“網關”節點管理的索引和分片鍵。幾乎所有 NoSQL 數據存儲都是基于這一概念,并應用某種程度的數據結構、索引或存儲策略,以進一步為某些使用場景提供特定的優勢。

它們通常在需要能夠同時讀取和寫入大量數據的情況下使用。這與傳統數據庫不同,后者通常只能調整為擅長其中之一(再次強調,這是在非常寬泛的術語下)。值得注意的是,NoSQL 是指這些數據庫不使用 SQL 作為查詢語言,并不意味著對傳統 SQL 的拒絕。

你需要記住的是,沒有 SQL 兼容性,大多數這些數據庫無法在其引擎內部轉換數據。你必須將數據提取到其他地方,編寫一些代碼,然后將轉換后的數據放置到你需要的地方。幾乎所有的 NoSQL 數據庫也都缺乏 ACID 兼容性,而是依賴于“最終一致性”。從高層次上看,這意味著不同的人查詢完全相同的數據可能會看到不同的值。你也無法直接在這些數據庫中連接數據。

鍵值

這些基本上提供了一種非常簡單的方法來存儲和檢索二進制數據。對于每條記錄,你定義它的鍵并存儲一個值。通常人們會創建大的編程對象,序列化它們,然后存儲起來。這些例子包括 OracleNoSQL 和 Berkeley DB、Dynamo和 Riak。我也把 Cassandra 放在這個組里,但實際上,它在每個值內提供了更多的結構,而不僅僅是一個開放的二進制存儲。這可以用于存儲類似視頻游戲用戶狀態的東西。

文檔存儲

這些與鍵值存儲相似,但區別在于值不僅僅是簡單的二進制對象,而是數據背后有更多的結構。最常見的是數據以 JSON 格式存儲,少數使用 XML。同樣,對于每個鍵,你將檢索文檔值。文檔通常是很大的對象,通常是逐個訪問的。這些適用于存儲具有一定結構的數據,如法律文件或你網站上的整個在線個人資料。

圖形

這與鍵值和文檔存儲有所不同,這些數據庫旨在創建“圖”形式的數據。這基本上意味著你可以定義不同數據點之間非常復雜的關系。你還可以輕松地遍歷定義了關系的數據,即使它是許多節點之外的數據。可以將其視為社交網絡,其中你有朋友、興趣、簽到、喜歡等,并希望定義這些事物之間的關系然后查詢它們。例子包括 Neo4j 和 SPARQL。

彈性搜索

這種類型的 NoSQL 數據庫往往因對其用途的誤解而受到很多關注。最基本來說,這些數據存儲索引“單詞”,并提供類似于在 Google 中輸入內容的搜索功能。它們非常擅長基于關鍵字搜索在非常大的分布式數據集中查找東西,這是一種“企業搜索”。創建索引需要前期投入,而且它們并不適合執行大量數據掃描的操作(即:分析工作負載)。例子包括 Apache Solr、Elasticsearch 和 Kibana。

時間序列

這些數據存儲基于相同的索引和分片鍵的基本原理。然而,不同之處在于時間戳總是連接鍵的一部分。記錄僅使用“插入”操作追加。這種平臺的主要使用場景是為數據用例提供持久化的數據存儲,其中你主要希望以趨勢的形式檢索數據。例如,具有唯一 ID 的傳感器不斷流式傳輸數據。任何給定唯一 ID 的數據都存儲在同一節點上,并按最近的時間戳排序。這使得針對特定 ID 在特定時間點或時間范圍內檢索數據變得高效。許多這樣的數據存儲還根據時間序列提供了額外的功能,如匯總匯總、基于時間的聚合和視覺趨勢分析。例子包括 Druid、InfluxDB 和 OpenTSDB。我也可以強烈認為應該把 HBase 歸類到這里。

 

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0