OceanBase使用範例

2021-08-26 04:26:17 字數 3970 閱讀 4847

oceanbase的使用類似於關係型資料庫,需要預先建立schema,關於schema的格式,請參見schema說明。

假如我們有以下schema:

name=student

max_table_id=1002

[student]

table_id=1001

max_column_id=22

table_type=1

#rowkey=class_id(8bytes) + student id(8bytes)

rowkey_is_fixed_length=1

column_info=1,2,gmt_created,create_time

column_info=1,3,gmt_modified,modify_time

column_info=1,16,student_name,varchar,128

column_info=1,17,student_***,int

column_info=1,18,student_age,int

column_info=1,19,student_addr,varchar,128

column_info=1,20,cplusplus,int

column_info=1,21,oceanbase,int

column_info=1,22,english,int

join=rowkey[7,15]%score:cplusplus$cplusplus,oceanbase$oceanbase,english$english

rowkey_max_length=16

rowkey_split=8

[score]

table_id=1002

table_type=1

max_column_id=18

#rowkey=student id(8bytes)

rowkey_is_fixed_length=1

column_info=1,2,gm_create,create_time

column_info=1,3,gm_modified,modify_time

column_info=1,16,cplusplus,int

column_info=1,17,oceanbase,int

column_info=1,18,english,int

rowkey_max_length=8

rowkey_split=0

這裡一共有兩張表,student和score,student表冗餘了score表的一些字段,有join關係。

0. 關於rowkey

在oceanbase中資料是按行儲存的,每行由rowkey唯一標識,rowkey是binary stream形式,oceanbase不會對其進行解釋。 rowkey可以由多段組成,應用對其進行解釋,比如上兩張表的rowkey為:

//student的rowkey由二個部份組成,第一部份為班級id,第三部份為學生id。

//該rowkey為定長16位元組

//在查詢的時候可以只給出班級id,表示查詢該班級下的所有學生。

class studentrowkey extends rowkey

final bytebuffer bytebuffer = bytebuffer.allocate(16);

public byte getbytes()

};//score的rowkey為student id,定長8位元組

class scorerowkey extends rowkey

final bytebuffer bytebuffer = bytebuffer.allocate(8);

public byte getbytes()

}

1. 初始化:

private clientimpl client;

client = new clientimpl();

client.setip(ip); //the ip of the rootserver

client.setport(port); //the port of the rootserver

client.settimeout(2000); //超時時間,單位毫秒

client.init();

2. 寫入

在目前的版本中,ob的update和insert語義是相同的。更新的時候需要提供表名、rowkey、以及各列的值。

final private static string student_table_name="student";

final private static string student_name="student_name";

final private static string student_age="student_age";

final private static string student_***="student_***";

final private static string student_addr="student_addr";

final private static string score_cplusplus="cplusplus";

final private static string score_oceanbase="oceanbase";

final private static string score_english="english";

/*** for ob semantics , update & insert is identical

* db semantics is not support yet.

*/void updatedemo() },false);

mutator.addcolumn(student_***, new value() },false);

mutator.addcolumn(student_age, new value() },false);

mutator.addcolumn(student_addr, new value() },false);

mutatorlist.add(mutator);

//分數只能在分數表中更新

}resultret = client.update(mutatorlist);

if (ret == null || !ret.getresult())

} void insertdemo() },false);

mutator.addcolumn(student_***, new value() },false);

mutator.addcolumn(student_age, new value() },false);

mutator.addcolumn(student_addr, new value() },false);

//類似update,insert也可以做批量插入

resultret = client.insert(mutator);

if (ret == null || !ret.getresult())

}}

3. 查詢

查詢分為get和scan,get是指定rowkey進行查詢,而scan是範圍查詢。

void querydemo() 

void getdemo() else

}

4. orderby & where

void querydemowhere() }));

query_info.setfilter(filter);

result> result = client.query(student_table_name, query_info);

system.out.println("get" + result.getresult().size() + "items");

} void querydemoorderby()

游標使用範例

declare colname varchar 100 declare cu cname cursor for select name from syscolumns where id object id sh data 1 ok open cu cname fetch next from cu c...

chmod使用範例

chmod 750 a.out 改變 a.out的許可權為750 chmod a x a.out 對所有使用者增加 a.out的執行許可權,a all 表示所有使用者 chmod u rwx a.out 設定屬主的許可權為讀 寫和執行,u user 表示屬主使用者 chmod g rw a.out ...

cmake使用範例

cmake作為一款跨平台的專案構建工具,其使用範圍已經越來越廣,本文以實際專案為例,展示乙個使用該編譯工具的模板。希望我們都能在這些高效的工具幫助下都享受程式設計的樂趣。project src libs modules includes build bin cmakelists 根目錄下cmakel...