com.nhncorp.neptune.client
Class NTable

java.lang.Object
  extended by com.nhncorp.neptune.client.NTable
All Implemented Interfaces:
Constants

public class NTable
extends java.lang.Object
implements Constants

테이블의 데이터를 관리하기 위해 클라이언트에서 사용되는 메인 클래스
하나의 NTable 객체는 하나의 테이블에 대한 처리만 수행한다.
NTable 객체는 Thread safe를 보장하지 않는다. 따라서 동시에 여러 테이블 또는 여러개의 rowKey에 대해 트렌젝션을 수행할 경우 별도의 NTable 객체를 이용해야 한다.


Field Summary
 
Fields inherited from interface com.nhncorp.neptune.common.Constants
BATCH_RECEIVER_SUCCESS, BATCH_UPLOAD, CHANGELOG_SERVER, COMPACTION, DELETEED, END_RECEIVE_ROW, GROUPS, INDEX_INTERVAL_LENGH, INSERTED, LOG_OP_ADD_COLUMN_VALUE, LOG_OP_CREATE_ROW, LOG_OP_DELETE_COLUMN_VALUE, LOG_OP_MODIFY_META, MAP_RECORD_COLUMN, MAP_RECORD_ROW, MASTER, MASTER_SERVER, MAX_KEY_LENGTH, MAX_VALUE, META_COLUMN_NAME_TABLETINFO, MIN_VALUE, NEPTUNE, OPEN_SCANNER, PATH_SCHEMA, PIPE_CL_FILE_NAME, PROCESS, ROOT_TABLET, SCANNER_END, SCANNER_OPEN_FAIL, SCANNER_OPEN_SUCCESS, SCHEMA_DESCRIPTION_FILE_NAME, SCHEMA_INFO_FILENAME, SERVER, SPLIT, SPLIT_INFO, SPLIT_STORE, SUPERGROUP, TABLE_DROP, TABLE_LOCK, TABLE_NAME_META, TABLE_NAME_ROOT, TABLET_ALIVE, TABLET_ASSIGN, TABLET_AVAIL, TABLET_CREATED, TABLET_DROP, TABLET_FAIL, TABLET_STOP_MARK, TABLETSERVER_SPLIT, TEST_MODE, UPLOAD_END, UPLOAD_FAIL, UPLOAD_START_ROW, UPLOADER, USERS
 
Method Summary
 void addColumn(java.lang.String addedColumnName)
          테이블에 컬럼을 추가한다.
 TabletInfo addTablet(Row.Key endRowKey)
          테이블에 새로운 Tablet을 추가한다
 void clear()
           
static void createTable(NConfiguration conf, TableSchema tableSchema)
          테이블을 생성한다.
static void createTable(NConfiguration conf, TableSchema tableSchema, Row.Key[] endRowKeys)
          NTable에 설정된 TableInfo를 이용하여 테이블을 생성한다.
 TableSchema descTable()
          테이블의 상세 정보를 조회한다.
 void dropTable()
          테이블을 drop한다.
static void dropTable(NConfiguration conf, java.lang.String tableName)
          테이블을 drop 한다.
static boolean existsTable(NConfiguration conf, java.lang.String tableName)
          테이블이 존재하는지 여부를 확인한다.
 boolean get(java.util.Collection<Row.Key> rowKeys, java.util.List<CellFilter> cellFilters, AsyncDataReceiver dataReceiver, int numOfThread, int timeout)
          async하게 데이터를 조회할 경우 사용한다.
 boolean get(java.util.Collection<Row.Key> rowKeys, java.lang.String[] columnNames, AsyncDataReceiver dataReceiver, int numOfThread, int timeout)
          async하게 데이터를 조회할 경우 사용한다.
 Row get(Row.Key rowKey)
          row에 있는 모든 컬럼, 컬럼내의 모든 데이터를 조회한다.
 Row get(Row.Key rowKey, java.lang.String columnName)
          데이터를 조회한다.
 Row get(Row.Key rowKey, java.lang.String[] columnNames)
          데이터를 조회한다.
 byte[] get(Row.Key rowKey, java.lang.String columnName, Cell.Key cellKey)
          데이터를 조회한다.
 Row get(RowFilter rowFilter)
          Filter 조건에 맞는 데이터를 조회한다.여러 row에 걸친 작업은 수행하지 않는다.
 java.lang.String[] getColumnsArray()
          테이블의 컬럼 목록을 반환한다.
 NConfiguration getConf()
          Neptune configuration 객체를 반환한다.
 Row.Key[] getSplitedRowKeyRanges(TabletInfo tabletInfo, int splitPerTablet)
           
 java.lang.String getTableName()
          현재 오픈되어 있는 테이블명을 반환한다.
 TableSchema getTableSchema()
           
 java.lang.String[] getTabletAllActions(TabletInfo tabletInfo)
          Tablet에 현재 수행중인 작업을 조회한다.
 TabletInfo getTabletInfo(java.lang.String tabletName)
           
 TabletReport getTabletReport(TabletInfo tabletInfo)
          Tablet의 현재 상황을 모니터링한다.
 boolean hasValue(java.lang.String columnName, Row.Key rowKey)
          특정 rowkey의 값이 존재하는지 여부를 조회한다.
 TabletInfo[] listTabletInfos()
          특정 테이블의 Tablet 목록을 가져온다.
