国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

慕課網(wǎng)_《HBase 存儲(chǔ)原理剖析》學(xué)習(xí)總結(jié)

trigkit4 / 550人閱讀

摘要:慕課網(wǎng)存儲(chǔ)原理剖析學(xué)習(xí)總結(jié)時(shí)間年月日星期一說明本文部分內(nèi)容均來自慕課網(wǎng)。每一列簇包含多個(gè)列列標(biāo)識(shí)符。每一列數(shù)據(jù)包含了版本和值版本。

慕課網(wǎng)《HBase 存儲(chǔ)原理剖析》學(xué)習(xí)總結(jié)

時(shí)間:2018年06月11日星期一

說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com

教學(xué)源碼:無

學(xué)習(xí)源碼:https://github.com/zccodere/s...

第一章:課程介紹 1-1 課程介紹

課程目標(biāo)

HBase的存儲(chǔ)模式

HBase數(shù)據(jù)表解析

HBase存儲(chǔ)設(shè)計(jì)

HBase數(shù)據(jù)存取解析

第二章:存儲(chǔ)模式 2-1 存儲(chǔ)模式

行式存儲(chǔ)與列式存儲(chǔ)介紹

行式存儲(chǔ)與列式存儲(chǔ)特點(diǎn)

行式存儲(chǔ)

維護(hù)大量的索引

存儲(chǔ)成本高

不能夠做到線性擴(kuò)展

隨機(jī)讀取效率非常高

對(duì)事務(wù)的支持非常好

列式存儲(chǔ)

根據(jù)同一列數(shù)據(jù)的相似性原理,利于對(duì)數(shù)據(jù)進(jìn)行壓縮

存儲(chǔ)成本低

由于每列數(shù)據(jù)分開存儲(chǔ),可以并行查找多列的數(shù)據(jù)

行式存儲(chǔ)與列式存儲(chǔ)場(chǎng)景

行式存儲(chǔ)

表與表之間有關(guān)聯(lián)關(guān)系,數(shù)據(jù)量不大(小于千萬量級(jí))

強(qiáng)事務(wù)關(guān)聯(lián)的特性

列式存儲(chǔ)

對(duì)于單列或者相對(duì)比較少的列獲取頻率較高

針對(duì)多列查詢,使用并行處理的查詢

利于數(shù)據(jù)壓縮和線性擴(kuò)展的存儲(chǔ)

事務(wù)使用率不高,讀取的場(chǎng)景頻率不高,同時(shí)數(shù)據(jù)量非常大

隨機(jī)更新某一行的頻率不高

列簇式存儲(chǔ):概念

列簇(多個(gè)數(shù)據(jù)列的組合),HBase表中的每個(gè)列都?xì)w屬于某個(gè)列簇

列簇是表的schame的一部分,但是列并不是

創(chuàng)建表時(shí),需要給出列簇的名稱,不需要給出列的名稱

列名都是以列簇作為前綴

訪問控制磁盤和內(nèi)存的使用統(tǒng)計(jì)都是在列簇層面進(jìn)行

HBase準(zhǔn)確的說是列簇?cái)?shù)據(jù)庫,而不是列數(shù)據(jù)庫

列簇?cái)?shù)據(jù)庫將列組織為列簇,每列都必須是某個(gè)列簇的一部分

訪問數(shù)據(jù)的單元也是列

HBase表的組成

Table = RowKey + Family + Column + Timestamp + Value

RowKey :HBase中用RowKey去標(biāo)識(shí)唯一的一行數(shù)據(jù),一行數(shù)據(jù)中包含多個(gè)列簇

Family:多個(gè)列簇。每一列簇包含多個(gè)列

Column:列標(biāo)識(shí)符。每一列數(shù)據(jù)包含了版本和值

Timestamp:版本。可以理解為時(shí)間戳,也可以理解為一個(gè)數(shù)據(jù)的版本

Value:數(shù)據(jù)值。數(shù)據(jù)本身的值

HBase數(shù)據(jù)存儲(chǔ)的模式

(Table, RowKey, Family, Column, Timestamp)-> Value

其實(shí)就是HBase表反過來看的樣子

【重點(diǎn)】更抽象一點(diǎn),其實(shí)HBase表數(shù)據(jù)就是Key-Value結(jié)構(gòu)的

