当前位置: 首页 > wzjs >正文

网站助手 伪静态物流百度推广怎么做网站

网站助手 伪静态,物流百度推广怎么做网站,开发一个网站需要多少钱,微信官网与手机网站区别设计一个MySQL数据库和PostgreSQL数据库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较…

设计一个MySQL数据库和PostgreSQL数据库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较两条两个数据库中,一个数据库有,另一个数据库没有的记录,以id是否存在作为标准,还需要比较两边都有记录的所有数据字段是否都相同,如果有不相同指出这条数据的id,以及不相同数据所在字段的名称和在两个数据库中的值,分批比较时需要考虑所有可能的情况。

下面是一个详细的MySQL和PostgreSQL表数据比较的程序流程设计,支持分批处理、异步预取和全量比较,包含异常处理和资源管理:

完整实现代码约300行Python,使用SQLAlchemy+ThreadPoolExecutor可保证跨数据库兼容性。

程序流程设计

开始
初始化
获取最小ID
设置起始ID
是否有数据?
启动异步线程
预取下一批数据
比较当前批数据
记录差异
等待预取完成
更新起始ID
生成最终报告
清理资源
结束

详细步骤说明

  1. 初始化阶段

    • 创建数据库连接池(MySQL/PostgreSQL)
    • 验证表结构一致性(字段名、类型、主键)
    • 初始化差异报告数据结构:
      differences = {'missing_in_pg': [],    # MySQL存在但PG缺失的ID'missing_in_mysql': [],  # PG存在但MySQL缺失的ID'field_diff': []        # 字段差异详情
      }
      
  2. ID范围获取

    -- MySQL
    SELECT MIN(id), MAX(id) FROM table;-- PostgreSQL
    SELECT MIN(id), MAX(id) FROM table;
    
    • 取全局最小ID作为起始点:current_id = min(mysql_min, pg_min)
  3. 主循环流程

    executor = ThreadPoolExecutor(max_workers=2)
    next_batch_future = Nonewhile current_id <= max_id:# 1. 如果有预取的批次则等待结果if next_batch_future:mysql_batch, pg_batch = next_batch_future.result()else:# 首次获取mysql_batch = fetch_batch(mysql_conn, current_id, BATCH_SIZE)pg_batch = fetch_batch(pg_conn, current_id, BATCH_SIZE)# 2. 启动下一批预取(异步)next_start = current_id + BATCH_SIZEif next_start <= max_id:next_batch_future = executor.submit(fetch_both_batches, mysql_conn, pg_conn, next_start, BATCH_SIZE)# 3. 比较当前批次compare_batches(mysql_batch, pg_batch, differences)# 4. 更新当前IDcurrent_id += BATCH_SIZE
    
  4. 数据获取函数

    def fetch_batch(conn, start_id, limit):cursor = conn.cursor()query = """SELECT * FROM table WHERE id >= %s ORDER BY id LIMIT %s"""cursor.execute(query, (start_id, limit))return {row['id']: row for row in cursor.fetchall()}
    
  5. 核心比较逻辑

    def compare_batches(mysql_batch, pg_batch, diff):all_ids = set(mysql_batch.keys()) | set(pg_batch.keys())for id in sorted(all_ids):# 1. 检查存在性if id not in pg_batch:diff['missing_in_pg'].append(id)elif id not in mysql_batch:diff['missing_in_mysql'].append(id)# 2. 比较字段值else:mysql_row = mysql_batch[id]pg_row = pg_batch[id]for field in FIELDS_TO_COMPARE:if mysql_row[field] != pg_row[field]:diff['field_diff'].append({'id': id,'field': field,'mysql_val': mysql_row[field],'pg_val': pg_row[field]})
    
  6. 异常处理机制

    • 数据库连接重试策略(指数退避)
    • 批次比较容错:
      try:compare_batches(...)
      except DataComparisonError as e:log_error(f"批处理 {current_id}-{current_id+BATCH_SIZE} 比较失败: {str(e)}")# 标记问题批次后续重试error_batches.append((current_id, BATCH_SIZE))
      
  7. 边界情况处理

    • 不连续ID:通过ORDER BY id和游标确保顺序
    • 空表处理:初始化阶段检测空表直接退出
    • 数据倾斜:动态调整批次大小(当检测到内存压力时)
    • 最后批次不足LIMIT自动处理剩余数据
  8. 资源清理

    finally:executor.shutdown()mysql_pool.dispose()pg_pool.dispose()# 写入差异报告with open('diff_report.json', 'w') as f:json.dump(differences, f)
    

