HBase是一個分布式、按列存儲的數據庫。它可以用于存儲海量數據,并提供高讀寫性能。近年來隨著JSON的流行,越來越多的應用選擇將數據以JSON的格式進行存儲。下面介紹如何在HBase中存儲JSON數據。
我們可以將JSON中的每一個字段都映射到HBase表中的一個列(column)中。以一個存儲用戶信息的JSON為例:
{
"user_id" : "12345",
"name" : "Alice",
"age" : 30,
"gender" : "female"
}
對應的HBase表結構如下:
ROW KEY | user_id
--------------------------------------
info:name | Alice
info:age | 30
info:gender | female
其中ROW KEY為user_id,表示以該字段作為主鍵存儲數據。info:name、info:age、info:gender分別為列族名,表示這幾個列屬于同一個列族。HBase中的列族是邏輯概念,不會直接存儲到磁盤上,而是和同一個列族的所有列一起存儲在一起。
使用Java操作HBase可以通過以下代碼存儲JSON數據:
String tableName = "user_info";
HTable table = new HTable(conf, tableName);
String rowKey = jsonObject.getString("user_id");
Put put = new Put(Bytes.toBytes(rowKey));
put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes(jsonObject.getString("name")));
put.add(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes(jsonObject.getString("age")));
put.add(Bytes.toBytes("info"), Bytes.toBytes("gender"), Bytes.toBytes(jsonObject.getString("gender")));
table.put(put);
table.close();
以上代碼將JSON數據存儲到HBase表user_info中,以user_id作為主鍵。其中,Bytes.toBytes方法將字符串轉化為byte數組,方便在HBase中進行存儲。
在讀取JSON數據時,使用Get類獲取對應row key的數據即可。例如:
Get get = new Get(Bytes.toBytes(rowKey));
Result result = table.get(get);
byte[] nameBytes = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
String name = Bytes.toString(nameBytes);
以上代碼將從HBase表中獲取row key為12345的數據,并獲取name字段的值,轉化為字符串類型。