訂單水平分庫分表

                
		//訂單ID  設計規則:時間戳+隨機數+用戶標識碼(4位)

		int orderId  = 111118000;
		
		for(int i = 0 ;i < 10000;i++){
			orderId = orderId+1;
			//取最後四位(用戶ID後四位)做分庫分表
			int shardingKey = orderId%10000;
			System.out.println("UserId後四位:"+shardingKey);
			//分庫 32個
			System.out.println("分庫位置:"+"db_"+shardingKey%32);
			//分表 32個
			System.out.println("分表位置:"+"tb_"+shardingKey/32%32);
			//上面分表還不夠用的話,單庫裏的表再進行裂變,當然,在目前訂單這種規則下(用userId後四位 mod)還是有極限的,因爲只有四位,所以最多拆8192個表
			//再分表,再分表的規則爲 shardingKey % 2^n  n最多取值爲13 Math.pow(2, 13)=8192
			//這樣最總共的訂單表爲 32*32*8192 = 83886008 個 
			System.out.println("再分表位置:"+"tb_"+shardingKey/32%32+"_"+shardingKey%((int)Math.pow(2, 13)));
			System.out.println("-------------------------------------------------------------");
			Thread.sleep(50);
		}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章