static TabletInfo lookupTargetTablet(NConfiguration conf, java.lang.String tableName, Row.Key rowKey)
          특정 Row를 서비스하는 Tablet을 찾는다.
 TabletInfo lookupTargetTablet(Row.Key rowKey)
          BatchUpload를 종료한다.
static void main(java.lang.String[] args)
           
 DirectUploader openDirectUploader(java.lang.String[] columnNames)
          대량의 데이터를 업로딩하는 BatchUploader를 오픈한다.
static NTable openTable(NConfiguration conf, java.lang.String tableName)
          NTable 객체를 가져온다.
static NTable openTable(NConfiguration conf, TableSchema tableSchema, boolean create)
          NTable 객체를 가져온다.
 void put(Row row)
          테이블에 데이터를 저장한다.
 void put(Row row, boolean systemTimestamp)
           
 void remove(Row.Key rowKey, java.lang.String columnName, Cell.Key cellKey)
          특정 cellKey에 해당하는 값을 삭제한다.
 void removeRow(Row.Key rowKey, long timestamp)
          row의 모든 컬럼 데이터를 삭제한다.
 void truncateColumn(java.lang.String columnName)
          테이블의 특정 컬럼의 모든 데이터를 삭제한다.
 void truncateTable()
          테이블의 모든 데이터를 삭제한다.
 void truncateTable(boolean clearPartitionInfo)
          테이블의 모든 데이터를 삭제한다.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

openTable

public static NTable openTable(NConfiguration conf,
                               java.lang.String tableName)
                        throws java.io.IOException
NTable 객체를 가져온다. 이미 생성되어 있는 테이블에 대해서만 NTable 객체를 가져올 수 있으며 테이블이 존재하지 않는 경우 null을 반환한다.

Parameters:
conf -
tableName -
Returns:
Throws:
java.io.IOException

openTable

public static NTable openTable(NConfiguration conf,
                               TableSchema tableSchema,
                               boolean create)
                        throws java.io.IOException
NTable 객체를 가져온다. 이미 생성되어 있는 테이블에 대해서만 NTable 객체를 가져올 수 있으며 테이블이 존재하지 않는 경우 Exception이 발생한다.

Parameters:
conf -
tableSchema -
create - table이 존재하지 않는 경우 생성한다.
Returns:
Throws:
java.io.IOException

existsTable

public static boolean existsTable(NConfiguration conf,
                                  java.lang.String tableName)
                           throws java.io.IOException
테이블이 존재하는지 여부를 확인한다.

Parameters:
conf -
tableName -
Returns:
Throws:
java.io.IOException

put

public void put(Row row)
         throws java.io.IOException
테이블에 데이터를 저장한다.

Parameters:
row -
Throws:
java.io.IOException

put

public void put(Row row,
                boolean systemTimestamp)
         throws java.io.IOException
Throws:
java.io.IOException

removeRow

public void removeRow(Row.Key rowKey,
                      long timestamp)
               throws java.io.IOException
row의 모든 컬럼 데이터를 삭제한다.

Parameters:
timestamp - 삭제처리를 수행하는 timestamp. 동시에 여러 row를 삭제하는 경우 하나의 timestamp내에 여러 건을 처리할 수 있기 때문에 사용자가 지정할 수 있도록 하였음
Throws:
java.io.IOException

remove

public void remove(Row.Key rowKey,
                   java.lang.String columnName,
                   Cell.Key cellKey)
            throws java.io.IOException
특정 cellKey에 해당하는 값을 삭제한다.

Parameters:
rowKey -
columnName -
cellKey -
Throws:
java.io.IOException

hasValue

