存档

文章标签 ‘database’

Use crontab to finish works which will deal with access logs and load into infobright database

2011年7月21日 没有评论

在昨天的文章中,我们讲述了如何使用Python来访问Java程序,在今天我们继续聊聊脚本的知识。最近由于业务的需要,给数据运维人员搞了个先进的数据查询引擎-Infobright,有关infobright的鼎鼎大名早已经是如雷贯耳,数据压缩上确实很牛叉,可以参考《Infobright数据仓库搭建》《Infobright的数据类型以及优化相关》。这几篇都跟mysql优化类似,但是略有不同还是注意的好,为了更好的优化效果,比如我在创建数据库表的时候就把原来的Varchar类型的字段创建成了Char,因为varchar的效率很低。
数据引擎搭建起来了,接下来我们需要自动的把数据加载到我们的数据库,由于众所周知的原因,目前社区办的ICE只支持load加载数据,所以我们得把我们的日志文件先处理成Infobright能够接受的类型,比如常见的csv格式。然后使用脚本自动的把我们的结果数据搞到数据库里面就可以了。
第一个脚本,完成日志目录的创建,日志合并,日志处理

#!/bin/sh
 
export LOG_DIR=/data1/remote-log-server/log/
today=`date "+%Y-%m-%d"`
yestoday=`date -d '1 days ago' "+%Y-%m-%d"`
 
GameLoginPath=$LOG_DIR/gamelogin/$today
 
#merge yesterday log
/bin/cat $LOG_DIR/gamelogin/$yestoday/gamelogin.log.* > $LOG_DIR/gamelogin/$yestoday/gamelogin.log
#use python script deal with access log to infobright data format
/usr/bin/python /data1/weige/python/gamelogin_weige.py $yestoday 99
#auto load data which can be accepted by infobright engine
/bin/sh /data1/remote-log-server/update_data_to_db.sh $yestoday
 
#create today log dir
if [ ! -d "$GameLoginPath" ]; then
        /bin/mkdir -p "$GameLoginPath"
fi

接下来的章节,我们将详细分拆解释我们这个脚本中间运行的这三个脚本,同时进一步对resin容器进行优化。

[数据库]查询当前节点以及所有的下一节点的ID

2009年9月10日 没有评论

以前工作中会有比较多的SQL,但一直没有总结~ 很多都忘记了…在此做个笔记备忘

查询当前节点以及所有的下一节点的ID

表结构:
Field Type Collation Null Key Default Extra Privileges Comment
——— —————- ————— —— —— ——- ————– ——————————- ——-
id int(10) unsigned (NULL) NO PRI (NULL) auto_increment select,insert,update,references
parent_id int(10) unsigned (NULL) YES (NULL) select,insert,update,references
name varchar(255) utf8_general_ci YES (NULL) select,insert,update,references
form_id int(11) (NULL) YES (NULL) select,insert,update,references
path varchar(255) utf8_general_ci YES (NULL) select,insert,update,references

  1. select a.*,group_concat(b.id) as next from category a left join category b on a.id=b.parent_id group by a.id

查询每个分类的前N条记录

早上朋友从CSDN上介绍我看的一个帖子~ 很巧妙的解决办法~ 本来我打算用子查询limit来做…可是MYSQL不支持子查询使用limit 再仔细看这位高人的解决办法~ 确实赞~

   mysql> -- -------------------------------
   mysql> --  Author: liangCK
   mysql> -- -------------------------------
   mysql>
   mysql> -- > 生成测试数据: @T
   mysql> DROP TABLE IF EXISTS tb ;
   Query OK, 0 rows affected (0.01 sec)
 
   mysql> CREATE TABLE tb(录象文件编号 INT,录象文件级别 INT,录象文件时间 TIME);
   Query OK, 0 rows affected (0.05 sec)
 
   mysql> INSERT INTO tb
       -> SELECT 1,1,'12:00:01' UNION ALL
       -> SELECT 2,1,'12:00:02' UNION ALL
       -> SELECT 3,1,'12:00:03' UNION ALL
       -> SELECT 4,2,'12:00:01' UNION ALL
       -> SELECT 5,2,'12:00:02' UNION ALL
       -> SELECT 6,2,'12:00:03' UNION ALL
       -> SELECT 7,3,'12:00:01' UNION ALL
       -> SELECT 8,3,'12:00:02' UNION ALL
       -> SELECT 9,3,'12:00:03';
   Query OK, 9 rows affected (0.09 sec)
   Records: 9  Duplicates: 0  Warnings: 0
 
   mysql>
   mysql> -- SQL查询如下:
   mysql>
   mysql> SELECT *
       -> FROM tb AS A
       -> WHERE 2>(SELECT COUNT(*) FROM tb
       ->          WHERE A.录象文件级别=录象文件级别
       ->;              AND 录象文件时间