哥很是寂寞呀… 寂寞…. ….
年后负责的回溯的任务,数据已经从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