电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL單表千萬(wàn)級(jí)數(shù)據(jù)處理的思路分享

瀏覽:20日期:2023-10-02 08:24:13
目錄項(xiàng)目背景改進(jìn)思路觀察數(shù)據(jù)特征多進(jìn)程處理思路總結(jié)數(shù)據(jù)處理技巧項(xiàng)目背景

在處理過(guò)程中,今天上午需要更新A字段,下午爬蟲(chóng)組完成了規(guī)格書(shū)或圖片的爬取又需要更新圖片和規(guī)格書(shū)字段,由于單表千萬(wàn)級(jí)深度翻頁(yè)會(huì)導(dǎo)致處理速度越來(lái)越慢。

select a,b,c from db.tb limit 10000 offset 9000000

但是時(shí)間是有限的,是否有更好的方法去解決這種問(wèn)題呢?

改進(jìn)思路

是否有可以不需要深度翻頁(yè)也可以進(jìn)行數(shù)據(jù)更新的憑據(jù)?是的,利用自增id列

觀察數(shù)據(jù)特征

此單表有自增id列且為主鍵,根據(jù)索引列查詢數(shù)據(jù)和更新數(shù)據(jù)是最理想的途徑。

select a,b, c from db.tb where id=9999999;update db.tb set a=x where id=9999999;多進(jìn)程處理

每個(gè)進(jìn)程處理一定id范圍內(nèi)的數(shù)據(jù),這樣既避免的深度翻頁(yè)又可以同時(shí)多進(jìn)程處理數(shù)據(jù)。提高數(shù)據(jù)查詢速度的同時(shí)也提高了數(shù)據(jù)處理速度。下面是我編寫(xiě)的任務(wù)分配函數(shù),供參考:

def mission_handler(all_missions, worker_mission_size): ''' 根據(jù)總?cè)蝿?wù)數(shù)和每個(gè)worker的任務(wù)數(shù)計(jì)算出任務(wù)列表, 任務(wù)列表元素為(任務(wù)開(kāi)始id, 任務(wù)結(jié)束id)。 例: 總?cè)蝿?wù)數(shù)100個(gè),每個(gè)worker的任務(wù)數(shù)40, 那么任務(wù)列表為:[(1, 40), (41, 80), (81, 100)] :param all_missions: 總?cè)蝿?wù)數(shù) :param worker_mission_size: 每個(gè)worker的最大任務(wù)數(shù) :return: [(start_id, end_id), (start_id, end_id), ...] ''' worker_mission_ids = [] current_id = 0 while current_id <= all_missions:start_id = all_missions if current_id + 1 >= all_missions else current_id + 1end_id = all_missions if current_id + worker_mission_size >= all_missions else current_id + worker_mission_sizeif start_id == end_id: if worker_mission_ids[-1][1] == start_id:breakworker_mission_ids.append((start_id, end_id))current_id += worker_mission_size return worker_mission_ids

假設(shè)單表id最大值為100, 然后我們希望每個(gè)進(jìn)程處理20個(gè)id,那么任務(wù)列表將為:

>>> mission_handler(100, 40)[(1, 40), (41, 80), (81, 100)]

那么,進(jìn)程1將只需要處理id between 1 to 40的數(shù)據(jù);進(jìn)程2將只需要處理id between 41 to 80的數(shù)據(jù);進(jìn)程3將只需要處理id between 81 to 100的數(shù)據(jù)。

from concurrent.futures import ProcessPoolExecutordef main(): # 自增id最大值 max_id = 30000000 # 單worker處理數(shù)據(jù)量 worker_mission_size = 1000000 # 使用多進(jìn)程進(jìn)行處理 missions = mission_handler(max_id, worker_mission_size) workers = [] executor = ProcessPoolExecutor() for idx, mission in enumerate(missions):start_id, end_id = missionworkers.append(executor.submit(data_handler, start_id, end_id, idx))def data_handler(start_id, end_id, worker_id): pass思路總結(jié) 避免深度翻頁(yè)進(jìn)而使用自增id進(jìn)行查詢數(shù)據(jù)和數(shù)據(jù) 使用多進(jìn)程處理數(shù)據(jù) 數(shù)據(jù)處理技巧

記錄處理成功與處理失敗的數(shù)據(jù)id,以便后續(xù)跟進(jìn)處理

# 用另外一張表記錄處理狀態(tài)insert into db.tb_handle_status(row_id, success) values (999, 0);

循環(huán)體內(nèi)進(jìn)行異常捕獲,避免程序異常退出

def data_handler(start_id, end_id, worker_id): # 數(shù)據(jù)連接 conn, cursor = mysql() current_id = start_idtry: while current_id <= end_id:try: # TODO 數(shù)據(jù)處理代碼 passexcept Exception as e: # TODO 記錄處理結(jié)果 # 數(shù)據(jù)移動(dòng)到下一條 current_id += 1 continueelse: # 無(wú)異常,繼續(xù)處理下一條數(shù)據(jù) current_id += 1except Exception as e: return ’worker_id({}): result({})’.format(worker_id, False)finally: # 數(shù)據(jù)庫(kù)資源釋放 cursor.close() conn.close()return ’worker_id({}): result({})’.format(worker_id, True)

更新數(shù)據(jù)庫(kù)數(shù)據(jù)盡量使用批量提交

sql = '''update db.tb set a=%s, b=%s where id=%s'''values = [ (’a_value’, ’b_value’, 9999), (’a_value’, ’b_value’, 9998), ... ]# 批量提交,減少網(wǎng)絡(luò)io以及鎖獲取頻率cursor.executemany(sql, values)

以上就是MySQL單表千萬(wàn)級(jí)數(shù)據(jù)處理的思路分享的詳細(xì)內(nèi)容,更多關(guān)于MySQL單表千萬(wàn)級(jí)數(shù)據(jù)處理的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 亿诺千企网-企业核心产品贸易 | 杭州成人高考_浙江省成人高考网上报名 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 巨野月嫂-家政公司-巨野县红墙安康母婴护理中心 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 好看的韩国漫画_韩漫在线免费阅读-汗汗漫画 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 上海律师事务所_上海刑事律师免费咨询平台-煊宏律师事务所 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 移动机器人产业联盟官网 | 广州小程序开发_APP开发公司_分销商城系统定制_小跑科技 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 磁力抛光研磨机_超声波清洗机厂家_去毛刺设备-中锐达数控 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 |