将单表600万的数据拆分到20张表的实现方法分享
2016-10-13 13:29
441 查看
将之前的单表数据600万按照用户id取模20的方式,拆分到20张表,平均每张表大概30万的数据,
先写脚本将线上的老数据读取写入到20张表,记录最大的表的id,从昨天的下班的6点开始跑一直跑到第二天的凌晨4点多数据跑完
今天上午10点20上代码测试,没问题了,再把最大的表的id到现在的数据再跑一次,保证数据没有丢失是最新的。
最底层的方法:调用: $table_name_str = Util_Tool::get_table_name('shop_user_score_logs', $this->uid, 20);传一个表的前缀,用户id,20,会返回对应的表名
public static function get_table_name($table_prefix,$lender_id,$mod){
if(empty($table_prefix) || empty($lender_id) || empty($mod)){
return FALSE;
}
$table_prefix = trim($table_prefix);
$lender_id = intval($lender_id);
$mod = intval($mod);
$table_name = $table_prefix.'_'.$lender_id%$mod;
return $table_name;
}
后台数据统计的,for循环统计
$sum_score_int = 0;
for($i=0;$i<20;$i++){
$table_name = 'shop_user_score_logs_'.$i;
$sql = "select
sum(score) as sum_score
from
$table_name
where
day between '$start_date' and '$end_date'
and state = '$state' and action='lottery'
";
$res = $this->db->execute($sql);
if($res){
$sum_score_int+=intval($res[0]['sum_score']);
}
}
return $execute[0]['sum_score'] = $sum_score_int;
先写脚本将线上的老数据读取写入到20张表,记录最大的表的id,从昨天的下班的6点开始跑一直跑到第二天的凌晨4点多数据跑完
今天上午10点20上代码测试,没问题了,再把最大的表的id到现在的数据再跑一次,保证数据没有丢失是最新的。
最底层的方法:调用: $table_name_str = Util_Tool::get_table_name('shop_user_score_logs', $this->uid, 20);传一个表的前缀,用户id,20,会返回对应的表名
public static function get_table_name($table_prefix,$lender_id,$mod){
if(empty($table_prefix) || empty($lender_id) || empty($mod)){
return FALSE;
}
$table_prefix = trim($table_prefix);
$lender_id = intval($lender_id);
$mod = intval($mod);
$table_name = $table_prefix.'_'.$lender_id%$mod;
return $table_name;
}
后台数据统计的,for循环统计
$sum_score_int = 0;
for($i=0;$i<20;$i++){
$table_name = 'shop_user_score_logs_'.$i;
$sql = "select
sum(score) as sum_score
from
$table_name
where
day between '$start_date' and '$end_date'
and state = '$state' and action='lottery'
";
$res = $this->db->execute($sql);
if($res){
$sum_score_int+=intval($res[0]['sum_score']);
}
}
return $execute[0]['sum_score'] = $sum_score_int;
相关文章推荐
- oracle数据迁移到db2数据库的实现方法(分享)
- Oracle 实现拆分列数据的split()方法
- Python字典数据对象拆分的简单实现方法
- Oracle 实现拆分列数据的split()方法
- Oracle 实现拆分列数据的split()方法
- Ajax+ASP和Flash+ASP数据读取取方法有些相似的实现方法
- *引-使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。
- 在ASP.NET这实现Web页面间数据传递的方法
- Ajax+ASP和Flash+ASP数据读取取方法有些相似的实现方法
- IP层网络数据抓包实现方法
- 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误
- 用最愚蠢的方法实现了CVC 数据同步功能...
- 保存数据库中其他对象不变,删除数据库中所有数据的实现方法
- 分享:基于UDP协议实现可靠的数据传输
- 一个将数据文件转换成excel文件打印的java实现方法的代码片断(Struts+poi)
- 用反射和特性实现面向对象的数据持久方法 [无常译]
- 实现了一个SQL查询整个树状结构数据的方法!找更好的!
- ASP.NET中用javascript实现页面间传递数据的方法
- 保存数据库中其他对象不变,删除数据库中所有数据的实现方法
- 实现进程间数据交换的两种方法和应用