我们知道MySQL的MyISAM引擎每个表都会生成三个文件,*.frm、*.MYD、*.MYI 三个文件,分表用来保存表结构、表数据和表索引。Linux下面每个目录下的文件数量最好不要超过1000个,不然检索数据将更慢,那么每个表都会生成三 个文件,相应的如果分表超过300个表,那么将检索非常慢,所以这时候就必须再进行分,比如在进行数据库的分离。
使用基础表,我们可以新增加一个字段,用来保存这个表保存在什么数据。使用Hash的方式,我们必须截取hash值中第几位来作为数据库的名字。这样,完好的解决这个问题。

function calc_hash_db($u, $s = 4){
    $h = sprintf("%u", crc32($u));
    $h1 = intval(fmod($h, $s));
    return $h1;
}
 
 
for($i=1;$i<100;$i++){
	echo calc_hash_db($i);
	echo "<br>";
}
 
function calc_hash_tbl($u, $n = 256, $m = 16){
    $h = sprintf("%u", crc32($u));
    $h1 = intval($h / $n);
    $h2 = $h1 % $n;
    $h3 = base_convert($h2, 10, $m);
    $h4 = sprintf("%02s", $h3);
    return $h4;
}

相关文章:

  • 2021-07-15
  • 2021-09-15
  • 2021-12-21
  • 2021-12-05
  • 2021-12-18
  • 2021-11-29
猜你喜欢
  • 2021-12-05
  • 2022-12-23
  • 2021-10-03
  • 2021-10-20
  • 2021-10-24
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案