為什麼分庫分表使用2的N次方 一個位元組用兩位16進位制

飛翔碼農發表於2019-02-19

你說說為神馬錶的總數、redis庫的總數、HashMap的數量最好是2的N次方

資料在表庫HashMap 落地時候都會跟總數取模,這個我們做個測試

假設數量是2的3次方就是8,即索引就是0-7

php -r “echo 58 % 8;

php -r “echo 58 & 7;

00111010 & 00000111 = 00000010 =》2

再來個

php -r “echo 1234567 % 8;”

php -r “echo 1234567 & 7;”

100101101011010000111 & 00000111 = 00000111=》7

你就說等不等。

結論:本來需要算術運算實現,如果是2的N次方的話,計算機內部就可以使用位運算實現了。主要是運算速度提高了。

那為神馬位運算比算術運算速度快呢?

我覺得主要是位運算都是對記憶體上的二進位制數直接操作。如果使用十進位制的取模的話,必須先從記憶體裡面讀到二進位制數的這兩個數,再轉成十進位制數,再運算。

為嘛一個位元組使用兩個16進位制數表示

使用ultraedit開啟影像檔案,或者使用瀏覽器工具開啟socket通訊的內容,均是兩個16進位制數一組分隔。就是因為展示的時候兩個16進製表示一個位元組。

一個位元組8位,拆開的話,前後四位,0000-1111能表示16個數,1111是15,加上0是16.所以1個位元組只能使用兩個16進製表示

本來還想分享下base64的為啥能顯示二進位制表示的資料。想想還得先說亂碼的原因。

相關文章