public boolean hasValue(java.lang.String columnName,
                        Row.Key rowKey)
                 throws java.io.IOException
특정 rowkey의 값이 존재하는지 여부를 조회한다. get() 결과가 null인지를 확인하는 것도 방법이지만 데이터가 많은 경우 성능이 좋지 않기 때문에 해당 rowkey의 값이 하나라도 존재하면 true를 반환한다.

Parameters:
columnName -
rowKey -
Returns:
Throws:
java.io.IOException
java.io.IOException

get

public byte[] get(Row.Key rowKey,
                  java.lang.String columnName,
                  Cell.Key cellKey)
           throws java.io.IOException
데이터를 조회한다.

Parameters:
rowKey -
columnName -
cellKey -
Returns:
데이터가 없는 경우 null 반환
Throws:
java.io.IOException

get

public Row get(Row.Key rowKey)
        throws java.io.IOException
row에 있는 모든 컬럼, 컬럼내의 모든 데이터를 조회한다. 데이터가 많은 경우 과도한 메모리 사용의 문제가 발생할 수 있다. 따라서 데이터의 크기가 정해진 크기 이상인 경우 Exception이 발생한다.

Parameters:
rowKey -
Returns:
데이터가 없는 경우 null 반환
Throws:
java.io.IOException
java.io.IOException

get

public Row get(Row.Key rowKey,
               java.lang.String[] columnNames)
        throws java.io.IOException
데이터를 조회한다.

Parameters:
rowKey -
columnNames -
Returns:
데이터가 없는 경우 null 반환
Throws:
java.io.IOException
java.io.IOException

get

public boolean get(java.util.Collection<Row.Key> rowKeys,
                   java.util.List<CellFilter> cellFilters,
                   AsyncDataReceiver dataReceiver,
                   int numOfThread,
                   int timeout)
            throws java.io.IOException
async하게 데이터를 조회할 경우 사용한다. get 메소드를 호출하는 측에서는 메소드 호출만 하고 검색 결과는 dataReceiver를 통해 받게 된다. timeout이내에 조회된 데이터만 반환한다.

Parameters:
rowKeys -
cellFilters -
dataReceiver -
numOfThread -
timeout -
Throws:
java.io.IOException

get

public boolean get(java.util.Collection<Row.Key> rowKeys,
                   java.lang.String[] columnNames,
                   AsyncDataReceiver dataReceiver,
                   int numOfThread,
                   int timeout)
            throws java.io.IOException
async하게 데이터를 조회할 경우 사용한다. get 메소드를 호출하는 측에서는 메소드 호출만 하고 검색 결과는 dataReceiver를 통해 받게 된다. timeout이내에 조회된 데이터만 반환한다.

Parameters:
rowKeys -
columnNames -
dataReceiver -
timeout -
Throws:
java.io.IOException

get

public Row get(Row.Key rowKey,
               java.lang.String columnName)
        throws java.io.IOException
데이터를 조회한다.

Parameters:
rowKey -
columnName -
Returns:
데이터가 없는 경우 null 반환
Throws:
java.io.IOException

get

public Row get(RowFilter rowFilter)
        throws java.io.IOException
Filter 조건에 맞는 데이터를 조회한다.여러 row에 걸친 작업은 수행하지 않는다. RowFilter의 startRowKey 값을 이용하여 조회한다.

Parameters:
rowFilter -
Returns:
데이터가 없는 경우 null 반환
Throws:
java.io.IOException

createTable

public static void createTable(NConfiguration conf,
                               TableSchema tableSchema)
                        throws java.io.IOException
테이블을 생성한다.

Parameters:
conf -
tableSchema -
Throws:
java.io.IOException

createTable

public static void createTable(NConfiguration conf,
                               TableSchema tableSchema,
                               Row.Key[] endRowKeys)
                        throws java.io.IOException
NTable에 설정된 TableInfo를 이용하여 테이블을 생성한다. 테이블 생성 후 전달된 Row.Key 정보를 이용하여 tablet을 만든다.

Parameters:
endRowKeys -
Throws:
java.io.IOException

dropTable

public static void dropTable(NConfiguration conf,
                             java.lang.String tableName)
                      throws java.io.IOException
테이블을 drop 한다.

Parameters:
conf -
tableName -
Throws:
java.io.IOException

dropTable

public void dropTable()
               throws java.io.IOException
테이블을 drop한다. 테이블을 drop할 경우 테이블의 모든 데이터/파일은 삭제된다.

Throws:
java.io.IOException

truncateTable

public void truncateTable(boolean clearPartitionInfo)
                   throws java.io.IOException
