湖南人
2008-11-20 19:06
喜欢你的博客,佩服你的资历,羡慕你的成就~顶一个
以下是以前你回答我的问题
----------------------------------------------------------
Tokyo Cabinet是key-value的数据库,虽然速度非常快,但一些复杂的关系查询没法进行,除非你对其进行二次开发。
使用MySQL数据库,可以按小说ID进行分表。
例如:
1、一台服务器上可以在不同端口开多个MySQL进程(一般4~5个为好);
2、MySQL数据库主库作只写操作,辅库作只读操作;
3、相对独立的模块用到的数据库,分布在不同端口的MySQL服务器上;
4、关联性稍强的每类功能,在同一台MySQL服务器上建立不同的数据库,每个数据库中包含一张总表,多张分表。
例如下图的结构:
(1)、这是一张用户信息库,分为1张总表tb_user_total,256张分表tb_user_00~tb_user_ff,总用户数超过1千万。
(2)、总、分表的结构完全一样。每次写数据库时,都写总表,同时根据userid进行哈希,确定其对应的分表,再将数据写入分表。
(3)、总表中的记录多达1千多万条,而经过分表哈希后,每张分表中的记录只有4.5万条。查询分表的速度要比查询总表快得多,如果只是查询一个用户的相关信息,只查分表就可以得到。
(4)、但是,有些数据不得不查总表,比如统计、排名等。这可以在后台守护进程中,或者在crontab中定时运行程序,查询总表,分析出这些数据,存入别处。
(5)、生成256个分表00~ff的算法示例:
例1:
<?php
function table_name($v)
{
$str = md5($v);
$tmp = $str{1}.$str{2};
return $tmp;
}
?>
例2:
<?php
function table_name($u)
{
$n = 256;
$h = sprintf("%u", crc32($u));
$h1 = intval($h / $n);
$h2 = $h1 % $n;
$h3 = base_convert($h2, 10, 16);
$h4 = sprintf("%02s", $h3);
return $h4;
}
?>
-----------------------------------------------------------------------
不懂的问题
如果只是查询一个用户的相关信息,只查分表就可以得到。那如何知道这个用户在那个分表下呢?
----------------------------------------------------------
Tokyo Cabinet是key-value的数据库,虽然速度非常快,但一些复杂的关系查询没法进行,除非你对其进行二次开发。
使用MySQL数据库,可以按小说ID进行分表。
例如:
1、一台服务器上可以在不同端口开多个MySQL进程(一般4~5个为好);
2、MySQL数据库主库作只写操作,辅库作只读操作;
3、相对独立的模块用到的数据库,分布在不同端口的MySQL服务器上;
4、关联性稍强的每类功能,在同一台MySQL服务器上建立不同的数据库,每个数据库中包含一张总表,多张分表。
例如下图的结构:
(1)、这是一张用户信息库,分为1张总表tb_user_total,256张分表tb_user_00~tb_user_ff,总用户数超过1千万。
(2)、总、分表的结构完全一样。每次写数据库时,都写总表,同时根据userid进行哈希,确定其对应的分表,再将数据写入分表。
(3)、总表中的记录多达1千多万条,而经过分表哈希后,每张分表中的记录只有4.5万条。查询分表的速度要比查询总表快得多,如果只是查询一个用户的相关信息,只查分表就可以得到。
(4)、但是,有些数据不得不查总表,比如统计、排名等。这可以在后台守护进程中,或者在crontab中定时运行程序,查询总表,分析出这些数据,存入别处。
(5)、生成256个分表00~ff的算法示例:
例1:
<?php
function table_name($v)
{
$str = md5($v);
$tmp = $str{1}.$str{2};
return $tmp;
}
?>
例2:
<?php
function table_name($u)
{
$n = 256;
$h = sprintf("%u", crc32($u));
$h1 = intval($h / $n);
$h2 = $h1 % $n;
$h3 = base_convert($h2, 10, 16);
$h4 = sprintf("%02s", $h3);
return $h4;
}
?>
-----------------------------------------------------------------------
不懂的问题
如果只是查询一个用户的相关信息,只查分表就可以得到。那如何知道这个用户在那个分表下呢?
张宴 回复于 2008-11-20 11:43
假设用户的UserID为12345,再假设table_name("12345")得出f3,那么就去查tb_user_f3分表。
张老师您好,看了您的nginx的文章受益匪浅,最近遇到一个问题,查了些材料,也去nginx的中文wiki看了下,实在是英文水品有限,没有找到需要的东西,现在想请问下张老师,nginx是否有配置可以定义服务端每次发送数据包的大小。期待您的解答,多谢。
有个问题请教您。前几天网上发现你的一键php平台,非常好用,太感谢你了。但是今天使用时发生这样一个问题:前几天用的MySQL server version 5.1.28,今天突然变了,是5.1.28-rc-community,数据库打不开了。我是初学者,不知为何,是不是要重新设置,还是可以转换?
菜鸟飞飞
2008-11-18 20:55
能否告之 怎么调节用户的资源,我绝不是用于商业,就是在网内和朋友玩玩
等待您的解答 十分感谢~~~~
等待您的解答 十分感谢~~~~
小鸟
2008-11-17 13:59
你好,网上看到了你的一键架设服务器环境.
正准备用,
我的QQ:562333133如果有什么问题能咨询你吗?
正准备用,
我的QQ:562333133如果有什么问题能咨询你吗?