oceanbase的使用類似於關係型資料庫,需要預先建立schema,關於schema的格式,請參見schema說明。
假如我們有以下schema:
name=student
max_table_id=1002
[student]這裡一共有兩張表,student和score,student表冗餘了score表的一些字段,有join關係。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
0. 關於rowkey
在oceanbase中資料是按行儲存的,每行由rowkey唯一標識,rowkey是binary stream形式,oceanbase不會對其進行解釋。 rowkey可以由多段組成,應用對其進行解釋,比如上兩張表的rowkey為:
//student的rowkey由二個部份組成,第一部份為班級id,第三部份為學生id。1. 初始化://該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()
}
private clientimpl client;2. 寫入client = new clientimpl();
client.setip(ip); //the ip of the rootserver
client.setport(port); //the port of the rootserver
client.settimeout(2000); //超時時間,單位毫秒
client.init();
在目前的版本中,ob的update和insert語義是相同的。更新的時候需要提供表名、rowkey、以及各列的值。
final private static string student_table_name="student";3. 查詢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())
}}
查詢分為get和scan,get是指定rowkey進行查詢,而scan是範圍查詢。
void querydemo()4. orderby & wherevoid getdemo() else
}
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...