201504-01 構建高并發高可用的電商平臺架構實踐(一)——設計理念 空間換時間多級緩存,靜態化客戶端頁面緩存(httpheader中包含Expires/CacheofControl,lastmodified(304,server不返回body,客戶端可以繼續用cache,減少流量),ETag)反向代理緩存應用端的緩存(memcache)內存數據庫Buffer、cache機制(數據庫,中間件等)索引哈希、B樹、倒排、bitmap哈希索引適合綜合數組的尋址和鏈表的插入特性,可以實現數據的快速存取。B樹索引適合于查詢為主導的場景,避免多次的IO,提高查... 繼續閱讀 >
201503-31 SQL Server 面面觀——數據庫對象 SQLServer2008包含許多對象,主要的數據庫對象有:數據庫、事務日志、表、模式、文件組、圖表、視圖、存儲過程、用戶自定義函數、用戶和角色、規則、默認值、用戶自定義數據類型、全文目錄。一、數據庫對象在SQLServer中,數據庫服務器本身可以看作一個對象,大部分其他對象(但不是所有)為數據庫對象的子對象。數據庫通常至少包括一組表對象,一般也包括其他一些對象,如存儲過程和視圖。存儲過程和視圖與保存在數據庫... 繼續閱讀 >
201503-23 創建數據庫 創建一個名為TEST2的數據庫,它有2個數據文件,其中主數據文件為100MB,最大大小為200MB,按20MB增長;1個輔助數據文件為20MB,最大大小不限,按10%增長;有2個日志文件,大小均為50MB,最大大小均為100MB,按10MB增長。 createdatabasedb_test2on ( name='test_data1', filename='D:\ProgramFiles(x86)\MicrosoftOffice\db_test2.mdf', size=5MB, &... 繼續閱讀 >
201503-17 MySQL服務器連接過程分析 mysqld是MySQL服務器端主進程,可以說mysqld是MySQL的真正核心,一切工作都是圍繞mysqld進程進行的。所以要解剖mysql這個龐然大物,mysqld的代碼是最好的突破口。一切都是從熟悉的main()函數開始的,其實是從mysqld_main()函數開始的。這些代碼都在mysqld.cc。mysqld_main()隨后調用了win_main)()。win_main()函數主要是做了一些初始化的工作。初始化工作完成之后,MySQL已經做好準備接受連接了。然后我們的主角Handle_connectio... 繼續閱讀 >
201503-16 壓縮數據庫日志 USE[databaseName]GO--將數據庫設置為簡單恢復模式,ALTERDATABASE [databaseName]SETRECOVERYSIMPLE;GO--壓縮為100MDBCCSHRINKFILE([databaseName_log],100);GO--恢復ALTERDATABASE [databaseName]SETRECOVERYFULL;GO 繼續閱讀 >
201503-13 學習 MySQL 應該掌握的 6 個技巧 MySQL由于它本身的小巧和操作的高效,在數據庫應用中越來越多的被采用。作為LAMP(或WAMP)開發中的重要一環,MySQL值得PHP開發者的重視和認真學習。1.每一行命令都是用分號(;)作為結束對于MySQL,第一件你必須牢記的是它的每一行命令都是用分號(;)作為結束的,但當一行MySQL被插入在PHP代碼中時,最好把后面的分號省略掉,例如:mysql_query("INSERTINTOtablename(first_name,last_name)VALUES('$first_nam... 繼續閱讀 >
201503-11 10分鐘學會理解和解決MySQL亂碼問題 本文將詳細介紹MySQL亂碼的成因和具體的解決方案MySQL出現亂碼的原因要了解為什么會出現亂碼,我們就先要理解:從客戶端發起請求,到MySQL存儲數據,再到下次從表取回客戶端的過程中,哪些環節會有編碼/解碼的行為。為了更好的解釋這個過程,博主制作了兩張流程圖,分別對應存入和取出兩個階段。存入MySQL經歷的編碼轉換過程上圖中有3次編碼/解碼的過程(紅色箭頭)。三個紅色箭頭分別對應:客戶端編碼,MySQLServer解碼,C... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(八):存儲的瓶頸(8) 在開始本篇主要內容前,我們一起看看下面的幾張截圖,首先是第一張圖,如下圖所示:這是一家電商網站的首頁,當我們第一次打開這個首頁,網站會彈出一個強制性的對話框,讓用戶選擇貨物配送的地址,如果是淘寶和京東的話,那么這個選擇配貨地址的選項是在商品里,如下圖是淘寶的選擇配送地點:下圖是京東選擇配貨地點:那么圖一跟京東和淘寶有什么區別呢?圖一的電商強制用戶選擇地區后,那么我們在查詢這個商品時候會因為地... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(七):存儲的瓶頸(7) 本文開篇提個問題給大家,關系數據庫的瓶頸有哪些?我想有些朋友看到這個問題肯定會說出自己平時開發中碰到了一個跟數據庫有關的什么什么問題,然后如何解決的等等,這樣的答案沒問題,但是卻沒有代表性,如果出現了一個新的存儲瓶頸問題,你在那個場景的處理經驗可以套用在這個新問題上嗎?這個真的很難說。其實不管什么樣的問題場景最后解決它都要落實到數據庫的話,那么這個問題場景一定是擊中了數據庫的某個痛點,那么我前面... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(六):存儲的瓶頸(6) 在講數據庫水平拆分時候,我列出了水平拆分數據庫需要解決的兩個難題,它們分別是主鍵的設計問題和單表查詢的問題,主鍵問題前文已經做了比較詳細的講述了,但是第二個問題我沒有講述,今天我將會講講如何解決數據表被水平拆分后的單表查詢問題。要解決數據表被水平拆分后的單表查詢問題,我們首先要回到問題的源頭,我們為什么需要將數據庫的表進行水平拆分。下面我們來推導下我們最終下定決心做水平拆分表的演進過程,具體如下... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(五):存儲的瓶頸(5) 上文里我遺留了兩個問題,一個問題是數據庫做了水平拆分以后,如果我們對主鍵的設計采取一種均勻分布的策略,那么它對于被水平拆分出的表后續的查詢操作將有何種影響,第二個問題就是水平拆分的擴容問題。這兩個問題在深入下去,本系列就越來越技術化了,可能最終很多朋友讀完后還是沒有找到解決實際問題的啟迪,而且我覺得這些問題都是像BAT這樣巨型互聯網公司才會認真思考的,因此本篇我打算換個角度來闡述本文的后續內容。這里... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(四):存儲的瓶頸(4) 如果數據庫需要進行水平拆分,這其實是一件很開心的事情,因為它代表公司的業務正在迅猛的增長,對于開發人員而言那就是有不盡的項目可以做,雖然會感覺很忙,但是人過的充實,心里也踏實。數據庫水平拆分簡單說來就是先將原數據庫里的一張表在做垂直拆分出來放置在單獨的數據庫和單獨的表里后更進一步的把本來是一個整體的表進一步拆分成多張表,每一張表都用獨立的數據庫進行存儲。當表被水平拆分后,原數據表成為了一個邏... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(三):存儲的瓶頸(3) 存儲的瓶頸寫到現在就要進入到深水區了,如果我們所做的網站已經到了做數據庫垂直拆分和水平拆分的階段,那么此時我們所面臨的技術難度的挑戰也會大大增強。這里我們先回顧下數據庫的垂直拆分和水平拆分的定義:垂直拆分:把一個數據庫中不同業務單元的數據分到不同的數據庫里。水平拆分:是根據一定的規則把同一業務單元的數據拆分到多個數據庫里。垂直拆分是一個粗粒度的拆分數據,它主要是將原來在一個數據庫下的表... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(二):存儲的瓶頸(2) 上篇里我講到某些網站在高并發下會報出503錯誤,503錯誤的含義是指網站服務端暫時無法提供服務的含義,503還表達了網站服務端現在有問題但是以后可能會提供正常的服務,對http協議熟悉的人都知道,5開頭的響應碼表達了服務端出現了問題,在我們開發測試時候最為常見的是500錯誤,500代表的含義是服務端程序出現了錯誤導致網站無法正常提供服務,500通常是服務端異常和錯誤所致,如果生產系統里發現了500錯誤,那么只能說明網站存... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(一):存儲的瓶頸(1) 前不久公司請來了位互聯網界的技術大牛跟我們做了一次大型網站架構的培訓,兩天12個小時信息量非常大,知識的廣度和難度也非常大,培訓完后我很難完整理出全部聽到的知識,今天我換了個思路是回味這次培訓,這個思路就是通過本人目前的經驗和技術水平來思考下大型網站技術演進的過程。首先我們要思考一個問題,什么樣的網站才是大型網站,從網站的技術指標角度考慮這個問題人們很容易犯一個毛病就是認為網站的訪問量是衡量的指標... 繼續閱讀 >
201503-05 MySQL性能優化指南 本文的主要目標是介紹如何優化MySQL數據庫,通過定期分析表和檢查表、定期優化表以及一些常用SQL語句的優化手段,可以幫助你學會在MySQL開發中編寫更為高效的SQL。1、定期分析表和檢查表分析表的語法如下:ANALYZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtb1_name[,tbl_name]...以上語句用于分析和存儲表的關鍵字分布,分析的結果將可以使得系統得到準確的統計信息,使得SQL能夠生成正確的執行計劃。如果用戶感覺實際執行計劃并... 繼續閱讀 >