<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

    CowNew開源團(tuán)隊(duì)

    http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks
          今天改完了bug就開始考慮起怎么優(yōu)化數(shù)據(jù)導(dǎo)入的程序了。我們的系統(tǒng)構(gòu)架要求客戶端不能執(zhí)行sql語(yǔ)句,所有的數(shù)據(jù)庫(kù)操作都要通過ejb來(lái)實(shí)現(xiàn)。我這個(gè)數(shù)據(jù)導(dǎo)入就麻煩了,因?yàn)槭谴罅繑?shù)據(jù)的導(dǎo)入,如果采用ejb的方式一條一條的導(dǎo)入,速度會(huì)很慢。
        所以我采取了定義一個(gè)SessionBean,在SessionBean中定義一個(gè)executeSQL方法,接受兩個(gè)參數(shù),一個(gè)是sql語(yǔ)句(可能帶參數(shù)),和一個(gè)參數(shù)值數(shù)組。這樣客戶端就可以直接通過sql語(yǔ)句操縱數(shù)據(jù)庫(kù)了。但是問題也就來(lái)了,如果每條數(shù)據(jù)都調(diào)用executeSQL訪問一次數(shù)據(jù)庫(kù),這樣不僅會(huì)造成頻繁的事務(wù)啟動(dòng),速度很慢,而且由于各個(gè)數(shù)據(jù)庫(kù)插入操作之間是在不同的ejb調(diào)用中進(jìn)行的,所以無(wú)法保證事務(wù)。我優(yōu)化的重點(diǎn)當(dāng)然也就在這兩點(diǎn)上。項(xiàng)目緊急,我不能對(duì)構(gòu)架做太大的改動(dòng)了,因?yàn)楫吘挂郧暗膶?shí)現(xiàn)方式可以導(dǎo)入數(shù)據(jù)了,我就琢磨著在不做大規(guī)模改動(dòng)的情況下進(jìn)行優(yōu)化,將風(fēng)險(xiǎn)降低到最小。
        系統(tǒng)中所有ejb都是基于接口的,比如上邊定義的executeSQL方法就定義在IImportDataFacade接口中,ejb實(shí)現(xiàn)這個(gè)接口,客戶端通過工廠方法ImportDataFactory.getInstance()訪問這個(gè)接口(ImportDataFactory.getInstance()返回IImportDataFacade類型)。好,我就從他下手。定義一個(gè)ImportDataDecorate類,讓他也實(shí)現(xiàn)IImportDataFacade接口,它的executeSQL實(shí)現(xiàn)不是吧sql提交到數(shù)據(jù)庫(kù),而是把它緩存起來(lái),等所有插入語(yǔ)句執(zhí)行完畢后將緩存的sql語(yǔ)句一次性提交到我定義的一個(gè)新的接口方法中(此方法含有一個(gè)sql數(shù)組的發(fā)那個(gè)法),這樣就可以保證事務(wù)和速度了。
        我是怎么實(shí)現(xiàn)對(duì)系統(tǒng)改動(dòng)最小呢?對(duì)了,我只要把所有調(diào)用ImportDataFactory.getInstance().executeSQL()的地方替換成new ImportDataDecorate(ImportDataFactory.getInstance()).executeSQL(),哈哈,改動(dòng)很小吧,而且一旦發(fā)現(xiàn)這種實(shí)現(xiàn)方式不可行,那么只要將ImportDataDecorate.executeSQL()的實(shí)現(xiàn)改成直接提交到數(shù)據(jù)庫(kù)就好了,其他調(diào)用根本不用變。設(shè)計(jì)模式很偉大呀,只不過我都不知道我用的這是什么模式,Proxy 還是Decorator?不知道,反正解決問題了,呵呵。
    posted on 2006-03-07 22:08 CowNew開源團(tuán)隊(duì) 閱讀(1001) 評(píng)論(7)  編輯  收藏

    評(píng)論

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-03-08 12:08 ddd
    改ImportDataFactory.getInstance()讓返回一個(gè)decorated的接口不就行了.  回復(fù)  更多評(píng)論
      

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-03-08 12:36 Java & Delphi 聯(lián)合王國(guó)
    @ddd
    ImportDataFactory類是公司的開發(fā)工具自動(dòng)生成的,不能改,即使改了再次生成的時(shí)候也會(huì)被重新覆蓋改成默認(rèn)的形式,呵呵.所以只能這樣做了
      回復(fù)  更多評(píng)論
      

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-03-09 09:23 insert&&modify
    把它緩存起來(lái),等所有插入語(yǔ)句執(zhí)行完畢后將緩存的sql語(yǔ)句一次性提交到我定義的一個(gè)新的接口方法中?
    搞不明白,你這里把它緩存起來(lái),那就是說(shuō)不和數(shù)據(jù)庫(kù)交互了,你怎么保證事務(wù)啊?
      回復(fù)  更多評(píng)論
      

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-03-10 09:40 scorpional
    弱弱的問一句,你的提交方法里面是不是就是做commit動(dòng)作,但是這樣沒有立刻提交,能保證事務(wù)么?  回復(fù)  更多評(píng)論
      

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-03-10 20:12 Java & Delphi 聯(lián)合王國(guó)
    我執(zhí)行的都是insert語(yǔ)句,在批量執(zhí)行之前開始事務(wù),執(zhí)行完畢commit,執(zhí)行錯(cuò)誤就rollback,肯定能保證事務(wù)呀。難道我做的有什么不妥?請(qǐng)指教。
    示意性代碼:

    beginTX();
    try
    {
    for(int i=0,n=sqlcache.size();i<n;i++)
    {
    executeSQL(sqlcache.get(i));
    }
    commit();
    }
    catch
    {
    rollbakc();
    }  回復(fù)  更多評(píng)論
      

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-03-11 10:10 scorpional
    哦,明白了,學(xué)習(xí)!  回復(fù)  更多評(píng)論
      

    # re: 數(shù)據(jù)導(dǎo)入優(yōu)化經(jīng)驗(yàn) 2006-06-02 16:01 霉干菜
    定義一個(gè)ImportDataDecorate類,讓他也實(shí)現(xiàn)IImportDataFacade接口,它的executeSQL實(shí)現(xiàn)不是吧sql提交到數(shù)據(jù)庫(kù),而是把它緩存起來(lái),等所有插入語(yǔ)句執(zhí)行完畢后將緩存的sql語(yǔ)句一次性提交到我定義的一個(gè)新的接口方法中(此方法含有一個(gè)sql數(shù)組的發(fā)那個(gè)法),這樣就可以保證事務(wù)和速度了。


    這個(gè)時(shí)候?yàn)槭裁床恢苯臃植继峤荒?而是再用一個(gè)方法合并sql數(shù)組 和sql語(yǔ)句呢,我感覺這部分合并不用去創(chuàng)建一個(gè)新的接口方法把? 還是照你這樣作才能提高效率呢?
    請(qǐng)指教.  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费欧洲美女牲交视频| 久久久久久噜噜精品免费直播| 国产成人亚洲精品| 久久久久久亚洲精品成人| 久久亚洲免费视频| 久久亚洲一区二区| 亚洲精品在线观看视频| 67pao强力打造67194在线午夜亚洲| 亚洲国产一区二区三区青草影视| 久久久青草青青亚洲国产免观| 亚洲成a人片在线观看无码专区| 亚洲国产人成网站在线电影动漫| 亚洲欧洲国产日韩精品| 亚洲高清中文字幕综合网| 亚洲白色白色在线播放| 亚洲一区在线视频| 亚洲欧美第一成人网站7777| 国产亚洲精品AAAA片APP| 污网站免费在线观看| 国产日韩AV免费无码一区二区三区| 中国毛片免费观看| 99在线在线视频免费视频观看| 7x7x7x免费在线观看| 一二三四视频在线观看中文版免费 | 久久精品国产亚洲网站| 亚洲精品福利视频| 亚洲1234区乱码| 亚洲AV女人18毛片水真多| 全部一级一级毛片免费看| 久青草视频在线观看免费| 最近2019免费中文字幕视频三| 免费可以看黄的视频s色| 日韩一级免费视频| 久久精品国产亚洲5555| 精品日韩亚洲AV无码| 亚洲人av高清无码| 一区二区三区在线免费| 最近2019免费中文字幕视频三| 无码国模国产在线观看免费 | 91九色老熟女免费资源站| 成全视频免费高清|