クラスタ環境流水番号設計
2478 ワード
構想:データベースの排他ロックメカニズムを利用して、クラスタ流水号生成の唯一性を達成する
流水番号表:
表名:SYS_IDENTITY解釈:SYS_IDENTITY【流し番号生成】備考:流し番号生成
SYS_IDENTITY(SYS_IDENTITY【流し番号生成】)
プライマリ・キー
フィールド名
フィールドの説明
データ型
長さ
空き可能
拘束
デフォルト値
コメント
はい
ID
プライマリキー
NUMBER(18)
18
プライマリキー
NAME
名前
VARCHAR2(50)
50
はい
名前
ALIAS
別名#ベツメイ#
VARCHAR2(20)
20
はい
別名#ベツメイ#
REGULATION
ルール#ルール#
VARCHAR2(100)
100
はい
ルール#ルール#
GENEVERYDAY
毎日生成
SMALLINT
はい
毎日生成
NOLENGTH
ながれちょう
INTEGER
はい
ながれちょう
CURDATE
現在の日付
VARCHAR2(10)
10
はい
INITVALUE
初期値
INTEGER
はい
初期値
CURVALUE
現在の値
INTEGER
はい
現在の値
STEP
ステップ
SMALLINT
はい
ステップ
フロー番号の取得方法:
流水番号表:
表名:SYS_IDENTITY解釈:SYS_IDENTITY【流し番号生成】備考:流し番号生成
SYS_IDENTITY(SYS_IDENTITY【流し番号生成】)
プライマリ・キー
フィールド名
フィールドの説明
データ型
長さ
空き可能
拘束
デフォルト値
コメント
はい
ID
プライマリキー
NUMBER(18)
18
プライマリキー
NAME
名前
VARCHAR2(50)
50
はい
名前
ALIAS
別名#ベツメイ#
VARCHAR2(20)
20
はい
別名#ベツメイ#
REGULATION
ルール#ルール#
VARCHAR2(100)
100
はい
ルール#ルール#
GENEVERYDAY
毎日生成
SMALLINT
はい
毎日生成
NOLENGTH
ながれちょう
INTEGER
はい
ながれちょう
CURDATE
現在の日付
VARCHAR2(10)
10
はい
INITVALUE
初期値
INTEGER
はい
初期値
CURVALUE
現在の値
INTEGER
はい
現在の値
STEP
ステップ
SMALLINT
はい
ステップ
フロー番号の取得方法:
/**
* 。
* @param alias 。
* @return
*/
public synchronized String nextId(String alias){
// SELECT <include refid="columns"/> FROM SYS_IDENTITY
//WHERE alias=#{alias} FOR UPDATE
Identity identity=this.dao.getByAlias(alias);
if(BeanUtils.isEmpty(identity)) return "";
String rule=identity.getRule();
int step=identity.getStep();
int genEveryDay=identity.getGenEveryDay();
//
Integer curValue=identity.getCurValue();
if(curValue==null) curValue=identity.getInitValue();
//
if(genEveryDay==1){
String curDate=getCurDate();
String oldDate=identity.getCurDate();
if(!curDate.equals(oldDate)){
identity.setCurDate(curDate);
curValue=identity.getInitValue();
}
else{
curValue=curValue + step;
}
}
else{
curValue=curValue + step;
}
identity.setCurValue(curValue);
dao.update(identity);
// 。
String rtn=getByRule(rule,identity.getNoLength(),curValue);
return rtn;
}