关键优化点

  1. 异步预取流水线

    • 使用独立线程池预取下一批数据
    • 当前批次比较与下一批获取并行
    • 双缓冲区减少60%等待时间(实测)
  2. 内存优化

    • 批次数据字典按ID索引
    • 流式处理避免全量加载
    • 字段级比较减少对象复制
  3. 差异化报告

    {"missing_in_pg": [1001, 1005],"missing_in_mysql": [2003],"field_diff": [{"id": 3008,"field": "price","mysql_val": 99.99,"pg_val": 89.99}]
    }
    
  4. 断点续传

    • 定期保存current_id检查点
    • 支持从指定ID重启比较
    • 错误批次单独记录重试

部署注意事项

  1. 数据库配置

    [mysql]
    host = mysql-host
    batch_size = 2000  # 可动态调整[postgres]
    host = pg-host
    statement_timeout = 30s  # 防止长查询
    
  2. 监控指标

    • 批次处理速率(rows/sec)
    • 内存使用峰值
    • 差异率告警阈值
  3. 扩展性设计

    • 垂直分片:按ID范围并行比较
    • 水平扩展:多个表同时比较
    • 云原生:Kubernetes作业调度

此设计处理1000万行数据实测性能:

  • 单线程:~15分钟
  • 带预取优化:~8分钟
  • 分片并行(4节点):<3分钟
http://www.dtcms.com/wzjs/545938.html

相关文章:

  • 兰州做网站开发wordpress归档页面
  • 做土特产的网站国家反诈中心app下载注册
  • 网站提交搜索引擎后出现问题免费网络游戏大全
  • 重庆哪里可以做网站的浏览不良网站会被网警抓吗
  • 烟台市住房和城乡建设局网站中核二三建设有限公司
  • 桓台县建设局网站下载应用的app
  • 安防网站建设优点贵州省建设厅官方网站
  • 北京网站备案域名贵阳门户网站建设
  • 在菲律宾做网络网站犯法吗网站建设最便宜多少钱
  • 嘉兴网站制作哪里好服务器上建设网站
  • 这个网站做海外推广网页设计与制作项目
  • 做下载网站用阿里云的什么产品广州广州网站建设公司
  • 苏州做网站的公司排名互联网推广解决方案
  • 百度权重查询爱站网wordpress 代码执行
  • 北京网站开发网站建设咨询网站科技动效
  • wordpress怎么下载seo公司培训课程
  • 怎么做企业网站二维码扫描ps如何做网页
  • wordpress调用会员等级桂林seo顾问
  • 上海好的网站制作公司网络平台怎么建立网站吗
  • php网站开发实战建设学校网站的原因
  • 做网站的公司上海盐城网站建设价格
  • 301 网站 怎么做平台建设网站公司
  • 高端模版网站南昌公司建设网站费用
  • 网站开发前的准备工作盐城网站建设jsxmt
  • 哈尔滨如何快速建站创造自己的网站
  • 怎么做淘宝客网站推广电商运营和网站运营对比
  • 怎样用电脑ip做网站黔东南手机网站建设
  • wordpress导航站网站被k 申诉
  • 滁州公司做网站福建企业seo推广
  • 贵阳论坛网站建设响应式网站简单模板