圖解

列簇式存儲(chǔ):列數(shù)據(jù)屬性

HBase重要特性:列數(shù)據(jù)版本的概念,默認(rèn)一列數(shù)據(jù)可以保存三個(gè)版本

列簇式存儲(chǔ):數(shù)據(jù)存儲(chǔ)原型

2-2 存儲(chǔ)示例

示例表定義

示例表數(shù)據(jù)

第三章 表的解析 3-1 建表語句

示例表語句定義

壓縮算法

算法 壓縮率 編碼速度 解碼速度
GZip 13.4% 21MB/s 118MB/s
LZO 20.5% 135MB/s 410MB/s
Snappy 22.2% 172MB/s 409MB/s
3-2 存儲(chǔ)目錄

hbase-site.xml文件中配置或查看存儲(chǔ)目錄的節(jié)點(diǎn)


    hbase.rootdir
    /home/hbase_data

進(jìn)入到HBase系統(tǒng)目錄

.tmp

當(dāng)對(duì)表做創(chuàng)建或刪除操作時(shí),將表移動(dòng)到tmp目錄下,然后再進(jìn)行處理

臨時(shí)交換的表,臨時(shí)存儲(chǔ)一些當(dāng)前需要修改的數(shù)據(jù)結(jié)構(gòu)

WALs

預(yù)寫日志,被HLog實(shí)例管理的WAL文件

可以理解為存儲(chǔ)HBase的日志,HBase分布式數(shù)據(jù)庫系統(tǒng)的操作日志

archive

存儲(chǔ)表的歸檔和快照

HBase在做分割或合并操作完成后,會(huì)將Hfile文件移動(dòng)到該目錄中,然后將之前的Hfile刪除掉

是由Master上的定時(shí)任務(wù)定期去處理,這個(gè)目錄的作用可以簡(jiǎn)單理解為去管理HBase的數(shù)據(jù)

corrupt

用于存放損壞的日志文件,一般是空的

data

HBase存儲(chǔ)數(shù)據(jù)的核心目錄

系統(tǒng)表和用戶表數(shù)據(jù)都存儲(chǔ)在這里

hbase.id

HBase啟動(dòng)運(yùn)行后,是集群中的唯一ID,用來標(biāo)識(shí)HBase進(jìn)程用的

hbase.version

表明了集群的文件格式版本信息

其實(shí)就是表明了Hfile的版本信息

oldWALs

備份WALs中的日志文件

data目錄解析

HBase元信息表

Row Key Value
table、key、time region server
第四章:存儲(chǔ)設(shè)計(jì) 4-1 存儲(chǔ)思想

HBase中的LSM存儲(chǔ)思想

什么是LSM樹

LSM日志結(jié)構(gòu)合并樹,有兩個(gè)或兩個(gè)以上存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)組成的,每一個(gè)數(shù)據(jù)結(jié)構(gòu)各自對(duì)應(yīng)自己的存儲(chǔ)介質(zhì)

LSM樹的簡(jiǎn)易模型描述

LSM思想在HBase中的思想

4-2 存儲(chǔ)模塊

HBase數(shù)據(jù)存儲(chǔ)模塊簡(jiǎn)介

RegionServer = Region + Store + MemStore + StoreFile + HFile + HLog

HBase Region解析

什么是Region

每一個(gè)Region都會(huì)存儲(chǔ)于確定的RegionServer上

Region的特點(diǎn)

是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元

Region的數(shù)據(jù)不能低于集群中節(jié)點(diǎn)的數(shù)量

RegionServer對(duì)Region進(jìn)行拆分

盡量讓Row key分散到不同的Region

HBase HFile解析

Store + MemStore + StoreFile

Store與列簇是一對(duì)一的關(guān)系

MemStore是一個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu),保存修改的數(shù)據(jù)

StoreFile是由內(nèi)存數(shù)據(jù)寫入到文件后形成的

