为什么分库分表使用2的N次方 一个字节用两位16进制
你说说为神马表的总数、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的为啥能显示二进制表示的数据。想想还得先说乱码的原因。
------------------------------------end
一起关注高性能WEB后端技术,关注公众号

为什么分库分表使用2的N次方 一个字节用两位16进制的更多相关文章
- 基于Mysql数据库亿级数据下的分库分表方案
移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,问题没有暴露出来,数据库方面的优化显得不太重要,一旦数据量越来越大时, ...
- Mycat分库分表(一)
随着业务变得越来越复杂,用户越来越多,集中式的架构性能会出现巨大的问题,比如系统会越来越慢,而且时不时会宕机,所以必须要解决高性能和可用性的问题.这个时候数据库的优化就显得尤为重要,在说优化方案前,先 ...
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 重磅来袭,使用CRL实现大数据分库分表方案
关于分库分表方案详细介绍 http://blog.csdn.net/bluishglc/article/details/7696085 这里就不作详细描述了 分库分表方案基本脱离不了这个结构,受制于实 ...
- 利用sharding-jdbc分库分表
sharding-jdbc是当当开源的一款分库分表的数据访问层框架,能对mysql很方便的分库.分表,基本不用修改原有代码,只要配置一下即可,完整的配置参考以下内容: <?xml version ...
- MySQL分库分表总结
单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数 ...
- 数据库分库分表(sharding)系列(一) 拆分规则
第一部分:实施策略 数据库分库分表(sharding)实施策略图解 1. 垂直切分垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表.结合已经准备好的数据库ER图或领域模型 ...
- MYSQL性能优化分享(分库分表)
1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表mem ...
- Mysql分库分表方案
Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. m ...
随机推荐
- app后端设计(9)-- 动态通知
在app中,例如在通知界面,当新通知的时候,需要显示有多少条通知,用户点击"获取新通知"后,就能看到新的通知. 那么在app端,怎么才能知道有多少条新通知? 实现的技术有两种: 1 ...
- 从零开始学习 Docker
这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创.学习过程中整理成适合我自己的笔记,其中也包含了我自己的 ...
- QM3_Statistics Concepts and Market Returns
Basic Concepts Terms Descriptive Statistics Describes the important aspects of large data sets. 统计 概 ...
- Postman用法简介
转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...
- 如何去掉word中的回车符??
打开word界面,点击页面左上角的"文件"按钮,进入到文件栏目中,进行设置. 进入文件之后,在左下角找到并点击"选项",进入到word的设置界面中 进入到wor ...
- BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP
BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP Description 正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺 ...
- Sql语言简介——检索数据
检索数据可以通过SELECT语句来实现. select子句:用于选择数据表.视图中的列. into子句:用于将原表中的结构和数据插入新表中. from子句:用于指定数据来源,包括表.视图和其他sele ...
- MySql-两阶段加锁协议
此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性. 2PC,两阶段提交协 ...
- C++ bitset用法
概念: bitset是用来存储位的(其中的元素只有两种形式) 这个类通常用来模拟一个布尔数组,但对空间分配上进行了优化:通常,每个元素只占用一个bit ,而通常char类型是它的八倍 每个位置上的位都 ...
- #利用openCV裁脸
#利用openCV裁脸import cv2 def draw_rects(img, rects): for x, y, w, h in rects: cv2.rectangle(img, (x, y) ...