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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    #

    package com.abin.lee.algorithm.insert;
    import java.util.Arrays;
    public class InsertSort {
    public static void main(String[] args) {
    int[] input = {6,1,4,2,5,8,3,7,9,0};
    input = InsertSort.sort(input);
    System.out.println(Arrays.toString(input));
    }
    public static int[] sort(int[] input){
    int temp = 0;
    for(int i=0;i<input.length;i++){
    temp = input[i];
    int j=i-1;
    for(;j>=0&&temp<input[j];j--){
    input[j+1] = input[j];
    }
    input[j+1] = temp;
    }
    return input;
    }
    }
    posted @ 2014-10-19 01:20 abin 閱讀(373) | 評論 (0)編輯 收藏

    package com.abin.lee.algorithm.merge;
    import java.util.Arrays;
    /**
     * 歸并排序
     */
    public class MergeSort {
    public static void main(String[] args) {
    int[] input = {2,7,3,9,1,6,0,5,4,8};
    MergeSort.sort(input, 0, input.length-1);
    System.out.println("input="+Arrays.toString(input));
    }
    //首先分而自治
    /** 
         * 歸并排序 
         * 簡介:將兩個(或兩個以上)有序表合并成一個新的有序表 即把待排序序列分為若干個子序列,每個子序列是有序的。然后再把有序子序列合并為整體有序序列 
         * 時間復雜度為O(nlogn) 
         * 穩定排序方式 
         * @param nums 待排序數組 
         * @return 輸出有序數組 
         */  
    public static int[] sort(int[] input,int low,int high){
    int middle = (low+high)/2;
    if(low<high){
    //左邊
    sort(input,low,middle);
    //右邊
    sort(input,middle+1,high);
    //左右歸并
    merge(input,low,high,middle);
    }
    return input;
    }
    public static void merge(int[] input,int low,int high,int middle){
    int[] temp = new int[high-low+1];
    int i = low;//左指針
    int j = middle+1;//右指針
    int k=0;
    // 把較小的數先移到新數組中  
    while(i<=middle&&j<=high){
    if(input[i]<input[j]){
    temp[k++] = input[i++];
    }else{
    temp[k++] = input[j++];
    }
    }
    // 把左邊剩余的數移入數組  
    while(i<=middle){
    temp[k++] = input[i++];
    }
    // 把右邊邊剩余的數移入數組  
    while(j<=high){
    temp[k++] = input[j++];
    }
    // 把新數組中的數覆蓋input數組  
    for(int m=0;m<temp.length;m++){
    input[m+low] = temp[m];
    }
    }
    }
    posted @ 2014-10-17 18:31 abin 閱讀(608) | 評論 (0)編輯 收藏

    //遞歸性
    package com.abin.lee.algorithm.binary;
    public class BinarySearch {
    public static void main(String[] args) {
    int[] input = new int[]{2,3,4,5,6,7,8,9}; 
    int result = search(input, 5, 0, input.length-1);
    System.out.println("result="+result);
    }
    public static int search(int[] input,int data,int low,int high){
    int middle = (low+high)/2;
    if(data == input[middle]){
    return middle;
    }else if(data > input[middle]){
    return search(input, data, middle+1, high);
    }else if(data < input[middle]){
    return search(input, data, low, middle-1);
    }else{
    return -1;
    }
    }
    }


    //while循環型
    public static int binary(int[] input,int low,int high,int target){
    while(low <= high){
    int middle = (low+high)/2;
    if(input[middle]>target){
    high = middle-1;
    }else if(input[middle]<target){
    low = middle+1;
    }else{
    return middle;
    }
    }
    return -1;
    }
    posted @ 2014-10-11 00:03 abin 閱讀(347) | 評論 (0)編輯 收藏

    package com.abin.lee.algorithm.fast;
    public class SpeedSort {
    public static void main(String[] args) {
    int[] input = new int[]{1,6,3,5,2,4};
    quickSort(input, 0, input.length-1);
    for(int i=0;i<input.length;i++){
    System.out.println("input["+i+"]="+input[i]);
    }
    }
    //分為參照物的大小兩組
    public static int getMiddle(int[] input,int low,int high){
    int temp = input[low];
    while(low<high){
    while(low<high && input[high]>temp){
    high--;
    }
    input[low]=input[high];
    while(low<high && input[low]<temp){
    low++;
    }
    input[high]=input[low];
    }
    input[low]=temp;
    return low;
    }
    //分而自治
    public static void quickSort(int[] input,int low,int high){
    if(low<high){
    int middle = getMiddle(input, low, high);
    quickSort(input,low,middle-1);
    quickSort(input,middle+1,high);
    }
    }
    }


    快速排序 對冒泡排序的一種改進,若初始記錄序列按關鍵字有序或基本有序,蛻化為冒泡排序。使用的是遞歸原理,在所有同數量級O(n longn) 的排序方法中,其平均性能最好。就平均時間而言,是目前被認為最好的一種內部排序方法
    基本思想是:通過一躺排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
    三個指針: 第一個指針稱為pivotkey指針(樞軸),第二個指針和第三個指針分別為left指針和right指針,分別指向最左邊的值和最右邊的值。left指針和right指針從兩邊同時向中間逼近,在逼近的過程中不停的與樞軸比較,將比樞軸小的元素移到低端,將比樞軸大的元素移到高端,樞軸選定后永遠不變,最終在中間,前小后大。

    需要兩個函數:

    ① 遞歸函數  public static void quickSort(int[]n ,int left,int right)
    ② 分割函數(一趟快速排序函數) public static int partition(int[]n ,int left,int right)

    JAVA源代碼(成功運行)



    package testSortAlgorithm;
    public class QuickSort {
    public static void main(String[] args) {
    int [] array = {49,38,65,97,76,13,27};
    quickSort(array, 0, array.length - 1);
    for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
    }
    }
    /*先按照數組為數據原型寫出算法,再寫出擴展性算法。數組{49,38,65,97,76,13,27}
    * */
    public static void quickSort(int[]n ,int left,int right){
    int pivot;
    if (left < right) {
    //pivot作為樞軸,較之小的元素在左,較之大的元素在右
    pivot = partition(n, left, right);
    //對左右數組遞歸調用快速排序,直到順序完全正確
    quickSort(n, left, pivot - 1);
    quickSort(n, pivot + 1, right);
    }
    }
    public static int partition(int[]n ,int left,int right){
    int pivotkey = n[left];
    //樞軸選定后永遠不變,最終在中間,前小后大
    while (left < right) {
    while (left < right && n[right] >= pivotkey) --right;
    //將比樞軸小的元素移到低端,此時right位相當于空,等待低位比pivotkey大的數補上
    n[left] = n[right];
    while (left < right && n[left] <= pivotkey) ++left;
    //將比樞軸大的元素移到高端,此時left位相當于空,等待高位比pivotkey小的數補上
    n[right] = n[left];
    }
    //當left == right,完成一趟快速排序,此時left位相當于空,等待pivotkey補上
    n[left] = pivotkey;
    return left;
    }
    }




    posted @ 2014-10-10 23:43 abin 閱讀(395) | 評論 (0)編輯 收藏

    package com.abin.lee.list.test;
    public class SingleList {
    private Object obj;
    private transient SingleList singleList;
    private SingleList next;
    private SingleList pre;
    private transient int size;
    public SingleList() {
    singleList = new SingleList(null,null,null);
    singleList.next = singleList.pre = singleList;
    size=0;
    }
    public SingleList(Object obj,SingleList next,SingleList pre) {
    this.obj=obj;
    this.next=next;
    this.pre=pre;
    }
    public void add(Object obj){
    SingleList current = new SingleList(obj,singleList,singleList.pre);
    current.next.pre = current;
    current.pre.next = current;
    size++;
    singleList = current;
    }
    public int size(){
    return size;
    }
    public Object get(int index){
    SingleList current = singleList.next;
    for(int i=0;i<index;i++){
    current = current.next;
    }
    return current.obj;
    }
    public static void main(String[] args) {
    SingleList single = new SingleList();
    for(int i=0;i<5;i++){
    single.add("abin"+i);
    }
    System.out.println("single="+single);
    int size = single.size();
    System.out.println("size="+size);
    Object element = single.get(0);
    System.out.println("element="+element);
    }
    }
    posted @ 2014-10-10 22:46 abin 閱讀(349) | 評論 (0)編輯 收藏

         摘要: 最近對程序占用內存方面做了一些優化,取得了不錯的效果,總結了一些經驗簡要說一下,相信會對大家寫出優質的程序有所幫助下面的論述針對32位系統,對64位系統不適用,后敘經常你寫了一個程序,一測試,功能沒問題,一看內存占用也不多,就不去考慮其它的東西了。但可能程序使用了一個什么數據結構,會當數據規模變大時,內存占用激增。基本&&關鍵的問題是,Java里各種東東占多少內存?????????...  閱讀全文
    posted @ 2014-08-01 16:54 abin 閱讀(426) | 評論 (0)編輯 收藏

    1、查看Web服務器(Nginx Apache)的并發請求數及其TCP連接狀態:
     
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    netstat -n|grep  ^tcp|awk '{print $NF}'|sort -nr|uniq -c
     
    或者:
    netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'
    返回結果一般如下:
     
    LAST_ACK 5 (正在等待處理的請求數)
    SYN_RECV 30
    ESTABLISHED 1597 (正常數據傳輸狀態)
    FIN_WAIT1 51
    FIN_WAIT2 504
    TIME_WAIT 1057 (處理完畢,等待超時結束的請求數)
     
    其他參數說明:
     
    CLOSED:無連接是活動的或正在進行
    LISTEN:服務器在等待進入呼叫
    SYN_RECV:一個連接請求已經到達,等待確認
    SYN_SENT:應用已經開始,打開一個連接
    ESTABLISHED:正常數據傳輸狀態
    FIN_WAIT1:應用說它已經完成
    FIN_WAIT2:另一邊已同意釋放
    ITMED_WAIT:等待所有分組死掉
    CLOSING:兩邊同時嘗試關閉
    TIME_WAIT:另一邊已初始化一個釋放
    LAST_ACK:等待所有分組死掉
     
    2、查看Nginx運行進程數
    ps -ef | grep nginx | wc -l
    返回的數字就是nginx的運行進程數,如果是apache則執行
    ps -ef | grep httpd | wc -l
     
    3、查看Web服務器進程連接數:
    netstat -antp | grep 80 | grep ESTABLISHED -c
     
    4、查看MySQL進程連接數:
    ps -axef | grep mysqld -c
     
    posted @ 2014-03-16 15:44 abin 閱讀(719) | 評論 (0)編輯 收藏

    第一方面:30種mysql優化sql語句查詢的方法
    1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
      2.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
      3.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
      select id from t where num is null
      可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:
      select id from t where num=0
      4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:
      select id from t where num=10 or num=20
      可以這樣查詢:
      select id from t where num=10
      union all
      select id from t where num=20
      5.下面的查詢也將導致全表掃描:
      select id from t where name like '%abc%'
      若要提高效率,可以考慮全文檢索。
      6.in 和 not in 也要慎用,否則會導致全表掃描,如:
      select id from t where num in(1,2,3)
      對于連續的數值,能用 between 就不要用 in 了:
      select id from t where num between 1 and 3
      7.如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:
      select id from t where num=@num
      可以改為強制查詢使用索引:
      select id from t with(index(索引名)) where num=@num
      8.應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。如:
      select id from t where num/2=100
      應改為:
      select id from t where num=100*2
      9.應盡量避免在where子句中對字段進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。如:
      select id from t where substring(name,1,3)='abc'--name以abc開頭的id
      select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'生成的id
      應改為:
      select id from t where name like 'abc%'
      select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'
      10.不要在 where 子句中的“=”左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引。
      11.在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,并且應盡可能的讓字段順序與索引順序相一致。
      12.不要寫一些沒有意義的查詢,如需要生成一個空表結構:
      select col1,col2 into #t from t where 1=0
      這類代碼不會返回任何結果集,但是會消耗系統資源的,應改成這樣:
      create table #t(...)
     
      13.很多時候用 exists 代替 in 是一個好的選擇:
      select num from a where num in(select num from b)
      用下面的語句替換:
      select num from a where exists(select 1 from b where num=a.num)
      14.并不是所有索引對查詢都有效,SQL是根據表中數據來進行查詢優化的,當索引列有大量數據重復時,SQL查詢可能不會去利用索引,如一表中有字段sex,male、female幾乎各一半,那么即使在sex上建了索引也對查詢效率起不了作用。
      15.索引并不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。
      16.應盡可能的避免更新 clustered 索引數據列,因為 clustered 索引數據列的順序就是表記錄的物理存儲順序,一旦該列值改變將導致整個表記錄的順序的調整,會耗費相當大的資源。若應用系統需要頻繁更新 clustered 索引數據列,那么需要考慮是否應將該索引建為 clustered 索引。
      17.盡量使用數字型字段,若只含數值信息的字段盡量不要設計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每一個字符,而對于數字型而言只需要比較一次就夠了。
      18.盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個相對較小的字段內搜索效率顯然要高些。
      19.任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。
      20.盡量使用表變量來代替臨時表。如果表變量包含大量數據,請注意索引非常有限(只有主鍵索引)。
      21.避免頻繁創建和刪除臨時表,以減少系統表資源的消耗。
      22.臨時表并不是不可使用,適當地使用它們可以使某些例程更有效,例如,當需要重復引用大型表或常用表中的某個數據集時。但是,對于一次性事件,最好使用導出表。
      23.在新建臨時表時,如果一次性插入數據量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數據量不大,為了緩和系統表的資源,應先create table,然后insert。
      24.如果使用到了臨時表,在存儲過程的最后務必將所有的臨時表顯式刪除,先 truncate table ,然后 drop table ,這樣可以避免系統表的較長時間鎖定。
      25.盡量避免使用游標,因為游標的效率較差,如果游標操作的數據超過1萬行,那么就應該考慮改寫。
      26.使用基于游標的方法或臨時表方法之前,應先尋找基于集的解決方案來解決問題,基于集的方法通常更有效。
      27.與臨時表一樣,游標并不是不可使用。對小型數據集使用 FAST_FORWARD 游標通常要優于其他逐行處理方法,尤其是在必須引用幾個表才能獲得所需的數據時。在結果集中包括“合計”的例程通常要比使用游標執行的速度快。如果開發時間允許,基于游標的方法和基于集的方法都可以嘗試一下,看哪一種方法的效果更好。
      28.在所有的存儲過程和觸發器的開始處設置 SET NOCOUNT ON ,在結束時設置 SET NOCOUNT OFF 。無需在執行存儲過程和觸發器的每個語句后向客戶端發送 DONE_IN_PROC 消息。
      29.盡量避免向客戶端返回大數據量,若數據量過大,應該考慮相應需求是否合理。
      30.盡量避免大事務操作,提高系統并發能力。

    上面有幾句寫的有問題。

    第二方面:
    select Count (*)和Select Count(1)以及Select Count(column)區別
    一般情況下,Select Count (*)和Select Count(1)兩著返回結果是一樣的
        假如表沒有主鍵(Primary key), 那么count(1)比count(*)快,
        如果有主鍵的話,那主鍵作為count的條件時候count(主鍵)最快
        如果你的表只有一個字段的話那count(*)就是最快的
       count(*) 跟 count(1) 的結果一樣,都包括對NULL的統計,而count(column) 是不包括NULL的統計

    第三方面:
    索引列上計算引起的索引失效及優化措施以及注意事項

    創建索引、優化查詢以便達到更好的查詢優化效果。但實際上,MySQL有時并不按我們設計的那樣執行查詢。MySQL是根據統計信息來生成執行計劃的,這就涉及索引及索引的刷選率,表數據量,還有一些額外的因素。

    Each table index is queried, and the best index is used unless the optimizer believes that it is more efficient to use a table scan. At one time, a scan was used based on whether the best index spanned more than 30% of the table, but a fixed percentage no longer determines the choice between using an index or a scan. The optimizer now is more complex and bases its estimate on additional factors such as table size, number of rows, and I/O block size.

    簡而言之,當MYSQL認為符合條件的記錄在30%以上,它就不會再使用索引,因為mysql認為走索引的代價比不用索引代價大,所以優化器選擇了自己認為代價最小的方式。事實也的確如此

    是MYSQL認為記錄是30%以上,而不是實際MYSQL去查完再決定的。都查完了,還用什么索引啊?!
    MYSQL會先估算,然后決定是否使用索引。

     


    第四方面:
    一,如何判斷SQL的執行效率?
         通過explain 關鍵字分析效率低的SQL執行計劃。
         比如: explain select sum(moneys) from sales a, company b where a.company_id = b.company_id and a.year = 2006;
         id : 1
         select_type: SIMPLE
         table:
         type:
     
    1.row:    
    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE a ALL NULL NULL NULL NULL 1000 Using where 
     
    2.row
     
    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE b ref ind_company_id ind_company_id 5 sakila.a.company_id 1 Using where;Using index 
     
    select_type: SIMPLE, 簡單表,不使用表連接或子查詢;PRIMARY,主查詢,即外層的查詢;UNION,UNION中的第二個查詢或后面的查詢;SUMQUERY,子查詢中的第一個SELECT。
    table: 輸出結果集的表。
    type: 表示表的連接類型,性能由好到壞,依次為,
         system,表中只有一行,常量表。
         const,單表中最多有一行匹配,如pramary key 或者 unique index
         eq_ref,對于前面的每一行,此表中只查詢一條記錄,比如多表連接中,使用primary key 或 unique index
         ref,與eq_ref 類似,區別在于不是primary key 或qunique index, 而是普通索引。
         ref_or_null,與ref 類似,區別在于查詢中包含對null的查詢。
         index_merge,索引合并優化
         unique_subquery,in的后面是一個查詢主鍵字段的子查詢。
         index_subquery,與unique_subquery類似,區別在于是查詢非唯一索引字段的子查詢。
         range,單表中的范圍查詢。
         index,對于前面的每一行,都通過查詢索引來得到數據。
         all,全表掃描。
    possible_keys: 表示查詢時,可能使用的索引。
    key:表示實際使用的索引。
    key_len:索引字段的長度。
    rows:掃描行的數量。
    Extra:執行情況的說明和描述。
     
    二,如何通過查詢數據庫各操作的比例及索引使用次數來判斷數據庫索引及使用是否合理?
       1,      命令: >show status like 'Com_%';
          結果:Com_xxx 表示每個xxx語句的執行次數。如:
        Com_select, Com_insert,Com_update,Com_delete。
    特別的,針對InnoDB:
         Innodb_rows_read,select查詢返回的行數
         Innodb_rows_inserted,執行insert操作插入的行數 等等。
    通過以上可以查看該數據庫的讀寫比例,以便優化。
         2,     命令:>show status like 'Handler_read%'
               查看索引使用次數。
     
    三,何時匹配到索引?
          明確第一索引,第二索引的含義。回表,覆蓋索引等優化方法。這里不再贅述。特別的,組合索引只能前綴匹配。同樣,like 關鍵字也只能前綴匹配索引,通配符不能放在第一個字符。
     
    四,何時不走索引?
           1,如果mysql 估計索引使用比全表掃描更慢,則不使用索引。例如幾乎獲取全表數據的范圍查詢等等。
           2,or 分開的條件,OR前的條件列有索引,后面的沒有索引,那么涉及的索引都不會用到。
           3,條件不是組合索引的第一部分,即不滿足前綴左匹配的條件。
           4,like 條件以%開始,則不走索引。
           5,where 條件后如果是字符串,則一定要用引號括起來,不然自動轉換其他類型后,不會走索引。
     
    五,常用SQL優化
           1,大批量插入數據,使用多值語句插入。
                 insert into test values (1,2),(2,3),(2,4)......
           2, 優化group by, 默認情況下,mysql 會對所有group by C1,C2,C3 ... 的字段排序,與order by C1,C2,C3 類似,所以在group by 中增加相同列的order by 性能沒什么影響。
           如果用戶想避免排序帶來的影響,可以顯式指定不排序,后面加上order by NULL。
            3,order by 后面的順序與索引順序相同,且與where 中使用的條件相同,且是索引,則才會走真正索引。
            4,in + 子查詢的 SQL 盡量用join 連接來代替。
            5,OR 之間的每個條件列都必須用到索引。
     
    六,深層一些的優化
            考慮每次查詢時的IO消耗,回表次數;考慮表設計時,數據結構的不同,比如varchar ,char 區別;考慮表設計時每行數據的大小,盡量保持在128K以內,讓其在一頁內,避免跨頁,大數據行。









    posted @ 2014-03-10 11:27 abin 閱讀(2389) | 評論 (1)編輯 收藏

    我這里使用的是Centos6.4的環境下面測試的:
    ulimit -SHn 65535
    安裝:libevent-2.0.12-stable.tar.gz

    wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz
    tar zxvf libevent-2.0.12-stable.tar.gz
    cd libevent-2.0.12-stable/
    ./configure --prefix=/usr/local/libevent-2.0.12-stable/
    make
    make install
    cd ../

    安裝:tokyocabinet-1.4.47.tar.gz
    wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
    tar zxvf tokyocabinet-1.4.47.tar.gz
    cd tokyocabinet-1.4.47/
    ./configure --prefix=/usr/local/tokyocabinet-1.4.47/
    #Note: In the 32-bit Linux operating system, compiler Tokyo cabinet, please use the ./configure --enable-off64 instead of ./configure to breakthrough the filesize limit of 2GB.
    #./configure --enable-off64 --prefix=/usr/local/tokyocabinet-1.4.47/
    make
    make install
    cd ../

    ##執行上面這個tokyocabinet-1.4.47.tar.gz軟件包安裝的時候,對于32bit的機器,需要使用
    #./configure --enable-off64 --prefix=/usr/local/tokyocabinet-1.4.47/
    這個命令,此外我安裝的過程中,出現了這個錯誤提示,提示tokyocabinet-1.4.47.tar.gz安裝不成功,解決辦法是,安裝需要的軟件包就可以了.

    錯誤提示一:
    configure: error: zlib.h is required
    解決方法是:  # yum install zlib-devel
    錯誤提示二:
    configure: error: bzlib.h is required
    解決方法是:  # yum install bzip2-devel

    下面進入到了正式環節,上面裝的兩個都是為了httpsqs的安裝做的前提準備:
    安裝:httpsqs-1.7.tar.gz
    wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
    tar zxvf httpsqs-1.7.tar.gz
    cd httpsqs-1.7/
    make
    make install
    cd ../

    至此安裝已經結束:

    [root@xoyo ~]# httpsqs -h
    -l <ip_addr> 監聽的IP地址,默認值為 0.0.0.0 
    -p <num> 監聽的TCP端口(默認值:1218)
    -x <path> 數據庫目錄,目錄不存在會自動創建(例如:/opt/httpsqs/data)
    -t <second> HTTP請求的超時時間(默認值:3)
    -s <second> 同步內存緩沖區內容到磁盤的間隔秒數(默認值:5)
    -c <num> 內存中緩存的最大非葉子節點數(默認值:1024)
    -m <size> 數據庫內存緩存大小,單位:MB(默認值:100)
    -i <file> 保存進程PID到文件中(默認值:/tmp/httpsqs.pid)
    -a <auth> 訪問HTTPSQS的驗證密碼(例如:mypass123)
    -d 以守護進程運行
    -h 顯示這個幫助


    [root@localhost ~]# ulimit -SHn 65535
    [root@localhost ~]# httpsqs -d -p 1218 -x /data0/queue -a mypass123
    [root@localhost ~]# ps -aux | grep httpsqs
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root 14378 0.0 0.0 396420 500 pts/0 S 10:44 0:00 [httpsqs: master process] /usr/bin/httpsqs -d -p 1218 -x /data0/queue -a mypass123
    root 14379 0.0 0.0 406664 716 pts/0 Sl 10:44 0:00 [httpsqs: worker process] /usr/bin/httpsqs -d -p 1218 -x /data0/queue -a mypass123
    root 14382 0.0 0.0 4356 756 pts/0 S+ 10:44 0:00 grep httpsqs
    1、put a queue
    [root@localhost ~]# curl "http://192.168.59.129:1218/?name=your_queue_name&opt=put&data=url_encoded_text_message&auth=mypass123"
    HTTPSQS_PUT_OK

    [root@localhost ~]#
    如果入隊列成功,返回:
    HTTPSQS_PUT_OK

      如果入隊列失敗,返回:
    HTTPSQS_PUT_ERROR

      如果隊列已滿,返回:
    HTTPSQS_PUT_END
    2、get a queue
    http://192.168.59.129:1218/?name=your_queue_name&opt=get&auth=mypass123
    url_encoded_text_message
    3、查看隊列狀態:
    http://192.168.59.129:1218/?name=your_queue_name&opt=status&auth=mypass123
    HTTP Simple Queue Service v1.7
    ------------------------------
    Queue Name: your_queue_name
    Maximum number of queues: 1000000
    Put position of queue (1st lap): 5
    Get position of queue (1st lap): 0
    Number of unread queue: 5
    4、使用json格式查看隊列內容

    http://192.168.59.129:1218/?name=your_queue_name&opt=status_json&auth=mypass123
    {"name":"your_queue_name","maxqueue":1000000,"putpos":5,"putlap":1,"getpos":1,"getlap":1,"unread":4}


    參考文檔:http://blog.s135.com/httpsqs/7/1/
    http://code.google.com/p/httpsqs/

    posted @ 2014-03-01 15:26 abin 閱讀(1127) | 評論 (0)編輯 收藏

    //oracle解釋執行計劃
    SQL> explain plan for select t.* from abin1 t where t.id<200;
     
    Explained
     
    SQL> select * from table(dbms_xplan.display);
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    Plan hash value: 1270356885
    ---------------------------------------------------------------------------
    | Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |       |    98 |  1862 |     2   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| ABIN1 |    98 |  1862 |     2   (0)| 00:00:01 |
    ---------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
       1 - filter("T"."ID"<200)
     
    13 rows selected
     
    SQL> 


    //mysql解釋執行計劃
    explain select t.* from user_rest t where id<>8 

    //oracle收集表的統計信息
    analyze table abin1 compute statistics;

    posted @ 2013-12-28 01:40 abin 閱讀(561) | 評論 (0)編輯 收藏

    僅列出標題
    共50頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 
    主站蜘蛛池模板: 久久亚洲AV永久无码精品| 拨牐拨牐x8免费| 最新国产乱人伦偷精品免费网站| 一区二区3区免费视频| 免费国产va视频永久在线观看| 国产精品亚洲综合网站| 国产亚洲男人的天堂在线观看 | 国产一级一片免费播放i| 成年女性特黄午夜视频免费看| 成年女人毛片免费播放视频m| 成人免费视频一区二区三区| 韩国18福利视频免费观看| 国产黄色片在线免费观看| 免费人成激情视频| 亚洲中文字幕无码专区| 国产成人亚洲精品青草天美| 亚洲福利在线观看| 亚洲国产91在线| 天天综合亚洲色在线精品| 一级做a爰片久久毛片免费陪| 久久一区二区三区免费| 免费精品一区二区三区第35| 最近免费最新高清中文字幕韩国 | 国产男女爽爽爽免费视频 | 国产精品亚洲小说专区| 狠狠躁狠狠爱免费视频无码| 国产va在线观看免费| 青娱乐免费视频在线观看| 国产一级淫片免费播放| 亚洲理论电影在线观看| 亚洲欧洲精品视频在线观看| 亚洲国产成人久久精品软件| 国产高潮久久免费观看| 最近中文字幕大全免费视频| 免费无码又爽又刺激毛片| 亚洲一区无码中文字幕| 亚洲第一精品电影网| 精品视频免费在线| 日本在线免费播放| 日韩免费三级电影| 亚洲处破女AV日韩精品|