> ![image](https://note.youdao.com/yws/api/personal/file/BC358BAF87A44E01AC1E29C9742DF6F2?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HFile 文件

是HBase存儲(chǔ)數(shù)據(jù)文件的最基本的組織形式

底層是Hadoop的二進(jìn)制格式文件

是用戶數(shù)據(jù)的實(shí)際載體,存儲(chǔ)Key-Value的數(shù)據(jù)

Scanned block section:會(huì)被讀取,主要是存儲(chǔ)用戶數(shù)據(jù)

Nonscanned block section:不會(huì)被讀取,主要包含元數(shù)據(jù)塊

Load-on-open section:RegionServer啟動(dòng)時(shí)加載,主要是HFile的元數(shù)據(jù)

Trailer:HFile的基本信息,HFile元數(shù)據(jù)的一部分

> ![image](https://note.youdao.com/yws/api/personal/file/27F88E086AC5419F83F5BC9473060F52?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

Data Block

HBase中數(shù)據(jù)的最基本的存儲(chǔ)單元

是實(shí)際存儲(chǔ)用戶數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)

包含很多Key-Value

> ![image](https://note.youdao.com/yws/api/personal/file/6C175A6EF8D546FCB02CED9E10B364DE?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HBase WAL解析

簡(jiǎn)介介紹WAL(預(yù)寫日志)

WAL最重要的功能就是災(zāi)難恢復(fù)

WAL解決了什么問題:HA(高可用)問題

怎么解決:遠(yuǎn)程備份

> ![image](https://note.youdao.com/yws/api/personal/file/993E28018DCA4AD7AABDDF494154F91B?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HLog

WAL是通過HLog模塊實(shí)現(xiàn)的

HLog是什么:HLog是實(shí)現(xiàn)WAL的類,一個(gè)RegionServer對(duì)應(yīng)一個(gè)HLog實(shí)例

> ![image](https://note.youdao.com/yws/api/personal/file/C7E652C51E564E0A811C1F23FFBB2F0E?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HLogKey

WAL使用Hadoop的序列化文件將記錄存儲(chǔ)為Key-Value的數(shù)據(jù)集,Key就是HLog的Key

> ![image](https://note.youdao.com/yws/api/personal/file/3F4EADB35EB74A66B9CBD736C7989B07?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HLogSyncer

是日志同步刷寫類

> ![image](https://note.youdao.com/yws/api/personal/file/A9A568573E9042C3BFE4F33042F7DB2B?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HLogRoller

特點(diǎn)的時(shí)間去滾動(dòng)日志,形成新的日志,避免單個(gè)日志文件過大

根據(jù)HLog的序列化的number對(duì)比已經(jīng)持久化的HFile的序列號(hào),刪除舊的,不需要的日志

> ![image](https://note.youdao.com/yws/api/personal/file/F1AB5E58BBAE435FA5F35957EE3276C3?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HBase Compaction解析

什么是Compaction

Compaction會(huì)從一個(gè)Region的Store中選擇一些HFile文件進(jìn)行合并

為什么要Compaction

隨著系統(tǒng)不停的刷寫,會(huì)導(dǎo)致存儲(chǔ)目錄中有過多的數(shù)據(jù)文件

Compaction分類

MinorCompaction:小合并

MajorCompaction:大合并

> ![image](https://note.youdao.com/yws/api/personal/file/053CA3350B764F60B0A2DB01D841FAEA?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

Compaction觸發(fā)時(shí)機(jī)

MemStore 內(nèi)存數(shù)據(jù)寫入到硬盤上

> ![image](https://note.youdao.com/yws/api/personal/file/C9D3EA024E1848178E3879F80C1536A0?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)
4-3 存取解析

HBase數(shù)據(jù)存儲(chǔ)流程解析

HBase Client

請(qǐng)求Zookeeper,確定 MetaTable所在RegionServer的地址

在根據(jù)RowKey找到歸屬的RegionServer

HBase Client Put(Delete)數(shù)據(jù),提交到RegionServer

> ![image](https://note.youdao.com/yws/api/personal/file/FCE4E73CC9774EFEA2C0A060C142CD61?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HBase Server

Region Server 去獲取行鎖,Region更新共享鎖

寫HLog,WAL

寫緩存,MemStore

將日志同步到HDFS

寫滿緩存后,啟動(dòng)異步線程將數(shù)據(jù)寫入到硬盤上

可能觸發(fā)Compaction或拆分

> ![image](https://note.youdao.com/yws/api/personal/file/C6724DFE164448E694FF61FE657CE68F?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HBase數(shù)據(jù)獲取流程解析

HBase Client

請(qǐng)求Zookeeper,確定 MetaTable所在RegionServer的地址

去對(duì)應(yīng)的RegionServer地址拿到對(duì)應(yīng)數(shù)據(jù)

> ![image](https://note.youdao.com/yws/api/personal/file/31D60278867C4C27BDCA35AEBD57436E?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)

HBase Server

Region Server 構(gòu)建RegionScanner準(zhǔn)備進(jìn)行檢索

有多少個(gè)列簇就構(gòu)建多少個(gè)StoreScanner,用于對(duì)確定的列簇?cái)?shù)據(jù)檢索

> ![image](https://note.youdao.com/yws/api/personal/file/8840F5554C354B39A14D00E2B39CBF5C?method=download&shareKey=416cc5492bf4a2243d657a2c6999b735)
4-4 數(shù)據(jù)存取

HBase數(shù)據(jù)存取api介紹

新增api
void put(Put put)throws IOException

Put構(gòu)造方法
Put(byte[] row)
Put(byte[] row,long ts)

填充值
Put add(byte[] family,byte[] qualifier,byte[] value)
Put add(byte[] family,byte[] qualifier,long timestamp,byte[] value)
Put add(KeyValue kv)throws IOException

原子檢查寫
boolean checkAndPut(add(byte[] row,byte[] family,byte[] qualifier,byte[] value,put))

刪除api
void delete(Delete delete)throws IOException

構(gòu)造方法
Delete(byte[] row)

填充值
Delete deleteFamily(byte[] family)
Delete deleteColumns(byte[] family,byte[] qualifier)
Delete deleteColumns(byte[] family,byte[] qualifier,long timestamp)

原子檢查刪除
boolean checkAndDelete(byte[] row,byte[] family,byte[] qualifier,byte[] value,Delete delete)throws IOException

獲取api
Result get(Get get)throws IOException

構(gòu)造方法
Get(byte[] row)

填充值
Get addFamily(byte[] family)
Get addColumn(byte[] family,byte[] qualifier)
Get setTimeRange(long minStamp,long maxStamp)throws IOException
Get setTimeStamp(long timestamp)
Get setMaxVersions()
Get setMaxVersions(int maxVersions)throws IOException
第五章:案例演示 5-1 案列演示

創(chuàng)建名為hbase-demo的maven工程pom如下



    4.0.0

    com.myimooc
    hbase-demo
    1.0-SNAPSHOT

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.1.RELEASE
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.yaml
            snakeyaml
            1.10
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            jdk.tools
            jdk.tools
            1.7
            system
            ${JAVA_HOME}/lib/tools.jar
        
        
            com.spring4all
            spring-boot-starter-hbase
            1.0.0.RELEASE
        
        
            com.alibaba
            fastjson
            1.2.45
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

1.編寫User類

package com.myimooc.hbase.demo.dto;

/**
 * 
* 標(biāo)題: 用戶表
* 描述: 用戶表
* * @author zc * @date 2018/06/21 */ public class User { /** * 行鍵 */ private String row; /** * 基礎(chǔ)信息 */ private BaseInfo baseInfo; /** * 其他信息 */ private OtherInfo otherInfo; public User() { } public User(String row, BaseInfo baseInfo, OtherInfo otherInfo) { this.row = row; this.baseInfo = baseInfo; this.otherInfo = otherInfo; } @Override public String toString() { return "User{" + "row="" + row + """ + ", baseInfo=" + baseInfo + ", otherInfo=" + otherInfo + "}"; } public String getRow() { return row; } public void setRow(String row) { this.row = row; } public BaseInfo getBaseInfo() { return baseInfo; } public void setBaseInfo(BaseInfo baseInfo) { this.baseInfo = baseInfo; } public OtherInfo getOtherInfo() { return otherInfo; } public void setOtherInfo(OtherInfo otherInfo) { this.otherInfo = otherInfo; } /** * 使用內(nèi)部類表示 b 列簇 基礎(chǔ)信息 */ public static class BaseInfo { /** * 名稱 */ private String name; /** * 年齡 */ private Integer age; /** * 性別 */ private String sex; public BaseInfo() { } public BaseInfo(String name, Integer age, String sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } /** * 使用內(nèi)部類表示 o 列簇 其他信息 */ public static class OtherInfo { /** * 電話 */ private String phone; /** * 地址 */ private String address; public OtherInfo() { } public OtherInfo(String phone, String address) { this.phone = phone; this.address = address; } @Override public String toString() { return "OtherInfo{" + "phone="" + phone + """ + ", address="" + address + """ + "}"; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } }

2.編寫UserRowMapper類

package com.myimooc.hbase.demo.mapper;

import com.myimooc.hbase.demo.dto.User;
import com.spring4all.spring.boot.starter.hbase.api.RowMapper;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * 
* 標(biāo)題: 用戶表ORM
* 描述: 用戶表ORM
* * @author zc * @date 2018/06/21 */ public class UserRowMapper implements RowMapper { private static byte[] FAMILY_B = "b".getBytes(); private static byte[] FAMILY_B_NAME = "name".getBytes(); private static byte[] FAMILY_B_AGE = "age".getBytes(); private static byte[] FAMILY_B_SEX = "sex".getBytes(); private static byte[] FAMILY_O = "o".getBytes(); private static byte[] FAMILY_O_PHONE = "phone".getBytes(); private static byte[] FAMILY_ADDRESS = "address".getBytes(); @Override public User mapRow(Result result, int i) throws Exception { User.BaseInfo baseInfo = new User.BaseInfo( Bytes.toString(result.getValue(FAMILY_B, FAMILY_B_NAME)), Bytes.toInt(result.getValue(FAMILY_B, FAMILY_B_AGE)), Bytes.toString(result.getValue(FAMILY_B, FAMILY_B_SEX))); User.OtherInfo otherInfo = new User.OtherInfo( Bytes.toString(result.getValue(FAMILY_O, FAMILY_O_PHONE)), Bytes.toString(result.getValue(FAMILY_O, FAMILY_ADDRESS))); return new User(Bytes.toString(result.getRow()),baseInfo,otherInfo); } }

3.編寫HbaseService類

package com.myimooc.hbase.demo.service;

import org.apache.hadoop.hbase.client.Mutation;

import java.util.List;

/**
 * 
* 標(biāo)題: HBase服務(wù)
* 描述: HBase服務(wù)
* * @author zc * @date 2018/06/21 */ public interface HbaseService { /** * 查詢指定行鍵的表數(shù)據(jù) * @param tableName 表名 * @param row 行鍵 * @return 數(shù)據(jù) */ T findByRow(String tableName,String row); /** * 查詢指定行鍵之間的表數(shù)據(jù) * @param tableName 表名 * @param startRow 開始行鍵 * @param endRow 結(jié)束行鍵 * @return 數(shù)據(jù)集合 */ List findByStartEndRow(String tableName,String startRow,String endRow); /** * 保存或修改數(shù)據(jù) * @param tableName 表名 * @param datas 數(shù)據(jù)集合 * @return 數(shù)據(jù)集合 */ List saveOrUpdate(String tableName,List datas); }

4.編寫UserHbaseServiceImpl類

package com.myimooc.hbase.demo.service.impl;

import com.myimooc.hbase.demo.dto.User;
import com.myimooc.hbase.demo.mapper.UserRowMapper;
import com.myimooc.hbase.demo.service.HbaseService;
import com.spring4all.spring.boot.starter.hbase.api.HbaseTemplate;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 
* 標(biāo)題: 用戶服務(wù)
* 描述: 用戶服務(wù)
* * @author zc * @date 2018/06/22 */ @Service public class UserHbaseServiceImpl implements HbaseService { @Autowired private HbaseTemplate hbaseTemplate; @Override public User findByRow(String tableName, String row) { return hbaseTemplate.get(tableName, row, new UserRowMapper()); } @Override public List findByStartEndRow(String tableName, String startRow, String endRow) { Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(endRow)); return hbaseTemplate.find(tableName, scan, new UserRowMapper()); } @Override public List saveOrUpdate(String tableName, List datas) { hbaseTemplate.saveOrUpdates(tableName, datas); return datas; } }

5.編寫application.properties

# Zookeeper 地址
spring.data.hbase.quorum=192.168.0.104:2181
# HBase 存儲(chǔ)路徑
spring.data.hbase.rootDir=hdfs://zccoder.com:9000/hbase/
# HBase 在 Zookeeper上的根節(jié)點(diǎn)名稱
spring.data.hbase.nodeParent=/hbase

6.編寫Application類

package com.myimooc.hbase.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }

}

7.編寫UserHbaseServiceImplTest類

package com.myimooc.hbase.demo.service;

import com.alibaba.fastjson.JSON;
import com.myimooc.hbase.demo.Application;
import com.myimooc.hbase.demo.dto.User;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;

/**
 * 
* 標(biāo)題: 單元測(cè)試類
* 描述: 單元測(cè)試類
* * @author zc * @date 2018/06/22 */ @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE,classes = Application.class) public class UserHbaseServiceImplTest { @Autowired private HbaseService service; /** * 數(shù)據(jù)表名稱 */ private String tableName; @Before public void init(){ tableName = "demo:user"; } @Test public void testFindByRow(){ System.out.println(JSON.toJSONString(service.findByRow(tableName,"root"))); } @Test public void testFindByStartEndRow(){ System.out.println(JSON.toJSONString(service.findByStartEndRow(tableName,"r","z"))); } @Test public void testSaveOrUpdate(){ List datas = new ArrayList<>(); Put put= new Put(Bytes.toBytes("root")); put.addColumn(Bytes.toBytes("b"),Bytes.toBytes("name"),Bytes.toBytes("imooc")); put.addColumn(Bytes.toBytes("b"),Bytes.toBytes("age"),Bytes.toBytes("18")); put.addColumn(Bytes.toBytes("b"),Bytes.toBytes("sex"),Bytes.toBytes("m")); put.addColumn(Bytes.toBytes("o"),Bytes.toBytes("phone"),Bytes.toBytes("123456789")); put.addColumn(Bytes.toBytes("o"),Bytes.toBytes("address"),Bytes.toBytes("北京市朝陽區(qū)")); datas.add(put); // Delete delete = new Delete(Bytes.toBytes("root")); // datas.add(delete); List results = service.saveOrUpdate(tableName,datas); System.out.println(results); } }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/71392.html

相關(guān)文章

  • 課網(wǎng)_《Hibernate緩存策略》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期二說明本文部分內(nèi)容均來自慕課網(wǎng)。返回對(duì)象不同返回持久化實(shí)體類對(duì)象返回代理對(duì)象。與緩存的關(guān)系不同只緩存,但不使用緩存查詢緩存除外會(huì)使用緩存。 時(shí)間:2017年07月11日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:無 第一章:概述 1-1 概述 課程內(nèi)容 了解緩存 掌握Hibernate一級(jí)緩存的使用 掌握H...

    codergarden 評(píng)論0 收藏0
  • 課網(wǎng)_《SpringMVC攔截器》學(xué)習(xí)總結(jié)

    摘要:攔截器學(xué)習(xí)總結(jié)時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼暫無。攔截器不依賴與容器,過濾器依賴與容器。攔截器只能對(duì)請(qǐng)求起作用,而過濾器則可以對(duì)幾乎所有的請(qǐng)求起作用。共性問題在攔截器中處理,可以減少重復(fù)代碼,便于維護(hù)。 《SpringMVC攔截器》學(xué)習(xí)總結(jié) 時(shí)間:2017年2月18日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...

    calx 評(píng)論0 收藏0
  • 課網(wǎng)_《Redis入門》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。當(dāng)對(duì)應(yīng)的鏈表存在時(shí),從左側(cè)插入數(shù)據(jù)。從右側(cè)插入數(shù)據(jù)。當(dāng)系統(tǒng)在定時(shí)持久化之前出現(xiàn)宕機(jī),還未來得及往硬盤寫入數(shù)據(jù),那數(shù)據(jù)就丟失了。當(dāng)數(shù)據(jù)集過大時(shí),可能會(huì)導(dǎo)致服務(wù)器停止幾百毫秒甚至是秒鐘。 時(shí)間:2017年05月21日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個(gè)人學(xué)習(xí)源碼:https:...

    leanxi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<