테이블의 모든 데이터를 삭제한다.

Parameters:
clearPartitionInfo - 테이블 파티션 정보까지 삭제한다.
Throws:
java.io.IOException

truncateTable

public void truncateTable()
                   throws java.io.IOException
테이블의 모든 데이터를 삭제한다.

Throws:
java.io.IOException

truncateColumn

public void truncateColumn(java.lang.String columnName)
                    throws java.io.IOException
테이블의 특정 컬럼의 모든 데이터를 삭제한다.

Parameters:
columnName -
Throws:
java.io.IOException

descTable

public TableSchema descTable()
                      throws java.io.IOException
테이블의 상세 정보를 조회한다.

Returns:
테이블 정보를 반환, 테이블이 없는 경우 null 반환
Throws:
java.io.IOException

addColumn

public void addColumn(java.lang.String addedColumnName)
               throws java.io.IOException
테이블에 컬럼을 추가한다. 데이터에 대한 변경은 없

Parameters:
addedColumnName -
Throws:
java.io.IOException

addTablet

public TabletInfo addTablet(Row.Key endRowKey)
                     throws java.io.IOException
테이블에 새로운 Tablet을 추가한다

Parameters:
tableName -
endRowKey -
Returns:
Throws:
java.io.IOException

listTabletInfos

public TabletInfo[] listTabletInfos()
                             throws java.io.IOException
특정 테이블의 Tablet 목록을 가져온다.

Returns:
TabletInfo 목록
Throws:
java.io.IOException

openDirectUploader

public DirectUploader openDirectUploader(java.lang.String[] columnNames)
                                  throws java.io.IOException
대량의 데이터를 업로딩하는 BatchUploader를 오픈한다.

Parameters:
columnNames -
Returns:
오픈된 DFSBatchUploader 객체
Throws:
java.io.IOException

getTabletAllActions

public java.lang.String[] getTabletAllActions(TabletInfo tabletInfo)
                                       throws java.io.IOException
Tablet에 현재 수행중인 작업을 조회한다.(관리자용)

Parameters:
tabletInfo -
Returns:
TabletAction의 class명
Throws:
java.io.IOException

getTabletReport

public TabletReport getTabletReport(TabletInfo tabletInfo)
                             throws java.io.IOException
Tablet의 현재 상황을 모니터링한다.(관리자용)

Parameters:
tabletInfo -
Returns:
TabletReport 정보, 해당 tablet에 대한 정보를 가져올 수 없는 경우 null 반환
Throws:
java.io.IOException

lookupTargetTablet

public TabletInfo lookupTargetTablet(Row.Key rowKey)
                              throws java.io.IOException
BatchUpload를 종료한다. BatchUpload 동안 만들어진 MapFile을 Tablet에 연결시킨다. startBatchUpload()후 endBatchUpload()가 수행되지 않으면 Tablet은 Compaction, Split 작업이 수행되지 않기 때문에 반드시 endBatchUpload()가 수행되도록 해야 한다.

Parameters:
tabletInfo -
columnNames -
mapFileIds -
mapFilePaths -
Throws:
java.io.IOException

lookupTargetTablet

public static TabletInfo lookupTargetTablet(NConfiguration conf,
                                            java.lang.String tableName,
                                            Row.Key rowKey)
                                     throws java.io.IOException
특정 Row를 서비스하는 Tablet을 찾는다.

Parameters:
hashRow.Key -
Returns:
해당 rowkwy를 서비스하고 있는 tablet 정보
Throws:
java.io.IOException

getTableName

public java.lang.String getTableName()
현재 오픈되어 있는 테이블명을 반환한다.

Returns:
테이블명

getConf

public NConfiguration getConf()
Neptune configuration 객체를 반환한다.

Returns:
NeptuneConfiguration

getColumnsArray

public java.lang.String[] getColumnsArray()
                                   throws java.io.IOException
테이블의 컬럼 목록을 반환한다.

Returns:
컬럼 목록
Throws:
java.io.IOException

clear

public void clear()

getTabletInfo

public TabletInfo getTabletInfo(java.lang.String tabletName)
                         throws java.io.IOException
Throws:
java.io.IOException

getTableSchema

public TableSchema getTableSchema()

getSplitedRowKeyRanges

public Row.Key[] getSplitedRowKeyRanges(TabletInfo tabletInfo,
                                        int splitPerTablet)
                                 throws java.io.IOException
Throws:
java.io.IOException

main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
Throws:
java.lang.Exception