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

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

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

    vickzhu

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      151 隨筆 :: 0 文章 :: 34 評(píng)論 :: 0 Trackbacks

    2009年11月4日 #

    ##通用查詢(xún)?nèi)罩荆河涗浗⒌目蛻?hù)端連接和執(zhí)行的語(yǔ)句
    ##慢查詢(xún)?nèi)罩荆河涗浰袌?zhí)行時(shí)間超過(guò)long_query_time值的所有查詢(xún)或者不使用索引的查詢(xún)
    ##查看數(shù)據(jù)庫(kù)版本
    SHOW VARIABLES LIKE '%version%';
    ##查看通用查詢(xún)?nèi)罩?/div>
    SHOW VARIABLES LIKE '%general%';
    ##設(shè)置通用查詢(xún)?nèi)罩緸殚_(kāi)啟
    SET GLOBAL general_log=ON;
    ##設(shè)置通用查詢(xún)?nèi)罩緸殛P(guān)閉
    SET GLOBAL general_log=OFF;
    ##查看當(dāng)前慢查詢(xún)?nèi)罩据敵龅母袷?,可以是FILE(存儲(chǔ)在數(shù)數(shù)據(jù)庫(kù)的數(shù)據(jù)文件中的hostname.log),也可以是TABLE(存儲(chǔ)在數(shù)據(jù)庫(kù)中的mysql.general_log)
    SHOW VARIABLES LIKE '%log_output%';
    ##設(shè)置查詢(xún)?nèi)罩据敵龅轿募?/div>
    SET GLOBAL log_output='file';
    ##設(shè)置慢查詢(xún)?nèi)罩颈4娴奈募?/div>
    SET GLOBAL slow_query_log_file="/var/lib/mysql/localhost-slow.log";
    ##查看慢查詢(xún)相關(guān)設(shè)置
    SHOW VARIABLES LIKE '%slow_query%';
    ##設(shè)置慢查詢(xún)閾值為1,默認(rèn)為10
    SET GLOBAL long_query_time=1;
    ##設(shè)置慢查詢(xún)閾值為10,默認(rèn)為10
    SET GLOBAL long_query_time=10;
    ##查看慢查詢(xún)的閾值
    SHOW GLOBAL VARIABLES LIKE '%long_query_time%';
    ##查看有多少慢查詢(xún)
    SHOW GLOBAL STATUS LIKE '%Slow_queries%';
    ##睡眠11秒,測(cè)試慢查詢(xún)
    ##select SLEEP(11);
    posted @ 2018-10-09 16:59 筱 筱 閱讀(180) | 評(píng)論 (0)編輯 收藏

    velocity properties加載時(shí)是放在HashMap中的,首先會(huì)加載configLocation中指定文件的內(nèi)容,然后加載VelocityConfigurer中通過(guò)velocityProperties配置的屬性,
    因此,在VelocityConfigurer中配置的屬性會(huì)覆蓋configLocation指定文件中的屬性
    posted @ 2014-08-22 11:03 筱 筱 閱讀(5891) | 評(píng)論 (0)編輯 收藏

    1、達(dá)到默認(rèn)最大buffer size
    2、調(diào)用HttpServletResponse.flushBuffer()
    3、調(diào)用HttpServletResponse.getOutputStream().flush()或者HttpServletResponse.getWriter().flush()
    4、調(diào)用HttpServletResponse.sendError()或者HttpServletResponse.sendRedirect()
    posted @ 2014-07-23 13:11 筱 筱 閱讀(5901) | 評(píng)論 (0)編輯 收藏

    <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
              <encoding>UTF-8</encoding>
              <compilerArguments>
                <extdirs>WebContent/WEB-INF/lib</extdirs>
              </compilerArguments>
              </configuration>
            </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
              <webXml>WebContent/WEB-INF/web.xml</webXml>
              <warSourceDirectory>WebContent</warSourceDirectory>
            </configuration>
          </plugin>
        </plugins>
    posted @ 2013-11-01 17:03 筱 筱 閱讀(6452) | 評(píng)論 (1)編輯 收藏

    在onPrepareDialog()中添加如下代碼:
    AlertDialog syncDialog = (AlertDialog) dialog;
    Button button = syncDialog.getButton(AlertDialog.BUTTON_POSITIVE);
    button.setText("確定");
    button.setVisibility(View.VISIBLE);
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
    posted @ 2013-03-01 12:51 筱 筱 閱讀(7033) | 評(píng)論 (0)編輯 收藏

    uml
    1. 類(lèi)圖之間的關(guān)系
    2. 依賴(lài)和關(guān)聯(lián)關(guān)系:
      依賴(lài):是類(lèi)與類(lèi)之間的連接,表示一個(gè)類(lèi)依賴(lài)于另一個(gè)類(lèi)的定義。例如如果A依賴(lài)于B,則B體現(xiàn)為局部變量,方法的參數(shù)、或靜態(tài)方法的調(diào)用。 
      關(guān)聯(lián):類(lèi)與類(lèi)之間的聯(lián)接,它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法, 具體表現(xiàn)為類(lèi)的成員變量中包含某個(gè)對(duì)象 

      組合和聚合:
      在有整體和部分關(guān)系是才有組合和聚合的概念,屬于關(guān)聯(lián)關(guān)系
      組合:部分離開(kāi)整體不能存在
      聚合:部分可以離開(kāi)整體而存在

    3. 用例圖之間的關(guān)系:
    4. 包含、泛化、擴(kuò)展
      包含:當(dāng)兩個(gè)或多個(gè)用例中共用一組相同的動(dòng)作,這時(shí)可以將這組相同的動(dòng)作抽出來(lái)作為一個(gè)獨(dú)立的子用例,供多個(gè)基用例所共享。因?yàn)樽佑美怀槌?,基用例并非一個(gè)完整的用例,所以include關(guān)系中的基用例必須和子用例一起使用才夠完整,子用例也必然被執(zhí)行 
      泛化:繼承關(guān)系,子用例將繼承基用例的所有行為 ,也就是說(shuō)在任何使用基用例的地方都可以用子用例來(lái)代替。領(lǐng)導(dǎo)擁有審批的權(quán)限,而請(qǐng)假申請(qǐng)審批、加班申請(qǐng)審批都是審批的子類(lèi)
      擴(kuò)展:對(duì)基用例的擴(kuò)展,基用例是一個(gè)完整的用例,即使沒(méi)有子用例的參與,也可以完成一個(gè)完整的功能。 

    posted @ 2012-06-29 11:42 筱 筱 閱讀(5765) | 評(píng)論 (0)編輯 收藏

    學(xué)習(xí)osworkflow
    http://my.so-net.net.tw/idealist/OSWorkflow/
     

    wfentry表中的state字段來(lái)自于接口WorkflowEntry,有如下幾個(gè)值:
        public static final int CREATED = 0;
        public static final int ACTIVATED = 1;
        public static final int SUSPENDED = 2;
        public static final int KILLED = 3;
        public static final int COMPLETED = 4;
        public static final int UNKNOWN = -1;


    Workflow接口相當(dāng)于我們service層的接口,而WorkflowStore接口相當(dāng)于我們DAO層的接口,
    我們知道osworkflow提供的Workflow實(shí)現(xiàn)(如:BasicWorkflow)有時(shí)并不能滿(mǎn)足業(yè)務(wù)的需要,因此我們可以實(shí)現(xiàn)自己的Workflow,具體可以參照BasicWorkflow 
    繼承AbstractWorkflow,接著加入自己想要的方法。同理,我們可以通過(guò)繼承相應(yīng)的WorkflowStore(如:HibernateWorkflowStore)來(lái)編寫(xiě)自己的方法
    posted @ 2012-06-26 14:49 筱 筱 閱讀(5727) | 評(píng)論 (0)編輯 收藏

    1、日期格式化:
        DateFormat
        SimplateDateFormat

    2、數(shù)字格式化
        NumberFormat
        DecimalFormat

    3、字符串格式化:
        MessageFormat 以{0},{1}作為占位符,如果你的pattern中有兩個(gè)以上的{0},在format時(shí)都會(huì)用第一個(gè)參數(shù)替換
        String.format 以%s作為占位符,按傳入的參數(shù)一一匹配
        
    posted @ 2011-09-01 17:39 筱 筱 閱讀(3140) | 評(píng)論 (0)編輯 收藏

    文字:openfire
    語(yǔ)音/視頻:FMS,red5
    posted @ 2011-08-29 13:58 筱 筱 閱讀(2754) | 評(píng)論 (1)編輯 收藏

    在使用svn add 時(shí)提示:
    A  (bin)  templates/translate/screen/selectTransLang.vm
    請(qǐng)看官方文檔的解釋?zhuān)?br />

    當(dāng)你第一次添加或者導(dǎo)入文件到Subversion中時(shí),Subversion會(huì)檢測(cè)該文件是否是二進(jìn)制文件。目前,Subversion的策略是只檢測(cè)文件的前1024個(gè)字節(jié);如果所有字節(jié)都是0,或者超過(guò)15%都是非ASCII碼輸出字符的話(huà),那么Subversion就認(rèn)定該文件是二進(jìn)制文件。
    如果Subversion認(rèn)定文件是二進(jìn)制文件,那么這個(gè)文件就會(huì)自動(dòng)添加svn:mime-type屬性,并設(shè)置為“application/octet-stream”。(你隨時(shí)可以使用auto-props特性來(lái)重寫(xiě)這樣的行為,或者使用svn propset手動(dòng)設(shè)置屬性。)
    Subversion對(duì)以下的文件做普通文本處理:
    1、沒(méi)有設(shè)置svn:mime-type屬性的文件
    2、文件的svn:mime-type屬性值以“text/”開(kāi)頭
    3、文件的svn:mime-type屬性值等于“image/x-xbitmap”
    4、文件的svn:mime-type屬性值等于“image/x-xpixmap”

    所有其他文件都將被視為二進(jìn)制文件處理,這意味著Subversion:
    1、不會(huì)嘗試在svn update或者svn merge操作時(shí)將遠(yuǎn)程修改合并到本地中
    2、在svn diff中不會(huì)顯示出不同
    3、在svn blame不會(huì)每行顯示版本和作者信息

    在其他方面,Subversion將二進(jìn)制文件和其他文本文件一樣對(duì)待
    需要注意,不管是不是二進(jìn)制文件,都不會(huì)影響版本庫(kù)中用來(lái)存儲(chǔ)文件變更的空間大小,也不會(huì)影響客戶(hù)端和服務(wù)端之間的通訊量。出于存儲(chǔ)和傳輸考慮,Subversion使用的是對(duì)二進(jìn)制文件和普通文本文件一致處理的diffing方法;這和‘svn diff’使用的diffing方法完全不相關(guān)。

    好了,我們來(lái)看看剛才加的文件是否為二進(jìn)制:
    進(jìn)入.svn/props 發(fā)現(xiàn)生成文件:selectTransLang.vm.svn-work
    內(nèi)容如下:
    K 13
    svn:mime-type
    V 24
    application/octet-stream
    END
    或者用如下方法
    svn propget svn:mime-type selectTransLang.vm
    輸出:application/octet-stream

    解決方法,直接編輯去掉這個(gè)屬性
    svn propedit svn:mime-type selectTransLang.vm
    或者刪除.svn/props/selectTransLang.vm.svn-work

    看看網(wǎng)上其他牛人的解決方法:
    修改~/.subversion/config
    找到最后一個(gè)section,在最后加上如下一行話(huà):
    *.txt = svn:mime-type=text/plain;svn:eol-style=native
    光這個(gè)還不夠,向上搜索到這么一行
    # enable-auto-props = yes
    把前面用來(lái)注釋這行的那個(gè)#和其后的空格去掉

    如果用的是TortoiseSVN,開(kāi)始菜單 -> TortoiseSVN -> Settings -> General,此時(shí)右側(cè)有一個(gè)名為Edit的按鈕,點(diǎn)擊之后就可以編輯config了

    posted @ 2011-08-04 21:51 筱 筱 閱讀(4030) | 評(píng)論 (0)編輯 收藏

    gson:java對(duì)象和json之間相互轉(zhuǎn)換
    xsteam:java對(duì)象和xml之間相互轉(zhuǎn)換
    posted @ 2011-07-15 16:55 筱 筱 閱讀(2326) | 評(píng)論 (0)編輯 收藏

    在頁(yè)面中顯示某字段時(shí),字段值過(guò)長(zhǎng)會(huì)導(dǎo)致頁(yè)面樣式錯(cuò)亂,這時(shí)候我們需要對(duì)值進(jìn)行截取,當(dāng)截取值時(shí)會(huì)碰到以下問(wèn)題:
    1、如果按字符截取會(huì)導(dǎo)致中英文顯示的長(zhǎng)度不一
    2、如果按字節(jié)截取可能會(huì)導(dǎo)致最后一個(gè)中文截成兩部分
    以下代碼是在網(wǎng)上獲取并經(jīng)過(guò)改造而成,能夠很好的解決上面兩個(gè)問(wèn)題
        /**
         * 根據(jù)指定字節(jié)數(shù)截取字符串,當(dāng)指定處為中文第一個(gè)字節(jié)時(shí)少截取一個(gè)字符,當(dāng)長(zhǎng)度大于指定截取長(zhǎng)度時(shí),截取后在字符串末尾追加指定字符串<br/>
         * 這里添加了字符串的編碼,因?yàn)轫?yè)面的編碼不同,字符串所占字節(jié)也不同
         *
         * @param str 待截取字符串,如果為null或者"",則立即返回str
         * @param length 需要截取的長(zhǎng)度
         * @param endStr 截取后末尾追加的字符串
         * @param charset 待截取字符串的編碼
         * @return
         */
        public String subStringByByte(String str, int length, String endStr, String charset) {
            if (str == null || "".equals(str.trim()) || length <= 0) {
                return str;
            }
            try {
                int strlen = str.getBytes(charset).length;// 這里要和頁(yè)面的編碼相關(guān)
                if (strlen < length) return str;
                Pattern p = Pattern.compile("^[""u4e00-""u9fa5]$");
                int i = 0, j = 0;
                int sublength = length - ((endStr == null) ? 0 : endStr.getBytes(charset).length);
                for (char c : str.toCharArray()) {
                    Matcher m = p.matcher(String.valueOf(c));
                    i += m.find() ? 2 : 1;
                    ++j;
                    if (i == sublength) break;
                    if (i > sublength) {
                        --j;
                        break;
                    }
                }
                return str.substring(0, j) + endStr;
            } catch (UnsupportedEncodingException e) {
                return str;
            }
        }
    posted @ 2010-12-14 10:49 筱 筱 閱讀(350) | 評(píng)論 (0)編輯 收藏

    英文不太好,經(jīng)常忘記,所以現(xiàn)在寫(xiě)下來(lái):
    1,transient:在序列化一個(gè)類(lèi)時(shí),如果類(lèi)中某個(gè)字段不想被序列化,則使用此關(guān)鍵字
    2、volatile:用于線(xiàn)程同步時(shí)

    posted @ 2010-12-13 20:49 筱 筱 閱讀(241) | 評(píng)論 (0)編輯 收藏

    根據(jù)分代收集器原理(可以參考垃圾回收機(jī)制分類(lèi)),JVM的內(nèi)存可分為三個(gè)域: 新域、舊域以及永久域
    JVM生成的所有新對(duì)象放在新域中。一旦對(duì)象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便進(jìn)入舊域。而在永久域中是用來(lái)存儲(chǔ)JVM自己的反射對(duì)象的,如class 和method對(duì)象,而且GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)永久域進(jìn)行清理。其中新域和舊域?qū)儆诙眩谰糜蚴且粋€(gè)獨(dú)立域并且不認(rèn)為是堆的一部分
    一、java.lang.OutOfMemoryError: PermGen space

    PermGen space的全稱(chēng)是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,
    這塊內(nèi)存主要是被 JVM存放Class和Method信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,
    它和存放類(lèi)實(shí)例 (Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)
    PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話(huà),就很可能出現(xiàn)PermGen space錯(cuò)誤,
    這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì) JSP進(jìn)行pre compile(預(yù)編譯)的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小
    超過(guò)了jvm默認(rèn)的大小(4M)那么就會(huì) 產(chǎn)生此錯(cuò)誤信息了。
    解決方法: 手動(dòng)設(shè)置MaxPermSize大小

    修改TOMCAT_HOME/bin/catalina.sh
    在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
    JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
    建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少 jar 文檔重復(fù)占用內(nèi)存的目的。

    二、java.lang.OutOfMemoryError: Java heap space
    Heap size 設(shè)置
    JVM堆 的設(shè)置是指java程序運(yùn)行過(guò)程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,
    其初始空間(即 -Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可
    進(jìn)行設(shè) 置。Heap size 的大小是Young Generation 和Tenured Generaion 之和(新域和舊域之和)。
    提示:在JVM中如果98% 的時(shí)間是用于GC且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?br /> 提示:Heap Size 最大不要超過(guò)可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。
    解決方法:手動(dòng)設(shè)置 Heap size
    修改TOMCAT_HOME/bin/catalina.sh
    在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
    JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"


    posted @ 2010-08-19 20:39 筱 筱 閱讀(242) | 評(píng)論 (0)編輯 收藏

    動(dòng)態(tài)應(yīng)用,是相對(duì)于網(wǎng)站靜態(tài)內(nèi)容而言, 是指以c/c++、php、Java、perl、.net等 服務(wù)器端語(yǔ)言開(kāi)發(fā)的網(wǎng)絡(luò)應(yīng)用軟件,比如論壇、網(wǎng)絡(luò)相冊(cè)、交友、BLOG等常見(jiàn)應(yīng)用。動(dòng)態(tài)應(yīng)用系統(tǒng)通 常與數(shù)據(jù)庫(kù)系統(tǒng)、緩存系統(tǒng)、分布式存儲(chǔ)系統(tǒng)等密不可分。

    大型動(dòng)態(tài)應(yīng)用系統(tǒng)平臺(tái)主要是針對(duì)于大流 量、高并發(fā)網(wǎng)站建立的底層系統(tǒng)架構(gòu)。大型網(wǎng)站的運(yùn)行需要一個(gè)可靠、安全、可擴(kuò)展、易維護(hù)的應(yīng)用系統(tǒng)平臺(tái)做為支撐,以保證網(wǎng)站應(yīng)用的平穩(wěn)運(yùn)行。

    大型動(dòng)態(tài)應(yīng)用系統(tǒng)又可分為幾個(gè)子系統(tǒng):

    l         Web前端系統(tǒng)

    l         負(fù)載均衡系統(tǒng)

    l         數(shù)據(jù)庫(kù)集群系統(tǒng)

    l         緩存系統(tǒng)

    l         分布式存儲(chǔ)系統(tǒng)

    l         分布式服務(wù)器管理系統(tǒng)

    l         代碼分發(fā)系統(tǒng)

    Web前端系統(tǒng)

    結(jié)構(gòu)圖:

    為了達(dá)到不同應(yīng)用的服務(wù)器共享、避免單點(diǎn)故障、集中管理、統(tǒng)一配置等目的,不以應(yīng)用劃分服 務(wù)器,而是將所有服務(wù)器做統(tǒng)一使用,每臺(tái)服務(wù)器都可以對(duì)多個(gè)應(yīng)用提供服務(wù),當(dāng)某些應(yīng)用訪(fǎng)問(wèn)量升高時(shí),通過(guò)增加服務(wù)器節(jié)點(diǎn)達(dá)到整個(gè)服務(wù)器集群的性能提高,同 時(shí)使他應(yīng)用也會(huì)受益。該Web前端系統(tǒng)基于A(yíng)pache/Lighttpd/Eginx等 的虛擬主機(jī)平臺(tái),提供PHP程序運(yùn)行環(huán)境。服務(wù)器對(duì)開(kāi)發(fā)人員是透明的,不需要開(kāi)發(fā)人員介入服務(wù)器管理

    負(fù)載均衡系統(tǒng)


    負(fù)載均衡系統(tǒng)分為硬件和軟件兩種。硬件負(fù)載均衡效率高,但是價(jià)格貴,比如F5等。軟件負(fù)載均衡系統(tǒng)價(jià)格較低或者免費(fèi),效率較硬件負(fù)載均衡系統(tǒng) 低,不過(guò)對(duì)于流量一般或稍大些網(wǎng)站來(lái)講也足夠使用,比如lvs,nginx。大多數(shù)網(wǎng)站都是硬件、軟件負(fù)載均衡系統(tǒng)并用。

    數(shù)據(jù)庫(kù)集群系統(tǒng)

    結(jié)構(gòu)圖:


    由于Web前端采用了負(fù)載均衡集群結(jié)構(gòu)提高了服務(wù)的有效性和擴(kuò)展性,因此數(shù)據(jù)庫(kù)必須也是高可靠的才能保證整個(gè)服務(wù)體系的高可靠性,如何構(gòu)建一個(gè)高可靠的、可以提供大規(guī)模并發(fā)處理的數(shù)據(jù)庫(kù)體系?

    我們可以采用如上圖所示的方案:

    1)        使用 MySQL 數(shù)據(jù)庫(kù),考慮到Web應(yīng)用的數(shù)據(jù)庫(kù)讀多寫(xiě)少的特點(diǎn),我們主要對(duì)讀數(shù)據(jù)庫(kù)做了優(yōu)化,提供專(zhuān)用的讀數(shù)據(jù)庫(kù)和寫(xiě)數(shù)據(jù)庫(kù),在應(yīng)用程序中實(shí)現(xiàn)讀操作和寫(xiě)操作分別訪(fǎng)問(wèn)不同的數(shù)據(jù)庫(kù)。

    2)        使用 MySQL Replication 機(jī)制實(shí)現(xiàn)快速將主庫(kù)(寫(xiě)庫(kù))的數(shù)據(jù)庫(kù)復(fù)制到從庫(kù)(讀庫(kù))。一個(gè)主庫(kù)對(duì)應(yīng)多個(gè)從庫(kù),主庫(kù)數(shù)據(jù)實(shí)時(shí)同步到從庫(kù)。

    3)        寫(xiě)數(shù)據(jù)庫(kù)有多臺(tái),每臺(tái)都可以提供多個(gè)應(yīng)用共同使用,這樣可以解決寫(xiě)庫(kù)的性能瓶頸問(wèn)題和單點(diǎn)故障問(wèn)題。

    4)        讀數(shù)據(jù)庫(kù)有多臺(tái),通過(guò)負(fù)載均衡設(shè)備實(shí)現(xiàn)負(fù)載均衡,從而達(dá)到讀數(shù)據(jù)庫(kù)的高性能、高可靠和高可擴(kuò)展性。

    5)        數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用服務(wù)器分離。

    6)        從數(shù)據(jù)庫(kù)使用BigIP做負(fù)載均衡。

    緩存系統(tǒng)


    緩存分為文件緩存、內(nèi)存緩存、數(shù)據(jù)庫(kù)緩存。在大型Web應(yīng)用中使用最多且效率最高的是內(nèi)存緩存。最常用的內(nèi)存緩存工具是Memcachd。使用正確的緩存系統(tǒng)可以達(dá)到實(shí)現(xiàn)以下目標(biāo):

    1、   使用緩存系統(tǒng)可以提高訪(fǎng)問(wèn)效率,提高服務(wù)器吞吐能力,改善用戶(hù)體驗(yàn)。

    2、   減輕對(duì)數(shù)據(jù)庫(kù)及存儲(chǔ)集服務(wù)器的訪(fǎng)問(wèn)壓力

    3、Memcached服務(wù)器有多臺(tái),避免單點(diǎn)故障,提供高可靠性和可擴(kuò)展性,提高性能。

    分布式存儲(chǔ)系統(tǒng)

    結(jié)構(gòu)圖:


    WEB系統(tǒng)平臺(tái)中的存儲(chǔ)需求有下面兩個(gè)特點(diǎn):

    1) 存儲(chǔ)量很大,經(jīng)常會(huì)達(dá)到單臺(tái)服務(wù)器無(wú)法提供的規(guī)模,比如相冊(cè)、視頻等應(yīng)用。因此需要專(zhuān)業(yè)的大規(guī)模存儲(chǔ)系統(tǒng)。

    2) 負(fù)載均衡cluster中的每個(gè)節(jié)點(diǎn)都有可能訪(fǎng)問(wèn)任何一個(gè)數(shù)據(jù)對(duì)象,每個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)的處理也能被其他節(jié)點(diǎn)共享,因此這些節(jié)點(diǎn)要操作的數(shù)據(jù)從邏輯上看只能是一個(gè)整體,不是各自獨(dú)立的數(shù)據(jù)資源。

    因此高性能的分布式存儲(chǔ)系統(tǒng)對(duì)于大型網(wǎng)站應(yīng)用來(lái)說(shuō)是非常重要的一環(huán)。(這個(gè)地方需要加入對(duì)某個(gè)分布式存儲(chǔ)系統(tǒng)的簡(jiǎn)單介紹。)

    分布式服務(wù)器管理系統(tǒng)

    結(jié)構(gòu)圖:


    隨著網(wǎng)站訪(fǎng)問(wèn)流量的不斷增加,大多的網(wǎng)絡(luò)服務(wù)都是以負(fù)載均衡集群的方式對(duì)外提供服務(wù),隨之集群規(guī)模的擴(kuò)大,原來(lái)基于單機(jī)的服務(wù)器管理模式已經(jīng)不能夠滿(mǎn)足我們的需求,新的需求必須能夠集中式的、分組的、批量的、自動(dòng)化的對(duì)服務(wù)器進(jìn)行管理,能夠批量化的執(zhí)行計(jì)劃任務(wù)。

    在分布式服務(wù)器管理系統(tǒng)軟件中有一些比較優(yōu)秀的軟件,其中比較理想的一個(gè)是 Cfengine。它可以對(duì)服務(wù)器進(jìn)行分組,不同的分組可以分別定制系統(tǒng)配置文件、計(jì)劃任務(wù)等配置。它是基于C/S 結(jié)構(gòu)的,所有的服務(wù)器配置和管理腳本程序都保存在Cfengine Server上,而被管理的服務(wù)器運(yùn)行著 Cfengine Client 程序,Cfengine Client通過(guò)SSL加密的連接定期的向服務(wù)器端發(fā)送請(qǐng)求以獲取最新的配置文件和管理命令、腳本程序、補(bǔ)丁安裝等任務(wù)。

    有了Cfengine 這種集中式的服務(wù)器管理工具,我們就可以高效的實(shí)現(xiàn)大規(guī)模的服務(wù)器集群管理,被管理服務(wù)器和 Cfengine Server 可以分布在任何位置,只要網(wǎng)絡(luò)可以連通就能實(shí)現(xiàn)快速自動(dòng)化的管理。

    代碼發(fā)布系統(tǒng)

    結(jié)構(gòu)圖:

    隨著網(wǎng)站訪(fǎng)問(wèn)流量的不斷增加,大多的網(wǎng)絡(luò)服務(wù)都是以負(fù)載均衡集群的方式對(duì)外提供服務(wù),隨之集群規(guī)模的擴(kuò)大,為了滿(mǎn)足集群環(huán)境下程序代碼的批量分發(fā)和更新,我們還需要一個(gè)程序代碼發(fā)布系統(tǒng)。

    這個(gè)發(fā)布系統(tǒng)可以幫我們實(shí)現(xiàn)下面的目標(biāo):

    1) 生產(chǎn)環(huán)境的服務(wù)器以虛擬主機(jī)方式提供服務(wù),不需要開(kāi)發(fā)人員介入維護(hù)和直接操作,提供發(fā)布系統(tǒng)可以實(shí)現(xiàn)不需要登陸服務(wù)器就能把程序分發(fā)到目標(biāo)服務(wù)器。

    2) 我們要實(shí)現(xiàn)內(nèi)部開(kāi)發(fā)、內(nèi)部測(cè)試、生產(chǎn)環(huán)境測(cè)試、生產(chǎn)環(huán)境發(fā)布的4個(gè)開(kāi)發(fā)階段的管理,發(fā)布系統(tǒng)可以介入各個(gè)階段的代碼發(fā)布。

    3) 我們需要實(shí)現(xiàn)源代碼管理和版本控制,SVN可以實(shí)現(xiàn)該需求。

    這里面可以使用常用的工具Rsync,通過(guò)開(kāi)發(fā)相應(yīng)的腳本工具實(shí)現(xiàn)服務(wù)器集群間代碼同步分發(fā)。

    posted @ 2010-08-04 20:24 筱 筱 閱讀(201) | 評(píng)論 (0)編輯 收藏

    管道:"|"
        將一個(gè)命令的輸出作為下一個(gè)命令的輸入
        例:ls | grep text            --這個(gè)命令將查找當(dāng)前目錄下名稱(chēng)中包含text的目錄或者文件
    xargs:
        將一個(gè)命令的輸入作為下一個(gè)命令的參數(shù)
        例:ls | xargs grep -i text        --這個(gè)命令將當(dāng)前目下的所有文件作為參數(shù)傳遞給grep來(lái)查找文件中是否包含"text" 
             find . | xargs grep "user"    --查詢(xún)當(dāng)前目錄及其子目錄下所有內(nèi)容中包含"user"的文件
    posted @ 2010-07-19 00:19 筱 筱 閱讀(376) | 評(píng)論 (0)編輯 收藏

    mysql:select * from 表名 order by rand() limit 10;
    sql server:select top 10 * from 表名 order by newid();
    oracle:select * from(select * from 表名 order by dbms_random.value) where rownum<=20;
    access:select top 10 * from 表名 order by rnd(ID)
    posted @ 2010-05-09 22:35 筱 筱 閱讀(698) | 評(píng)論 (0)編輯 收藏

    樣式代碼如下:
    html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }
    需要最新網(wǎng)頁(yè)標(biāo)準(zhǔn)支持:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    Flash要在object標(biāo)簽中加入如下代碼:
    <param value="false" name="menu"/>
    <param value="opaque" name="wmode"/>
    posted @ 2010-04-21 12:19 筱 筱 閱讀(234) | 評(píng)論 (0)編輯 收藏

    1、下載wamp5,安裝wamp5,如需更改端口請(qǐng)修改Apache配置文件,更改端口(如:8888)后還需要更改wamp根目錄wampmanager.ini文件中的以下地方
        Type: item; Caption: "Localhost"; Action: run; FileName: "C:\WINDOWS\explorer.exe"; Parameters: "http://localhost:8888/"; Glyph: 5
        Type: item; Caption: "phpMyAdmin"; Action: run; FileName: "C:\WINDOWS\explorer.exe"; Parameters: "http://localhost:8888/phpmyadmin/"; Glyph: 5
        Type: item; Caption: "SQLiteManager"; Action: run; FileName: "C:\WINDOWS\explorer.exe"; Parameters: "http://localhost:8888/sqlitemanager/"; Glyph: 5
    2、安裝后訪(fǎng)問(wèn)首頁(yè)http://localhost:8888,點(diǎn)擊phpinfo()查看php信息,如果只顯示如下信息:
        This program makes use of the Zend Scripting Language Engine:
        Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
        查看php目錄下的php.ini文件,沒(méi)有[Zend]塊,表明ZendOptimizer沒(méi)有安裝
    3、下載ZendOptimizer,安裝路徑選擇D:\Program Files\Zend,選擇apache2.x及php.ini的位置,安裝完成后php.ini最后會(huì)添加以下內(nèi)容:
        [Zend]
        zend_extension_manager.optimizer_ts="D:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
        zend_extension_ts="D:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"
    4、訪(fǎng)問(wèn)http://loalhost:8888/ppframe進(jìn)行ppframe的安裝,安裝成功后登陸后臺(tái),如果沒(méi)有安裝ZendOptimizer,左側(cè)的exam是打不開(kāi)的,但是passport可以打開(kāi)。

    posted @ 2010-04-19 15:00 筱 筱 閱讀(483) | 評(píng)論 (0)編輯 收藏

    1、如果頁(yè)面有<base/>標(biāo)簽的則要在js引入后再添加<base target="_self" />;

    2、在<script/>中添加屬性defer="defer";

    posted @ 2010-03-31 17:28 筱 筱 閱讀(411) | 評(píng)論 (0)編輯 收藏

    比如java向txt文件中寫(xiě)入新的一行時(shí),java獲得文本輸入框中的新行時(shí)等
    Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即“\r”;
    Windows系統(tǒng)里面,每行結(jié)尾是“<換行><回車(chē)>”,即“\r\n”;
    Mac系統(tǒng)里,每行結(jié)尾是“<回車(chē)>”,即“\n”。
    一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開(kāi)的話(huà),所有文字會(huì)變成一行;
    而Windows里的文件在Unix/Mac下打開(kāi)的話(huà),在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)。

    posted @ 2010-03-31 13:37 筱 筱 閱讀(2371) | 評(píng)論 (2)編輯 收藏

    如果已經(jīng)配置mysql的環(huán)境變量,請(qǐng)直接執(zhí)行:mysql -u 輸入用戶(hù)名 -p 回車(chē) 之后輸入密碼
    如果未配置環(huán)境變量請(qǐng)先進(jìn)入mysql的bin目錄下
    執(zhí)行如下語(yǔ)句導(dǎo)入:source 輸入sql文件的位置
    執(zhí)行如下語(yǔ)句導(dǎo)出:mysqldump -u輸入用戶(hù)名 -p輸入密碼 數(shù)據(jù)庫(kù)名 表名 >文件名.sql

    posted @ 2010-01-19 11:26 筱 筱 閱讀(280) | 評(píng)論 (0)編輯 收藏

    服務(wù)端:http://labs.northscale.com/memcached-packages/
    客戶(hù)端:http://code.google.com/p/memcached/wiki/Clients/
    posted @ 2009-12-31 10:57 筱 筱 閱讀(428) | 評(píng)論 (1)編輯 收藏

    1、安裝jdk --> D:\Program Files\Java\jdk1.5.0
    2、配置JAVA_HOME --> D:\Program Files\Java\jdk1.5.0
    3、解壓tomcat5.5 --> D:\Program Files\Apache Software Foundation\Tomcat 5.5
    4、打開(kāi)cmd,進(jìn)入到tomcat5.5bin目錄 --> D:\Program Files\Apache Software Foundation\Tomcat 5.5\bin>
    5、執(zhí)行命令:service install tomcat
            執(zhí)行結(jié)果為:
                Installing the service 'tomcat' ...
                Using CATALINA_HOME:    D:\Program Files\Apache Software Foundation\Tomcat 5.5
                Using CATALINA_BASE:    D:\Program Files\Apache Software Foundation\Tomcat 5.5
                Using JAVA_HOME:        D:\Program Files\Java\jdk1.5.0
                Using JVM:              D:\Program Files\Java\jdk1.5.0\jre\bin\server\jvm.dll
                The service 'tomcat' has been installed.
            此時(shí)產(chǎn)生名為:Apache Tomcat tomcat 的服務(wù)
    6、卸載命令:service remove tomcat
            執(zhí)行結(jié)果為:
                The service 'tomcat' has been removed

    posted @ 2009-12-25 15:12 筱 筱 閱讀(669) | 評(píng)論 (0)編輯 收藏

    @echo off
    rem 這段代碼的作用是對(duì)mysql進(jìn)行查詢(xún)操作,并將查詢(xún)結(jié)果寫(xiě)入到result.txt文件中
    echo %TIME%
    set errorlevel=0
    set path_bin_mysql="D:\Program Files\mysql_1\bin\mysql"
    set host=localhost
    set port=3308
    set database_mysql=mysql
    set user_mysql=root
    set password_mysql=admin
    %path_bin_mysql% -u%user_mysql% -p%password_mysql% -h%host% -P%port% %database_mysql%< test.sql >

    result.txt
    pause

    posted @ 2009-11-30 17:17 筱 筱 閱讀(357) | 評(píng)論 (0)編輯 收藏

    千萬(wàn)人同時(shí)訪(fǎng)問(wèn)的網(wǎng)站,一般是有很多個(gè)數(shù)據(jù)庫(kù)同時(shí)工作,說(shuō)明白一點(diǎn)就是數(shù)據(jù)庫(kù)集群和并發(fā)控制,這樣的網(wǎng)站實(shí)時(shí)性也是相對(duì)的。這些網(wǎng)站都有一些共同的特點(diǎn):數(shù)據(jù)量大,在線(xiàn)人數(shù)多,并發(fā)請(qǐng)求多,pageview高,響應(yīng)速度快??偨Y(jié)了一下各個(gè)大網(wǎng)站的架構(gòu),主要提高效率及穩(wěn)定性的幾個(gè)地方包括:

      1、程序

      程序開(kāi)發(fā)是一方面,系統(tǒng)架構(gòu)設(shè)計(jì)(硬件+網(wǎng)絡(luò)+軟件)是另一方面。

      軟件架構(gòu)方面,做網(wǎng)站首先需要很多web服務(wù)器存儲(chǔ)靜態(tài)資源,比如圖片、視頻、靜態(tài)頁(yè)等,千萬(wàn)不要把靜態(tài)資源和應(yīng)用服務(wù)器放在一起。

      一個(gè)好的程序員寫(xiě)出來(lái)的程序會(huì)非常簡(jiǎn)潔、性能很好,一個(gè)初級(jí)程序員可能會(huì)犯很多低級(jí)錯(cuò)誤,這也是影響網(wǎng)站性能的原因之一。

      網(wǎng)站要做到效率高,不光是程序員的事情,數(shù)據(jù)庫(kù)優(yōu)化、程序優(yōu)化這是必須的,在性能優(yōu)化上要數(shù)據(jù)庫(kù)和程序齊頭并進(jìn)!緩存也是兩方面同時(shí)入手。第一,數(shù)據(jù)庫(kù)緩存和數(shù)據(jù)庫(kù)優(yōu)化,這個(gè)由dba完成(而且這個(gè)有非常大的潛力可挖,只是由于我們都是程序員而忽略了他而已)。第二,程序上的優(yōu)化,這個(gè)非常的有講究,比如說(shuō)重要一點(diǎn)就是要規(guī)范SQL語(yǔ)句,少用in 多用or,多用preparestatement,另外避免程序冗余如查找數(shù)據(jù)少用雙重循環(huán)等。另外選用優(yōu)秀的開(kāi)源框架加以支持,我個(gè)人認(rèn)為中后臺(tái)的支持是最最重要的,可以選取spring+ibatis。因?yàn)閕batis直接操作SQL并有緩存機(jī)制。spring的好處就不用我多說(shuō)了,IOC的機(jī)制可以避免new對(duì)象,這樣也節(jié)省開(kāi)銷(xiāo)。據(jù)我分析,絕大部分的開(kāi)銷(xiāo)就是在NEW的時(shí)候和連接數(shù)據(jù)庫(kù)時(shí)候產(chǎn)生的,請(qǐng)盡量避免。另外可以用一些內(nèi)存測(cè)試工具來(lái)做一個(gè)demo說(shuō)明hibernate和ibatis誰(shuí)更快!前臺(tái)你想用什么就用什么,struts,webwork都成,如果覺(jué)得自己挺牛X可以試試tapestry。

      用數(shù)據(jù)庫(kù)也未必不能解決訪(fǎng)問(wèn)量巨大所帶來(lái)的問(wèn)題,作成靜態(tài)文件硬盤(pán)的尋址時(shí)間也未必少于數(shù)據(jù)庫(kù)的搜索時(shí)間,當(dāng)然對(duì)資料的索引要下一翻工夫。我自己覺(jué)得門(mén)戶(hù)往往也就是當(dāng)天、熱門(mén)的資料點(diǎn)擊率較高,將其做緩存最多也不過(guò)1~2G的數(shù)據(jù)量吧,舉個(gè)例子:

    拿網(wǎng)易新聞來(lái)http://news.163.com/07/0606/09/3GA0D10N00011229.html

      格式化一下,方便理解:http://域名/年/月日/新聞所屬分類(lèi)/新聞ID.html

      可以把當(dāng)天發(fā)布的、熱門(mén)的、流攬量大的作個(gè)緩寸,用hashtable(key:年-月-日-分類(lèi)-ID,value:新聞對(duì)象),靜態(tài)將其放到內(nèi)存(速度絕對(duì)快過(guò)硬盤(pán)尋址靜態(tài)頁(yè)面)。

    通常是采用oracle存儲(chǔ)過(guò)程+2個(gè)weblogic,更新機(jī)制也幾乎一樣每簽發(fā)一條新聞,就會(huì)生成靜態(tài)頁(yè)面,然后發(fā)往前端的web服務(wù)器,前端的web都是做負(fù)載均衡的。另外還有定時(shí)的程序,每5-15分鐘自動(dòng)生成一次。在發(fā)布新聞的同時(shí)將數(shù)據(jù)緩存。當(dāng)然緩存也不會(huì)越來(lái)越大,在個(gè)特定的時(shí)間段(如凌晨)剔除過(guò)期的數(shù)據(jù)。做一個(gè)大的網(wǎng)站遠(yuǎn)沒(méi)有想象中那么簡(jiǎn)單,服務(wù)器基本就要百十個(gè)的。

      這樣可以大大增加一臺(tái)計(jì)算機(jī)的處理速度,如果一臺(tái)機(jī)器處理不了,可以用httpserver集群來(lái)解決問(wèn)題了。


      2、網(wǎng)絡(luò)
      中國(guó)的網(wǎng)絡(luò)分南北電信和網(wǎng)通,訪(fǎng)問(wèn)的ip就要區(qū)分南北進(jìn)入不同的網(wǎng)絡(luò)。


      3、集群
      通常會(huì)使用CDN與GSBL與DNS負(fù)載均衡技術(shù),每個(gè)地區(qū)一組前臺(tái)服務(wù)器群,例如:網(wǎng)易,百度使用了DNS負(fù)載均衡技術(shù),每個(gè)頻道一組前臺(tái)服務(wù)器,一搜使用了DNS負(fù)載技術(shù),所有頻道共用一組前臺(tái)服務(wù)器集群。

      網(wǎng)站使用基于Linux集群的負(fù)載均衡,失敗恢復(fù),包括應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器,基于linux-ha的服務(wù)狀態(tài)檢測(cè)及高可用化。

      應(yīng)用服務(wù)器集群可以采用apache+tomcat集群和weblogic集群等;web服務(wù)器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,方法很多,可以根據(jù)情況選擇。

     4、數(shù)據(jù)庫(kù)

      因?yàn)槭乔f(wàn)人同時(shí)訪(fǎng)問(wèn)的網(wǎng)站,所以一般是有很多個(gè)數(shù)據(jù)庫(kù)同時(shí)工作的,說(shuō)明白一點(diǎn)就是數(shù)據(jù)庫(kù)集群和并發(fā)控制,數(shù)據(jù)分布到地理位置不同的數(shù)據(jù)中心,以免發(fā)生斷電事故。另外還有一點(diǎn)的是,那些網(wǎng)站的靜態(tài)化網(wǎng)頁(yè)并不是真的,而是通過(guò)動(dòng)態(tài)網(wǎng)頁(yè)與靜態(tài)網(wǎng)頁(yè)網(wǎng)址交換做出現(xiàn)的假象,這可以用urlrewrite 這樣的開(kāi)源網(wǎng)址映射器實(shí)現(xiàn)。這樣的網(wǎng)站實(shí)時(shí)性也是相對(duì)的,因?yàn)樵跀?shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)的時(shí)候有一個(gè)過(guò)程,一般在技術(shù)上可以用到hibernate和 ecache,但是如果要使網(wǎng)站工作地更好,可以使用EJB和websphere,weblogic這樣大型的服務(wù)器來(lái)支持,并且要用oracle這樣的大型數(shù)據(jù)庫(kù)。

      大型門(mén)戶(hù)網(wǎng)站不建議使用Mysql數(shù)據(jù)庫(kù),除非你對(duì)Mysql數(shù)據(jù)的優(yōu)化非常熟悉。Mysql數(shù)據(jù)庫(kù)服務(wù)器的master-slave模式,利用數(shù)據(jù)庫(kù)服務(wù)器在主從服務(wù)器間進(jìn)行同步,應(yīng)用只把數(shù)據(jù)寫(xiě)到主服務(wù)器,而讀數(shù)據(jù)時(shí)則根據(jù)負(fù)載選擇一臺(tái)從服務(wù)器或者主服務(wù)器來(lái)讀取,將數(shù)據(jù)按不同策略劃分到不同的服務(wù)器(組)上,分散數(shù)據(jù)庫(kù)壓力。

      大型網(wǎng)站要用oracle,數(shù)據(jù)方面操作盡量多用存儲(chǔ)過(guò)程,絕對(duì)提升性能;同時(shí)要讓DBA對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化,優(yōu)化后的數(shù)據(jù)庫(kù)與沒(méi)優(yōu)化的有天壤之別;同時(shí)還可以擴(kuò)展分布式數(shù)據(jù)庫(kù),以后這方面的研究會(huì)越來(lái)越多;


      5、頁(yè)面

      從開(kāi)始就考慮使用虛擬存儲(chǔ)/簇文件系統(tǒng)。它能讓你大量并行IO訪(fǎng)問(wèn),而且不需要任何重組就能夠增加所需要的磁盤(pán)。

      頁(yè)面數(shù)據(jù)調(diào)用更要認(rèn)真設(shè)計(jì),一些數(shù)據(jù)查詢(xún)可以不通過(guò)數(shù)據(jù)庫(kù)的方式,實(shí)時(shí)性要求不高的可以使用lucene來(lái)實(shí)現(xiàn),即使有實(shí)時(shí)性的要求也可以用lucene,lucene+compass還是非常優(yōu)秀的。

      新聞?lì)惖木W(wǎng)站可以用靜態(tài)頁(yè)存儲(chǔ),采用定時(shí)更新機(jī)制減輕服務(wù)器負(fù)擔(dān);首頁(yè)每個(gè)小模塊可以使用oscache緩存,這樣不用每次都拉數(shù)據(jù)。

      前端的基于靜態(tài)頁(yè)面緩存的web加速器,主要應(yīng)用有squid等。squid 將大部分靜態(tài)資源(圖片,js,css等)緩存起來(lái),直接返回給訪(fǎng)問(wèn)者,減少應(yīng)用服務(wù)器的負(fù)載網(wǎng)站的靜態(tài)化網(wǎng)頁(yè)并不是真的,而是通過(guò)動(dòng)態(tài)網(wǎng)頁(yè)與靜態(tài)網(wǎng)頁(yè)網(wǎng)址交換做出現(xiàn)的假象,這可以用urlrewrite這樣的開(kāi)源網(wǎng)址映射器實(shí)現(xiàn),后綴名為htm或者h(yuǎn)tml并不能說(shuō)明程序生成了靜態(tài)頁(yè)面,可能是通過(guò) url重寫(xiě)來(lái)實(shí)現(xiàn)的,為的只不過(guò)是在搜索引擎中提升自己網(wǎng)站的覆蓋面積罷了。

      生成靜態(tài)頁(yè)面的服務(wù)器和www服務(wù)器是兩組不同的服務(wù)器,頁(yè)面生成后才會(huì)到www服務(wù)器,一部分?jǐn)?shù)據(jù)庫(kù)并不是關(guān)系數(shù)據(jù)庫(kù),這樣更適合信息衍生,www、mail服務(wù)器、路由器多,主要用負(fù)載平衡解決訪(fǎng)問(wèn)瓶頸。

      靜態(tài)頁(yè)面的缺點(diǎn):

      1) 增加了程序的復(fù)雜度

      2) 不利于管理資料

      3) 速度不是最快

      4) 傷硬盤(pán)

      6、緩存

      從一開(kāi)始就應(yīng)該使用緩存,高速緩存是一個(gè)更好的地方存儲(chǔ)臨時(shí)數(shù)據(jù),比如Web站點(diǎn)上跟蹤一個(gè)特定用戶(hù)的會(huì)話(huà)產(chǎn)生的臨時(shí)文件,就不再需要記錄到數(shù)據(jù)庫(kù)里。

      不能用lucene實(shí)現(xiàn)的可以用緩存,分布式緩存可以用memcached,如果有錢(qián)的話(huà)用10來(lái)臺(tái)機(jī)器做緩存,> 10G的存儲(chǔ)量相信存什么都?jí)蛄?;如果沒(méi)錢(qián)的話(huà)可以在頁(yè)面緩存和數(shù)據(jù)緩存上下功夫,多用OSCACHE和EHCACHE,SWARMCACHE也可以,不過(guò)據(jù)說(shuō)同步性不是很好;

      可以使用Memcache進(jìn)行緩存,用大內(nèi)存把這些不變的數(shù)據(jù)全都緩存起來(lái),而當(dāng)修改時(shí)就通知cache過(guò)期,memcache是LJ開(kāi)發(fā)的一款分布式緩存產(chǎn)品,很多大型網(wǎng)站在應(yīng)用,我們可以把Cache Server與AppServer裝在一起。因?yàn)镃ache Server對(duì)CPU消耗不大,而有了Cache Server的支援,App Server對(duì)內(nèi)存要求也不是太高,所以可以和平共處,更有效的利用資源。
    posted @ 2009-11-30 16:50 筱 筱 閱讀(272) | 評(píng)論 (0)編輯 收藏


    將response內(nèi)響應(yīng)給使用者的內(nèi)容,使用GZIP壓縮的方式回傳給瀏覽器,而IE5和NS6也都有支持Gzip的壓縮格式。
    這個(gè)方法在之前就有人提出過(guò),因?yàn)槭亲尵W(wǎng)頁(yè)在輸出時(shí)經(jīng)過(guò)壓縮,可以讓傳輸量變小很多,雖然現(xiàn)在的網(wǎng)絡(luò)頻寬對(duì)于用來(lái)看網(wǎng)頁(yè)已經(jīng)綽綽有余,但是檔案大小太大的網(wǎng)頁(yè)還是會(huì)造成一定的影響。
    經(jīng)過(guò)Gzip壓縮過(guò)的網(wǎng)頁(yè),檔案大小可以到原本壓縮前的20%。

    package com.jsptw.filter;
    import java.io.*;
    import java.util.zip.GZIPOutputStream;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class GZIPEncodeFilter implements Filter {
          public void init(FilterConfig filterConfig) {}
          public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain)
                                          throws IOException, ServletException {       
            String transferEncoding = getGZIPEncoding((HttpServletRequest)request);       
            if (transferEncoding == null) {           
              chain.doFilter(request, response);       
            } else{         
              ((HttpServletResponse)response).setHeader("Content-Encoding", transferEncoding);
                GZIPEncodableResponse wrappedResponse = new GZIPEncodableResponse((HttpServletResponse)response);
                chain.doFilter(request, wrappedResponse);         
                wrappedResponse.flush();       
            }   
          }   
          public void destroy() {}   
          private static String getGZIPEncoding(HttpServletRequest request) {       
            String acceptEncoding = request.getHeader("Accept-Encoding");       
              if (acceptEncoding == null)
                return null;       
              acceptEncoding = acceptEncoding.toLowerCase();       
              if (acceptEncoding.indexOf("x-gzip") >= 0) {
                return "x-gzip";
              }       
              if (acceptEncoding.indexOf("gzip") >= 0) {           
                return "gzip";       
              }       
              return null;   
          }   
         
          private class GZIPEncodableResponse extends HttpServletResponseWrapper {       
            private GZIPServletStream wrappedOut;       
              public GZIPEncodableResponse(HttpServletResponse response) throws IOException {          
                super(response);           
                  wrappedOut = new GZIPServletStream(response.getOutputStream());       
              }       
              public ServletOutputStream getOutputStream() throws IOException {           
                return wrappedOut;       
              }       
              private PrintWriter wrappedWriter;       
              public PrintWriter getWriter() throws IOException {           
                if (wrappedWriter == null) {               
                    wrappedWriter = new PrintWriter( new OutputStreamWriter( getOutputStream(), getCharacterEncoding()));            }           
                     return wrappedWriter;       
                  }       
              public void flush() throws IOException {           
                if (wrappedWriter != null) {              
                    wrappedWriter.flush();           
                  }          
                  wrappedOut.finish();       
              }   
          }   
         
          private class GZIPServletStream extends ServletOutputStream {       
            private GZIPOutputStream outputStream;       
              public GZIPServletStream(OutputStream source) throws IOException {           
             outputStream = new GZIPOutputStream(source);       
           }       
           public void finish() throws IOException {
             OutputStream.finish();       
           }       
          public void write(byte[] buf) throws IOException {           
            outputStream.write(buf);       
          }       
          public void write(byte[] buf, int off, int len) throws IOException {           
            outputStream.write(buf, off, len);       
          }       
          public void write(int c) throws IOException {           
            outputStream.write(c);       
          }       
          public void flush() throws IOException {           
            outputStream.flush();       
          }      
          public void close() throws IOException {           
            outputStream.close();        
          }   
        }
    }


    web.xml中的設(shè)定為:
    <filter>       
    <filter-name>GZIPEncoder</filter-name>       
    <filter-class>com.jsptw.filter.GZIPEncodeFilter</filter-class>
    </filter>

    <filter-mapping> 
    <filter-name> GZIPEncoder</filter-name> 
    <url-pattern>/*</url-pattern>
    </filter-mapping> 

     

    本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/a_heng/archive/2009/09/22/4579979.aspx

    posted @ 2009-11-30 16:26 筱 筱 閱讀(289) | 評(píng)論 (0)編輯 收藏

    一 簡(jiǎn)單加密(不可逆):
            MD5(信息摘要算法,Message Digest),SHA(安全散列算法,Secure Hash,Algorithm)、HMAC(散列消息鑒別碼,Hash Message Authentication Code)

    二 復(fù)雜算法:
            1、對(duì)稱(chēng)加密:加密解密使用相同的密鑰:DES(Data Encryption Standard,數(shù)據(jù)加密算法) 、IDEA、RC2、RC4、SKIPJACK
            2、非對(duì)稱(chēng)加密:分為公開(kāi)密鑰(publickey)和私有密鑰(privatekey),且公開(kāi)密鑰與私有密鑰是一對(duì)。非對(duì)稱(chēng)加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過(guò)程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開(kāi);得到該公用密鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專(zhuān)用密鑰對(duì)加密后的信息進(jìn)行解密。甲方只能用其專(zhuān)用密鑰解密由其公用密鑰加密后的任何信息。非對(duì)稱(chēng)加密算法的保密性比較好,它消除了最終用戶(hù)交換密鑰的需要,但加密和解密花費(fèi)時(shí)間長(zhǎng)、速度慢,它不適合于對(duì)文件加密而只適用于對(duì)少量數(shù)據(jù)進(jìn)行加密。經(jīng)典的非對(duì)稱(chēng)加密算法如RSA(三個(gè)人名:Ron Rivest, AdiShamir 和Leonard Adleman)算法等安全性都相當(dāng)高。

    posted @ 2009-11-05 11:30 筱 筱 閱讀(192) | 評(píng)論 (0)編輯 收藏

    Insert是T-sql中常用語(yǔ)句,Insert INTO table(field1,field2,...) values(value1,value2,...)這種形式的在應(yīng)用程序開(kāi)發(fā)中必不可少。但我們?cè)陂_(kāi)發(fā)、測(cè)試過(guò)程中,經(jīng)常會(huì)遇到需要表復(fù)制的情況,如將一個(gè)table1的數(shù)據(jù)的部分字段復(fù)制到table2中,或者將整個(gè)table1復(fù)制到table2中,這時(shí)候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表復(fù)制語(yǔ)句了。

          1.INSERT INTO SELECT語(yǔ)句

          語(yǔ)句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

          要求目標(biāo)表Table2必須存在,由于目標(biāo)表Table2已經(jīng)存在,所以我們除了插入源表Table1的字段外,還可以插入常量。示例如下:

    select into與insert into select - xiaolei_funny - 一葉知秋 的博客select into與insert into select - xiaolei_funny - 一葉知秋 的博客INSERT INTO SELECT語(yǔ)句復(fù)制表數(shù)據(jù)

       --1.創(chuàng)建測(cè)試表

        create TABLE Table1

        (

            a varchar(10),

            b varchar(10),

            c varchar(10),

            CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED

            (

                a ASC

            )

        ) ON [PRIMARY]

        create TABLE Table2

        (

            a varchar(10),

            c varchar(10),

            d int,

            CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED

            (

                a ASC

            )

        ) ON [PRIMARY]

        GO

        --2.創(chuàng)建測(cè)試數(shù)據(jù)

        Insert into Table1 values('趙','asds','90')

        Insert into Table1 values('錢(qián)','asds','100')

        Insert into Table1 values('孫','asds','80')

        Insert into Table1 values('李','asds',null)

        GO

        select * from Table2

        --3.INSERT INTO SELECT語(yǔ)句復(fù)制表數(shù)據(jù)

        Insert into Table2(a, c, d) select a,c,5 from Table1

        GO

        --4.顯示更新后的結(jié)果

        select * from Table2

        GO

        --5.刪除測(cè)試表

        drop TABLE Table1

        drop TABLE Table2

          2.SELECT INTO FROM語(yǔ)句

          語(yǔ)句形式為:SELECT vale1, value2 into Table2 from Table1

          要求目標(biāo)表Table2不存在,因?yàn)樵诓迦霑r(shí)會(huì)自動(dòng)創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。示例如下:

    select into與insert into select - xiaolei_funny - 一葉知秋 的博客select into與insert into select - xiaolei_funny - 一葉知秋 的博客SELECT INTO FROM創(chuàng)建表并復(fù)制表數(shù)據(jù)

       --1.創(chuàng)建測(cè)試表

        create TABLE Table1

        (

            a varchar(10),

            b varchar(10),

            c varchar(10),

            CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED

            (

                a ASC

            )

        ) ON [PRIMARY]

        GO

        --2.創(chuàng)建測(cè)試數(shù)據(jù)

        Insert into Table1 values('趙','asds','90')

        Insert into Table1 values('錢(qián)','asds','100')

        Insert into Table1 values('孫','asds','80')

        Insert into Table1 values('李','asds',null)

        GO

        --3.SELECT INTO FROM語(yǔ)句創(chuàng)建表Table2并復(fù)制數(shù)據(jù)

        select a,c INTO Table2 from Table1

        GO

        --4.顯示更新后的結(jié)果

        select * from Table2

        GO

        --5.刪除測(cè)試表

        drop TABLE Table1

        drop TABLE Table2

    posted @ 2009-11-04 13:21 筱 筱 閱讀(474) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲精品无码av人在线观看| 亚洲中文字幕乱码熟女在线| 免费精品国产自产拍在线观看| 日韩免费人妻AV无码专区蜜桃| 免费日本黄色网址| 亚洲伊人久久大香线蕉影院| 999zyz**站免费毛片| 亚洲 小说区 图片区 都市| 亚洲三级在线免费观看| 久久国产乱子伦精品免费看| 亚洲av再在线观看| 亚洲一区二区三区丝袜| 亚洲一区在线免费观看| 亚洲国产精品成人久久| 一区二区三区精品高清视频免费在线播放 | 最近的免费中文字幕视频| 亚洲精品高清视频| a级毛片免费观看在线| 国产成人免费A在线视频| 国产亚洲国产bv网站在线 | 亚洲免费视频观看| 久久久久久亚洲精品| 丰满妇女做a级毛片免费观看| 影音先锋在线免费观看| 亚洲一区二区三区亚瑟| 24小时免费看片| 亚洲AV成人片色在线观看高潮| 精品一区二区三区高清免费观看| 免费在线不卡视频| 亚洲av成人无码网站…| 在线免费观看一级毛片| 久久综合久久综合亚洲| 91免费国产在线观看| 亚洲人色大成年网站在线观看| 99久久99久久免费精品小说| 亚洲国产成人一区二区三区| 99久久免费国产精精品| 亚洲女久久久噜噜噜熟女| 久久99久久成人免费播放| 亚洲性日韩精品国产一区二区| 香蕉国产在线观看免费|