2013-04-26 140 views
1

我是Hbase dbms的新手。 在嘗試hbase的命令行shell時,我發現我可以讀取rowkey,col family和col限定符,因爲它們是在String中打印出來的,但是該值是以十六進制格式(或類似的東西)打印的。 這背後的確切概念是什麼?Hbase是否以十六進制格式存儲數據?

HBase的(主):045:0 *掃描 'TestTable的' ROW COLUMN + CELL
19992柱=信息:ismember,時間戳= 1366957536788,值= \ X00

回答

2

No..Hbase存儲一切如一個「字節數組」。通過這樣做,它可以讓我們無需大驚小怪地存儲任何類型的數據。例如,假設您必須將產品相關數據存儲到您的hbase表中,比如ID,品牌,國家,價格等。要存儲每個參數,您必須事先關注每個參數的各個數據類型這肯定會增加一些開銷。與RDBMS不同的是,hbase在創建表時並不要求這一切。因此,即使這些參數的數據類型明天發生變化,或者您決定添加一些參數(使用一些新的數據類型),您所要做的就是將值包裝在Bytes.ToBytes()中並將其推送到您的表中。所有這些使插入更快。

另外,與以原始格式存儲相同值相比,有時以序列化字節[]形式存儲值可以節省幾個字節。當您處理BigData時,這種小額儲蓄變得相當重要。

因此,其背後的概念是,Hbase將everthing存儲爲byte []以使事情更快,並使存儲更高效,從而將內部數據結構的開銷降到最低。

希望這回答你的問題。

+0

好的..謝謝你的回答,但是這仍然讓我想起了我原來的問題。如何解釋來自hbase shell的字節數組。從Java API中,我可以檢索數據並查看它是否按預期正確存儲..但是命令行呢?它的所有十六進制字符在o/p。請幫助這裏。 – 2013-04-29 10:26:27

+0

您使用的是哪個版本?您可能會發現這個JIRA有幫助:https://issues.apache.org/jira/browse/HBASE-6592 .. – Tariq 2013-04-29 11:09:44

+0

我使用的是0.94.6.1版本。 – 2013-04-29 12:20:22