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

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

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

    2009年12月30日

    c++ difference from java
    1. take charge of object management , negotiate ownershiop ,use scoped_ptr,
       not to transfer other's ownership
    2. use c++ template to express seperation corncern ,such as (static)polymorphy and policy
    3. disable copy constructor and assign operator by yourself
    4. polymorphy by pointer
    5. 使用 template ,macro 取得類似動(dòng)態(tài)語(yǔ)言的能力
    6. 偏好無狀態(tài)的 函數(shù)
    posted @ 2010-02-03 11:43 西津渡 閱讀(260) | 評(píng)論 (0)編輯 收藏
     
        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文
    posted @ 2010-01-15 12:22 西津渡 閱讀(100) | 評(píng)論 (0)編輯 收藏
     

    Myisam is preferred without transaction and little update(delete)

    Big than 4G datafile can user Myisam merge table.

    InnoDB with auto_increment primary key is preferred.

    Few storage process

    Guess: 20m records max per table , 500G data max per tablespace , 256 tables per database (may problem)

    Use prepared statement and  batch

    Optimize Your Queries For the Query Cache

    // query cache does NOT work
    $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");
     
    // query cache works!
    $today = date("Y-m-d");
    $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");

    EXPLAIN Your SELECT Queries

    LIMIT 1 When Getting a Unique Row

    Index and Use Same Column Types for Joins

    Do Not ORDER BY RAND()

    Avoid SELECT *

    t is a good habit to always specify which columns you need when you are doing your SELECT’s.

    Use ENUM over VARCHAR

    Use NOT NULL If You Can

    Store IP Addresses as UNSIGNED INT (?)

    Fixed-length (Static) Tables are Faster

    Vertical Partitioning

    Vertical Partitioning is the act of splitting your table structure in a vertical manner for optimization reasons.

    Example 1: You might have a users table that contains home addresses, that do not get read often. You can choose to split your table and store the address info on a separate table. This way your main users table will shrink in size. As you know, smaller tables perform faster.

    Example 2: You have a “last_login” field in your table. It updates every time a user logs in to the website. But every update on a table causes the query cache for that table to be flushed. You can put that field into another table to keep updates to your users table to a minimum.

    But you also need to make sure you don’t constantly need to join these 2 tables after the partitioning or you might actually suffer performance decline.

    Split the Big DELETE or INSERT Queries

    If you have some kind of maintenance script that needs to delete large numbers of rows, just use the LIMIT clause to do it in smaller batches to avoid this congestion.

    Smaller Columns Are Faster

    Use an Object Relational Mapper

    f you do not need the time component, use DATE instead of DATETIME.

    Consider horizontally spitting many-columned tables if they contain a lot of NULLs or rarely used columns.

    Be an SQL programmer who thinks in sets, not procedural programming paradigms

    InnoDB can’t optimize SELECT COUNT(*) queries. Use counter tables! That’s how to scale InnoDB.

    Prefer MM with hive

    refer :

    http://blog.tuvinh.com/top-20-mysql-best-practices/

    posted @ 2010-01-05 13:38 西津渡 閱讀(388) | 評(píng)論 (0)編輯 收藏
     
        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文
    posted @ 2010-01-04 15:11 西津渡 閱讀(77) | 評(píng)論 (0)編輯 收藏
     

    從時(shí)序圖中可以看到,createNewIO()就是新建了一個(gè)com.mysql.jdbc.MysqlIO,利用 com.mysql.jdbc.StandardSocketFactory來創(chuàng)建一個(gè)socket。然后就由這個(gè)mySqlIO來與MySql服務(wù)器進(jìn)行握手(doHandshake()),這個(gè)doHandshake主要用來初始化與Mysql server的連接,負(fù)責(zé)登陸服務(wù)器和處理連接錯(cuò)誤。在其中會(huì)分析所連接的mysql server的版本,根據(jù)不同的版本以及是否使用SSL加密數(shù)據(jù)都有不同的處理方式,并把要傳輸給數(shù)據(jù)庫(kù)server的數(shù)據(jù)都放在一個(gè)叫做packet的 buffer中,調(diào)用send()方法往outputStream中寫入要發(fā)送的數(shù)據(jù)。


    useServerPreparedStmts置為true的話,mysql驅(qū)動(dòng)可以通過PreparedStatement的子類ServerPreparedStatement來實(shí)現(xiàn)真正的PreparedStatement的功能




    第一位表示數(shù)據(jù)包的開始位置,就是數(shù)據(jù)存放的起始位置,一般都設(shè)置為0,就是從第一個(gè)位置開始。第二和第三個(gè)字節(jié)標(biāo)識(shí)了這個(gè)數(shù)據(jù)包的大小,注意的是,這個(gè)大小是出去標(biāo)識(shí)的4個(gè)字節(jié)的大小,對(duì)于非最后一個(gè)數(shù)據(jù)包來說,這個(gè)大小都是一樣的,就是splitSize,也就是maxThreeBytes,它的值是 255 * 255 * 255。
    最后一個(gè)字節(jié)中存放的就是數(shù)據(jù)包的編號(hào)了,從0開始遞增。
    在標(biāo)識(shí)位設(shè)置完畢之后,就可以把255 * 255 * 255大小的數(shù)據(jù)從我們準(zhǔn)備好的待發(fā)送數(shù)據(jù)包中copy出來了,注意,前4位已經(jīng)是標(biāo)識(shí)位了,所以應(yīng)該從第五個(gè)位置開始copy數(shù)據(jù)

     # packetToSend = compressPacket(headerPacket, HEADER_LENGTH,    
    #                 splitSize, HEADER_LENGTH); 

    LoadBalancingConnectionProxy
    package java.lang.reflect 。 proxy .


    http://developer.51cto.com/art/200907/137823.htm

    http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-implementation-notes.html

    PreparedStatements are implemented by the driver, as MySQL does not have a prepared statement feature. Because of this, the driver does not implement getParameterMetaData() or getMetaData() as it would require the driver to have a complete SQL parser in the client.

    Starting with version 3.1.0 MySQL Connector/J, server-side prepared statements and binary-encoded result sets are used when the server supports them.


    但這是不是說PreparedStatement沒用呢?不是的,PreparedStatement有其他的好處:
    1.代碼的可讀性和可維護(hù)性
    2.最重要的一點(diǎn)是極大地提高了安全性,可以防止SQL注入

    然后我又看了一些網(wǎng)上其他人的經(jīng)驗(yàn),基本和我的判斷一致,有兩點(diǎn)要特別提請(qǐng)大家注意:

    1.并不是說PreparedStatement在所有的DB上都不會(huì)提高效率,PreparedStatement需要服務(wù)器端的支持,比如在 Oracle上就會(huì)有顯著效果。上面說的測(cè)試都是在MySQL上測(cè)試的,我找到了一個(gè)MySQL架構(gòu)師的帖子,比較明確地說明了MySQL不支持 PreparedStatement。

    2.即便PreparedStatement不能提高性能,在少數(shù)使用時(shí)甚至?xí)档托?,但仍然?yīng)該使用PreparedStatement!因?yàn)槠渌? 處實(shí)在是太大了!當(dāng)然,當(dāng)SQL查詢比較復(fù)雜時(shí),可能PreparedStatement好處會(huì)更大,只是我沒有測(cè)試,不敢肯定。

    3.既然PreparedStatement不能提高效率,那PreparedStatement Pool也就沒有必要了。但可以看到每次新建Connection的開銷實(shí)在很大,因此Connection Pool絕對(duì)必要。



    posted @ 2009-12-30 12:41 西津渡 閱讀(381) | 評(píng)論 (0)編輯 收藏
     
    主站蜘蛛池模板: 国产精品亚洲综合天堂夜夜| 国产美女无遮挡免费网站| 成人福利在线观看免费视频| 亚洲电影在线播放| 国产美女亚洲精品久久久综合| 无码人妻精品一二三区免费| 精品国产麻豆免费人成网站| 黄页网站在线视频免费| 亚洲av无码片区一区二区三区| 国产亚洲成AV人片在线观黄桃| 国产一区在线观看免费| 国产麻豆视频免费观看| 国产精品99久久免费观看| 亚洲第一视频在线观看免费| 亚洲精品无码av片| 久久精品国产亚洲AV蜜臀色欲| 亚洲一区二区三区日本久久九| 自拍偷自拍亚洲精品情侣| 免费一级做a爰片性色毛片| 欧美日韩国产免费一区二区三区| 四虎国产精品永久免费网址 | 久久aⅴ免费观看| 精品乱子伦一区二区三区高清免费播放 | 亚洲av片不卡无码久久| 精品亚洲成a人片在线观看| 亚洲阿v天堂在线| 亚洲中文久久精品无码| 亚洲人AV永久一区二区三区久久| 国产精品无码免费视频二三区| 在线jyzzjyzz免费视频| 免费观看的a级毛片的网站| A级毛片内射免费视频| 欧洲精品成人免费视频在线观看 | 亚洲欧洲成人精品香蕉网| 狠狠色婷婷狠狠狠亚洲综合| 亚洲国产成人久久综合区| 亚洲成A∨人片天堂网无码| 亚洲精品NV久久久久久久久久| 久久久青草青青国产亚洲免观 | 亚洲国产品综合人成综合网站| 亚洲电影在线播放|