91亚洲精品久久久蜜桃网站_超碰91在线__91.xxx.高清在线 国产婷婷一区二区三区_久久精品成人欧美大片_国产97在线 | 中文_亚洲AV无码乱码在线观看性色

目錄
目錄X

GEO基礎知識:Schema標記 / Schema設計原則

Schema創(chuàng)建

HBase schema(模式)可以通過Apache HBase Shell或者Java API Admin來創(chuàng)建或者更新。 進行ColumnFamily(列族)修改時,必須禁用表,例如:

Configuration config = HBaseConfiguration.create();
Admin admin = new Admin(conf);
TableName table = TableName.valueOf("myTable");
admin.disableTable(table);
HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1);
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2);
admin.enableTable(table);

Schema更新

當表或者列族被修改時(比如region大小、block大小),這些更改會在下一次major合并、StoreFiles重新寫入時生效。

Schema設計經(jīng)驗

HBase存在許多種不同的數(shù)據(jù)集,具有不同的訪問模式和服務層級的要求。因此,以下經(jīng)驗法則只是概述。

  • 目標region的大小限制在10GB到50GB之間。

  • 限制cell的大小在10MB之內,如果使用的是mob類型,限制在50MB之內。否則,考慮把cell的數(shù)據(jù)存儲在HDFS中,并在HBase中存儲指向該數(shù)據(jù)的指針。

  • 典型的scheme每張表包含1到3個列族。HBase表設計不應當和RDBMS表設計類似。

  • 對于擁有1或2個列族的表來說,50-100個region是比較合適的。注意region是列族的連續(xù)段。

  • 保持列族名稱盡可能短。每個值都會存儲列族的名稱(忽略前綴編碼)。它們不應該像在典型的RDBMS中一樣具有自我記錄和描述性。

  • 如果正在存儲基于時間的機器數(shù)據(jù)或者日志信息,并且rowkey是基于設備ID或者服務ID+時間,最終可能會出現(xiàn)這樣一種情況,即更舊的數(shù)據(jù)region在某個時間段后永遠不會有額外寫入。在這種情況下,最終會存在少量的活動region和大量不會再有新寫入的region。

HBase列族數(shù)量

HBase目前不適合兩個或三個列族以上的任何項目,因此應保持模式中的列族數(shù)量較少。目前,flushing和compactions是基于每個region進行的,因此如果一個列族承載大量數(shù)據(jù)帶來flushing,則即使它們攜帶的數(shù)據(jù)量很小,相鄰的族也將被flushing。當存在許多列族時,flushing和compactions可能會產(chǎn)生一堆不必要的I/O。

如果單個表中存在多個列族,請注意基數(shù)(即行數(shù))不用相差太大。如果 ColumnFamilyA有100萬行而ColumnFamilyB有10億行,則ColumnFamilyA 的數(shù)據(jù)可能會分布在許多區(qū)域(和RegionServers)中。這使得 ColumnFamilyA的大規(guī)模掃描效率降低。

版本數(shù)

最大版本數(shù)

HBase通過HColumnDescriptor給各列族配置要存儲的最大行版本數(shù)。最大版本的默認值為1。這是一個重要的參數(shù),因為HBase不會覆蓋一個值,只會時間戳來區(qū)分值的不同版本。早期的版本會在major compaction過程中被刪除。根據(jù)應用需求,可以需要增加或減少最大版本的數(shù)量。 不建議將最大版本的數(shù)量設置為非常高的級別(例如,數(shù)百或更多),除非這些舊值非常珍貴,因為這將大大增加StoreFile的大小。

最小版本數(shù)

與最大行版本數(shù)一樣,HBase通過HColumnDescriptor按列族配置要保留的最小行版本數(shù)。最小版本的默認值為0,表示該功能已禁用。行版本參數(shù)的最小數(shù)量與生存時間參數(shù)一起使用,并且可以與行版本參數(shù)的數(shù)量組合,以允許配置諸如“保留最后T分鐘的數(shù)據(jù),最多N個版本,但至少保留M個版本”(其中M是最小行版本數(shù)的值,M<N)。

支持的數(shù)據(jù)類型

HBase通過Put和Result操作支持“byte-in/bytes-out”接口,因此任何可以轉換為字節(jié)數(shù)組的都可以存儲為值。輸入可以是字符串、數(shù)字、復雜對象、圖像,只要它們可以呈現(xiàn)為字節(jié)。 值的大小存在實際限制。HBase中的所有行都符合數(shù)據(jù)模型,包括版本控制。在進行設計時要考慮到這一點,以及列族的塊大小。

生存時間

列族可以設置TTL(Time To Live)長度(以秒為單位),HBase將在超時后自動刪除行。TTL設置適用于行的所有版本。在HBase中TTL時間為UTC時區(qū)。 僅包含過期的行的存儲文件,會在minor compaction時刪除。將hbase.store.delete.expired.storefile設置為false可禁用此功能。將最小版本數(shù)設置為0以外的值也會禁用此功能。

最新版本的HBase還支持按每個cell(單元)設置生存時間。cell TTL使用Mutation#setTTL作為變更請求的一個屬性提交。如果設置了TTL屬性,則它將應用于被操作更新的所有cell。cell TTL處理和列族TTL之間存在兩個顯著差異:

  • cell TTL以毫秒而不是秒為單位表示。

  • cell TTL不能超過列族TTL設置的有效時間。

發(fā)布時間:2025-10-31 瀏覽次數(shù): 作者: 來源:本站原創(chuàng)