gyb優化事項 4

2021-06-22 03:42:57 字數 3002 閱讀 1924

dxi_change_log支援直接呼叫dxi_ddd和dd,而不寫入tb_change_log後非同步處理

----非同步方式在das中存在多個內部伺服器時如何分配,協調tb_change_log記錄任務存在問題

假設a,b兩個內部伺服器,寫入tb_change_log後,這些未處理的記錄由誰處理?

方案:----寫入者處理:在tb_change_log增加處理者id資訊(如內部伺服器id)

如果某個內部伺服器宕機,則該伺服器的記錄在其重新啟動前無法被處理

----任務協調者:這是一種常見的模式。需要增加乙個協調者,在多個工作者協調分配任務。(需要開發,有一定的複雜度)

***也許有開源實現!

採用直接呼叫dxi_ddd的方式,則可避免上述問題。

通常資料庫操作的開銷較大。

缺點是,如果接收佇列太小,則可能導致通訊速率降低。

dxi_change_log.conf

增加以下配置

3

dxi_chaneg_log.h

cdxkchangelog

增加處理模式配置:

short handle_mode_; ///< 處理模式: bit0-1:同步 0-非同步 bit1-同步模式下是否寫變更日誌表.預設:0

handlelogrecord增加引數flag

///< flag=1直接呼叫,因沒有寫入變更日誌所以不需要修改狀態

int handlelogrecord(cchangelogrecord *record,short flag);

handlebillaccept中判定handle_mode_,如果是直接呼叫,則直接生成cchangelogrecord物件,呼叫cdxkchangelog::handlelogrecord函式.

int cdxkchangelog::handlebillaccept(cbillacceptevent *e)

getdbc(pdbor,this->local_dbc_.c_str());

fail_return(pdbor->begintrans(),,-1);

char now[24];

getcursystemtime(now);

int cnt = sti->get_key_field_num();

crowset* row = e->data_->getrowset(0);

int rowcnt = row->getrsmeta(rst_row_cnt);

for(int i = 0; i < rowcnt; i++)

break;

}if(j >= catch_rule_.size())

continue;

}bool bsrc_orgid = true;

bool bsheet_id = true;

if(sti->getfieldinfo(1,"src_orgid") == null)

bsrc_orgid = false;

if(sti->getfieldinfo(1,"sheet_id") == null)

bsheet_id = false;

for(int j = 0; j < cnt; j++)

if ((handle_mode_&0x01)==0||(handle_mode_&0x02))

th->bindfield("datatype",(char**)&e->sheet_type_,sizeof(e->sheet_type_));

th->bindfield("logtime",now);

if (th->insert()) }}

getthislogger()->log(lo_stdout|lo_file,severity_debug,"cdxkchangelog::handlebillaccept ok.\n");

return 0;

}int cdxkchangelog::handlelogrecord(cchangelogrecord *record,short flag)

catch(pkpexception err)

string update_sql;

int handle_status = 0;

for (unsigned long k=0; kaddkey(pk_val.pkname.c_str(),pk_val.pkvalue.c_str());

switch(vecresult[k].pktype[0])

}if (!strwhere.empty())

if (!record->mis_no_.empty())

rule->setprovider(record->mis_no_.c_str());

else

rule->setspecprovider(false);

rule->setoptype(record->op_type_);

if (record->op_type_==0||record->op_type_==1||record->op_type_==3||record->op_type_==5||record->op_type_==6)

else if ( record->op_type_== 2)

else

}else if (pbilltype_map->handle_mode_==2)

ret = task->run(handle_status);

task->release();

}if (flag==0)

else

if (pdbor->execute(adcmdtext,update_sql.c_str()))

return 0;

}} ///< 離開此作用域,pdbor已經被釋放.否則,如果由於當前連線已斷開導致update始終失敗,而不會重新連線.

if (flag==0) ;

}return 0;

}

sql 優化注意事項

1.儲存過程比sql語句效率高 儲存過程經過預編譯處理 而sql查詢沒有 2.給表建立索引的字段 常見字段是where 後的條件字段 3.查詢表時使用 nolock 查詢語句不會阻塞 4.不要使用 select from dbo.table 用具體的字段列表代替 不要返回用不到的任何字段。同時避免使...

Database 效能優化主意事項

1.查詢執行慢的sql mysql查詢當前執行的sql select from information schema processlist where info is notnull time列是sql持續的時間,單位是秒,越少越好,至少會有一條記錄,就是當前的監控sql。mysql查詢未提交事務...

銷售注意事項4

不要說競爭對手的壞話,展現企業風度,展現個人風度。與客戶交談時要穩定沉著,要有氣場,如果沒有氣場的時候,就用案例或者現場演示說服客戶。不要貪婪,做企業做人做專案都不要貪婪,做好自己擅長的事情就好了,什麼都去做的話什麼都會做不好,切記 追二兔而不得一兔 以平和的心態面對生活,面對客戶,面對專案,不要浮...