原创 數據庫垂直拆分

一、緣起當數據庫的數據量非常大時,水平切分和垂直拆分是兩種常見的降低數據庫大小,提升性能的方法。假設有用戶表:user(uid bigint,name varchar(16),pass varchar(16),age int,sex ti

原创 NIO筆記4_分散(Scatter)和聚集(Gather)

分散讀取(Scattering Reads)是指從Channel 中讀取的數據“分散”到多個Buffer 中。注意:按照緩衝區的順序,從Channel 中讀取的數據依次將Buffer 填滿。聚集寫入(Gathering Writes)是指

原创 典型數據庫架構設計

一、用戶中心用戶中心是一個常見業務,主要提供用戶註冊、登錄、信息查詢與修改的服務,其核心元數據爲:User(uid, uname, passwd, sex, age,nickname, …)其中:uid爲用戶ID,主鍵uname, pas

原创 線上操作與線上問題排查實戰

一、瞭解機器連接數情況問題:1.2.3.4的sshd的監聽端口是22,如何統計1.2.3.4的sshd服務各種連接狀態(TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED)的連接數。 參考答案:netstat -n |

原创 秒殺系統架構思路

一、秒殺業務爲什麼難做1)im系統,例如qq或者微博,每個人都讀自己的數據(好友列表、羣列表、個人信息);2)微博系統,每個人讀你關注的人的數據,一個人讀多個人的數據;3)秒殺系統,庫存只有一份,所有人會在集中的時間讀和寫這些數據,多個人

原创 MySQL冗餘數據的三種方案

一,爲什麼要冗餘數據互聯網數據量很大的業務場景,往往數據庫需要進行水平切分來降低單庫數據量。水平切分會有一個patition key,通過patition key的查詢能夠直接定位到庫,但是非patition key上的查詢可能就需要掃描

原创 廣告系統簡易流程與架構

一、業務簡述從業務上看    整個智能廣告系統,主要分爲:1)業務端:廣告主的廣告後臺2)展現端:用戶實際訪問的頁面業務端,廣告主主要有兩類行爲:1)廣告設置行爲:例如設置投放計劃,設置地域,類別,關鍵字,競價等2)效果查看行爲:例如廣告

原创 NIO筆記6_阻塞與非阻塞(上)

傳統的IO 流都是阻塞式的。也就是說,當一個線程調用read() 或write() 時,該線程被阻塞,直到有一些數據被讀取或寫入,該線程在此期間不能執行其他任務。因此,在完成網絡通信進行IO 操作時,由於線程會阻塞,所以服務器端必須爲每個

原创 MySQL的索引優化

假設訂單業務表結構爲:order(oid, date, uid, status, money, time, …)其中:oid,訂單ID,主鍵date,下單日期,有普通索引,管理後臺經常按照date查詢uid,用戶ID,有普通索引,用戶查詢

原创 NIO筆記5_字符集

 Java NIO提供了字符集,實現對文件編碼,解碼的更好支持,用字符集可以獲取系統支持的編碼格式,在獲取文件時,可以指定解碼格式,然後進行輸出時,指定編碼的格式,避免獲取和輸出的文件時亂碼。 availableCharsets():獲取

原创 NIO筆記7_阻塞與非阻塞(下)

/* * 使用 NIO 完成網絡通信的三個核心: * * 1. 通道(Channel):負責連接 * * java.nio.channels.Channel 接口: * |--SelectableChan

原创 好接口的設計與實現

一、好接口的特性易讀易用,難於誤用功能獨立容易擴展二、好接口設計的基本原則只做並做好一件事      函數名自解釋      不恰當的函數名,往往是不恰當設計的徵兆如果沒做到上一點,就將函數分解      只增加,永遠不要刪除函數與接口(

原创 冗餘表數據一致性

一、需求緣起互聯網很多業務場景的數據量很大,此時數據庫架構要進行水平切分,水平切分會有一個patition key,通過patition key的查詢能夠直接定位到庫,但是非patition key上的查詢可能就需要掃描多個庫了。例如訂單

原创 zookeeper 數據源動態配置

一、實現的方式數據源datasource,數據庫的連接或者連接池的具體配置都在其中,因此,我們在修改數據庫的配置的同時修改datasource 就可以不需要重新啓動項目而實現數據庫的切換。使用org.apache.commons.dbcp

原创 NIO筆記2_直接與非直接緩衝區

 一、緩衝區(Buffer):在 Java NIO 中負責數據的存取。緩衝區就是數組。用於存儲不同數據類型的數據  根據數據類型不同(boolean除外),提供了相應類型的緩衝區: ByteBuffer CharBuffer ShortB