python实现获取根据日期时间切分的数据库的调度信息

哥很是寂寞呀…    寂寞…. ….

年后负责的回溯的任务,数据已经从hbase转移到了ES里面。  替换的原因不是Hbase不行,而是 我们的回溯任务更加的适合用ES全文索引的功能。 

这块业务的逻辑,一开始不是我负责的,那哥们当时采用Hbase作为数据的存储,究其原因还是因为没地方可以放,没有太多的资源做lucene 。。。。


源Hbase的数据是很大的,将近有40T左右…. ….  存放Elasticsearch里面的话,肯定不适合单库的。 按照日期进行切分数据库,每个月为一个数据库 。

因为用户和顾问可能只会给我提供时间段和关键字,那么怎么实现跨库进行查询 。。。 我这边简单开发了一个模块,大家可以根据自己的场景进行二次修改。   


适合场景是 数据库因为量大,根据日期切分成不同的库,该模块会根据你提供的时间段,调度到不同的数据库,可扩展不同的IP地址调度……

多个业务线都会用到这个逻辑,有可能是python,或者是java ruby,为了保证通用性,在实现ES库的中心调度中加了层tornado的api,为不同client提供不同的策略。实现的方法还是有些粗糙,有时间在进一步的改进一下… …


已经把模块推送到pypi了 …. ….

https://pypi.python.org/pypi?name=Control_DB_date&version=0.1.4&:action=display

pip install Control_DB_date

GITHUB 地址, https://github.com/rfyiamcool/Control_DB_date

原文地址是,xiaorui.cc

原文地址是,xiaorui.cc

原文地址是,xiaorui.cc

#coding:utf-8
from datetime import datetime
from datetime import timedelta
import time

class Match_db_date(object):
    """
    Match = Match_db_date()
    import json
    print json.dumps(Match.to_match('2014-01-11','2014-08-22'))
    """
    def getMonthDays(self, year, month ):
        day = 31             
        while day:
            try:
                time.strptime( '%s-%s-%d'%( year, month, day ), '%Y-%m-%d' )    
                return day     
            except:
                day -= 1       

    def fit_date_format(self,year,month):
        if month<10:
            str_db = "buzz_v1_%s0%s"%(year,month)
        else:
            str_db = "buzz_v1_%s%s"%(year,month)
        return str_db
    
    def to_match(self,start,end):
        dc = {}
        opt_start_time = datetime.strptime(start,"%Y-%m-%d")
        opt_end_time = datetime.strptime(end,"%Y-%m-%d")
        count_month = opt_end_time.month - opt_start_time.month
        if count_month == 0:
            """buzz_v1_201502"""
            str_db = "buzz_v1_%s"%opt_start_time.strftime('%Y%m')
            dc[str_db] = [start,end]
            return dc
    
        for i in range(0,count_month+1):
            if i == 0:
                year = opt_start_time.year
                month = opt_start_time.month
                dc[self.fit_date_format(year,month)] = [start,"%s-%s-%s"%(year,month,self.getMonthDays(year,month))]
    
            elif i == count_month:
                year = opt_end_time.year
                month = opt_end_time.month
                day = opt_end_time.month
                dc[self.fit_date_format(year,month)] = ["%s-%s-01"%(year,month),end]
    
            else:
                year = opt_start_time.year
                month = opt_start_time.month+i
                if month<=12:
                    dc[self.fit_date_format(year,month)] = ["%s-%s-01"%(year,month),"%s-%s-%s"%(year,month,self.getMonthDays(year,month) )]
                else:
                    year = month / 12 + year
                    month = month % 12
                    dc[self.fit_date_format(year,month)] = ["%s-%s-01"%(year,month),"%s-%s-%s"%(year,month,getMonthDays(year,month))]
    
        return dc
    


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注