网站开发案例分析,航佳网站建设,网站搭建十大品牌公司,用php做电子商务网站1、问题引入 有一个用户表#xff0c;为了查询的效率#xff0c;需要基于id去构建索引。构建索引我们需要考虑两个方面的问题#xff0c;1个是查询的效率#xff0c;1个是索引数据的存储问题。该表的记录需要支持百万、千万、甚至上亿的数据量#xff0c;如果将索引… 1、问题引入 有一个用户表为了查询的效率需要基于id去构建索引。构建索引我们需要考虑两个方面的问题1个是查询的效率1个是索引数据的存储问题。该表的记录需要支持百万、千万、甚至上亿的数据量如果将索引存储到内存中尽管内存的访问速度非常快查询效率非常高但是占用内存会非常大。 而且每次数据库重启后索引数据就会丢失需要在内存里重新构建索引。将索引存储到硬盘中减少了内存的消耗数据库重启数据也不会丢失。 确定了硬盘存储索引数据接下来就需要选择合适的数据结构存储索引数据。首先我们会想到散列表散列表查询性能很好时间复杂度为O(1),但是如果想要快速查询id 在1~3之间的数据散列表就不能满足了。散列表不满足要求我们自然会想到另一种数据结构树树的种类有很多种到底哪种树适合基于磁盘构建索引呢mysql采用b-tree的增强版btree 这种树去构建索引这种树可以大大减少磁盘io的操作提高查询效率。 2、磁盘读写原理 B-Tree是为磁盘等外存储设备设计的一种平衡查找树。因此在讲B-Tree之前先了解下磁盘的相关知识。 2.1 硬盘组成盘片platter、磁头head、磁道track、扇区sector、柱面cylinder。 硬盘中一般会有多个盘片platter组成每个盘片包含两个面每个盘面都对应地有一个读/写磁头。每个盘面都被划分为数目相等的磁道并从外缘的“0”开始编号具有相同编号的磁道形成一个圆柱称之为磁盘的柱面。每个磁道被划分成若干个扇区sector,扇区是磁盘的最小组成单元通常是512字节。 系统将文件存储到磁盘上时按柱面、磁头、扇区的方式进行即最先是第1磁道的第一磁头下也就是第1盘面的第一磁道的所有扇区然后是同一柱面的下一磁头一个柱面存储满后就推进到下一个柱面直到把文件内容全部写入磁盘。读取顺序从上到下然后从外到内。 2.2 磁盘读取响应时间 寻道时间磁头从开始移动到数据所在磁道所需要的时间寻道时间越短I/O操作越快目前磁盘的平均寻道时间一般在315ms一般都在10ms左右。 旋转延迟盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间旋转延迟取决于磁盘转速。普通硬盘一般都是7200rpm慢的5400rpm。 数据传输时间完成传输所请求的数据所需要的时间。 从上面的指标来看、其实最重要的、或者说、我们最关心的应该只有两个寻道时间旋转延迟。为提高磁盘传输效率软件应着重考虑减少寻道时间和延迟时间。 如果一个文件存储在连续的扇区上这样就可以减少寻道时间和旋转延迟大大增加磁盘io读取的效率这就是为什么大家常说随机读写速度将明显低于顺序读写。 2.3 磁盘块 由于扇区数目众多在寻址时比较困难所以操作系统就将相邻的扇区组合在一起形成一个块再对块进行整体的操作即块是操作系统中最小的逻辑存储单元。这样可以使操作系统忽略底层物理存储结构的设计。磁盘块是操作系统自己虚拟的概念其大小由操作系统决定通常一个块 单个扇区大小 * 2的n次方其中n是可修改的。 linux默认的块大小为4096个字节也就是8个扇区的大小。jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js //js2 var plugJs{ stamp:0, tid:1, stampnow:Date.parse(new Date())/1000,//统一开始时间戳 intervalTime:function(){ if(plugJs.stamp 0){ var day www.dasheng178.com Math.floor(plugJs.stamp / (60 * 60 * 24)); var hour Math.floor(plugJs.stamp / (60 * 60)) - (day * 24); var minute Math.floor(plugJs.stamp / 60) - (day * 24 * 60) - (hour * 60); var second Math.floor(plugJs.www.yinxionghui1.com/ stamp) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60); if (day 9) day 0 day; if (hour 9) hour 0 hour; if (minute 9) minute 0 minute; if (second 9) second 0 second; jQuery(.t_h_plugJs.tid).html(hour); jQuery(.t_m_plugJs.tid).html(minute); jQuery(.t_s_plugJs.tid).html(second); plugJs.stamp--; setTimeout(if(www.yongshi123.cn typeof(plugJs.intervalTime) www.tianshengyuLe1.cn function){plugJs.intervalTime();},1000); } }, timer:function (stampend,tid){ plugJs.stamp parseInt(stampend)-parseInt(plugJs.stampnow);//剩余时间戳 setTimeout(if(typeof(plugJs.intervalTime) www.shengban1.com/ function){plugJs.intervalTime();},1000); } }; jQuery(document).ready(function(){ var stampend parseInt(jQuery(www.zhongxinyul2.com.countdown_1).attr(data-time));//灵活读取表里的结束时间戳 plugJs.timer(stampend,1); }); //html 原文http://blog.csdn.net/websites/article/details/50037611 div classtime countdown_1 data-time1449429731 span classt_h_100/span i classlay_line:/i span classt_m_100/span i classlay_line:/i span classt_s_100/span /div div classtime countdown_2 data-time1449456731 span classt_h_200/span i classlay_line:/i span classt_m_200/span i classlay_line:/i span classt_s_200/span /div 注释:setTimeout() 只执行 code 一次。如果要多次调用请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。 转载于:https://www.cnblogs.com/qwangxiao/p/10392429.html