项目底层数据源引擎平滑切换

深度学习--数据增强总结 数据增强(Data Augmentation)是一种通过对现有数据进行多种转换和变换,从而生成更多样本的方法。其主要目的是通过增加数据量和多样性,帮助模型更好地泛化,减少过拟合现象。数据增强方法广泛应用于计算机视觉、自然语言处理、语音识别等领域。在深度学习中,由于模型通常需要大量的标注数据,数据增强成为提升模型性能的重要手段。 阅读详情

前言

随着数据量的增长以及业务的调整变更,我们需要选择合适的技术及存储引擎对数据进行归类,调整,达到高并发、秒响应、低延迟及可扩展对现有程序的改造升级

问题&现状

  1. 任务重,时间紧,人力不足,不能够重构业务
  2. 平滑切换,客户无感知
  3. 自建git服务器一套代码,要兼容不同分支发布

解决方案

1.对于问题一,我们要采用oop to aop 的变成思维的转变,即通过切面来完成,尽量不改动原来的业务逻辑,尤其是之前的老系统,多分组,一个改动,可能导致几十个bug 的,横空出世,太太可怕了吧
2. 第二个问题就是兼容,略带框架思维,走配置化和开关,不仅可以起到有效的解耦,而且还可以做到有效的补偿,有问题及时解决
3. 总体方案 切面 + 配置化

案例分享

直接更换数据库引擎 &根据标记做数据源切换

spring &Mybatis

案例一:基于包扫描的单数据源
1. xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

     <bean id="parentDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="maxActive" value="${windBird.maxActive}"/>
        <property name="initialSize" value="${windBird.initialSize}"/>
        <property name="maxWait" value="${windBird.maxWait}"/>
        <property name="minIdle" value="${windBird.minIdle}"/>
        <property name="timeBetweenEvictionRunsMillis" value="${windBird.timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${windBird.minEvictableIdleTimeMillis}"/>
        <property name="validationQuery" value="${windBird.validationQuery}"/>
        <property name="testWhileIdle" value="${windBird.testWhileIdle}"/>
        <property name="testOnBorrow" value="${windBird.testOnBorrow}"/>
        <property name="testOnReturn" value="${windBird.testOnReturn}"/>
        <property name="poolPreparedStatements" value="${windBird.poolPreparedStatements}"/>
        <property name="maxOpenPreparedStatements" value="${windBird.maxOpenPreparedStatements}"/>
    </bean>

    <bean id="newDataSource" parent="parentDataSource">
        <property name="url">
            <value>${
   
   jdbc_new.url}</value>
        </property>
        <property name="username">
            <value>${
   
   jdbc_new.username}</value>
        </property>
        <property name="password">
            <value>${
   
   jdbc_new.password}</value>
        </property>
    </bean>
	
	<bean id="oldDataSource" parent="parentDataSource">
        <property name="url">
            <value>${
   
   jdbc_old.url}</value>
        </property>
        <property name="username">
            <value>${
   
   jdbc_old.username}</value>
        </property>
        <property name="password">
            <value>${
   
   jdbc_old.password}</value>
        </property>
    </bean>
<!--构造一个动态数据源 --> 
    <bean id="enhanceDynamicDataSource" class="com.windBird.service.impl.dataSource.enhanceDynamicDataSource"></bean>
<!--添加一个拦截器 -->  	
    <bean id="enhanceMapperInterceptor" class="com.windBird.service.impl.dataSource.EnhanceMapperInterceptor"></bean>
    <bean id="sqlSessionFactoryTestDataSource" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="enhanceDynamicDataSource"/>
        <property name="typeAliasesPackage" value="com.windBird.service.entity"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:/sqlmap/test/*Mapper.xml</value>
                <value>classpath:/sqlmap/test/enhance/*Mapper.xml</value>
            </list>
        </property>
        <property name="plugins">
            <list>
                <ref bean="testMapperInterceptor"/>
            </list>
        </property>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryTestDataSource"/>
        <property name="basePackage" value="com.windBird.service.impl.test.dao"/>
        <property name="annotationClass" value="com.windBird.mybatis.MyBatisRepository"/>
    </bean>

    <bean id="txManagerTestHistory"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="enhanceDynamicDataSource"/>
		 <qualifier value="testHistory"/>
    </bean>
    <tx:annotation-driven transaction-manager="txManagerTestHistory"/>

</beans>

2. 构造的动态数据源
package com.wind.bird.service.impl.dataSource;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * @author windbird
 * @Date 2022/12/4 22:03
 * @ClassName EnhanceDynamicDataSource
 * @desc:  构造动态数据源
 */
public class EnhanceDynamicDataSource  extends AbstractRoutingDataSource {
   
   
    /**
     * 仅仅历史dao层切mapper
     */
    private static final ThreadLocal<Boolean> testReadMark = ThreadLocal.withInitial(() -> false);

    public static void setTestReadMark(Boolean Value){
   
   
        testReadMark.set(Value);
    }

    public static Boolean getTestReadMark(){
   
   
        return testReadMark.get();
    }


    /**
     * 即将使用的新数据源
     */
    @Resource
    private DruidDataSource newDataSource;

    /**
     * 改造之前的旧数据源
     */
    @Resource
    private DruidDataSource oldDataSource;

    
UE4 Control Rig引擎内绑定系统:从原理到实战构建动画师友好管线 在游戏开发与三维动画制作中,角色绑定(Rigging)是赋予模型运动能力的关键技术,其核心原理是通过骨骼层级与控制器系统驱动网格变形。传统基于DCC软件(如Maya、Blender)的外部绑定流程,常因软件间数据转换导致效率低下与效果不一致。引擎内绑定技术应运而生,它通过在游戏引擎内部直接构建和运算绑定系统,实现了真正的所见即所得与实时迭代,极大提升了动画创作效率与质量。以虚幻引擎4(UE4)的Control Rig系统为例,它通过可视化节点图、模块化Rig Unit、清晰的执行阶段以及与Sequencer 阅读详情

相关推荐

数据库零停机迁移实战:从双写到切换的全流程解析

本文详细解析了数据库零停机迁移的全流程,重点介绍了双写机制、数据同步模式及五阶段实战流程。通过实际案例和代码示例,展示了如何在保证业务连续性的前提下完成数据库迁移,特别适用于电商、金融等对停机敏感的场景。

weixin_42638178的博客 174

Kimi AI PPT:从美化工具到认知架构引擎的范式革命

PPT制作正经历从‘视觉呈现’到‘认知工程’的本质升级。传统AI工具停留于文本转模板的表层美化,而新一代AI PPT系统依托语义深度解析、跨模态意图映射与场景化叙事编排三大能力,将幻灯片重构为信息压缩、认知引导与情绪触发的三维载体。其核心在于理解人类表达逻辑——如自动识别‘关键指标→用户痛点→解决方案’的信息流,并基于领域知识图谱(如医疗术语权重、风投BP叙事模板)实现精准生成。技术价值体现在大幅降低认知超载、提升关键信息触达率,并支撑融资路演、学术汇报、政企交付等高敏感场景。本文聚焦Kimi在语义解构、视

civtsbiqr522632413的博客 303

AI编排实战:MuleSoft+LangChain双引擎企业级落地指南

AI编排(AI Orchestration)是企业将大模型能力与核心业务系统深度集成的关键范式,其本质是解决数据孤岛、模型调度与安全交付的协同问题。它基于服务编排原理,通过解耦数据接入层与AI推理层,实现跨系统上下文聚合、动态模型路由和结构化结果输出。技术价值在于降低AI工程化门槛、保障GDPR/等保合规、提升端到端可观测性。典型应用场景包括销售智能助手、供应链风险预警、HR知识问答等。本文聚焦MuleSoft与LangChain双引擎协同设计,覆盖数据安全调度、多跳推理链构建及生产级避坑实践。

weixin_30294295的博客 505

图像处理任务中的数据增强技术指南

数据集质量通常涉及到数据的准确性、一致性、完整性和相关性。准确性确保了数据的正确性;一致性保证数据在各个维度上无冲突;完整性意味着数据集包含了模型训练所需的所有必要特征;相关性则是指数据必须与目标问题紧密相关,能有效支持学习过程。图像处理库是进行图像处理任务的重要工具,它们通常提供了一系列的函数和工具,能够帮助我们以编程的方式实现各种图像操作。在Python领域,有多个流行的图像处理库,它们各有特色。

weixin_42452924的博客 1443

从零搭建Python量化交易框架:核心设计与实战要点

量化交易在个人投资者和中小团队中越来越受到重视,而选择合适的开发框架往往成为策略落地的第一道门槛。现成的开源框架虽然功能丰富,却常在数据适配、回测与实盘切换、多策略并行等方面暴露耦合度高、定制性差的问题。理解事件驱动架构、数据抽象、撮合逻辑、滑点与手续费模拟、前视偏差规避等基础原理,是构建可靠量化系统的关键。围绕这些核心概念,一套自研的轻量级Python量化交易平台给出了完整示范:通过统一的数据接口、策略与账户分离、回测与实盘共用Broker接口,以及前置风控和监控告警,实现同一套策略平滑切换回测与实盘。适

weixin_30652491的博客 478

ADS使用Smith圆图进行阻抗匹配

在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输

红茶绿茶和奶茶的博客 3万+

解密HDMI热插拔检测电路:从HPD引脚到EDID读取的全流程避坑

本文深入解析HDMI热插拔检测与EDID读取的全流程,从HPD引脚信号特性、DDC通道I2C协议到EDID数据结构,系统剖析了硬件电路设计、信号完整性和软件协议中的常见陷阱与解决方案,为消费电子设备开发者提供了一套完整的实战避坑指南。

weixin_29291069的博客 650

Fluent基于低氧舱气体交换仿真(氮气与空气混合)

一、背景概述 模拟低氧舱充氮气和排除混合气体的过程,假设注入95%的氮气,舱内原有气体为空气,压力为标准大气压,温度为300K。观察气体注入过程中,舱内平均氮气和氧气浓度的变化。 二、Fluent设置 Setup 1、General type选择压力基 绝对速度 瞬态 重力勾选 2、Model 能量方程开启 组分运输开启,设置方法如下: 选择后OK,view就会变成Edit,点击Edit。然后再次点击Edit。 将组分中的非氮气氧气和空气的气体移除,右边选项需要将空气放在最后一位。 3、Materi

qq_35535616的博客 1万+

PLC作为Modbus TCP客户端

PLC作为Modbus TCP客户端,Modbus Slave作为服务器

soledad_chao的博客 4379

RandLA-Net复现SemanticKITTI和S3DIS数据集

RandLA-Net复现KITTI和室内数据集

weixin_48845174的博客 4120

Google Earth Engine 红树林制图方法的代码(三个模块)

谷歌地球引擎红树林制图方法(GEM)提供了一种直观、易用且可复制的工具,适用于广泛的非专业沿海管理者和决策者。该工具全面回顾并整合了相关的红树林遥感文献,并利用云计算的力量,包括简化的基于图像的潮汐校准方法。GEM 可免费用于非营利用途,并在 GEE 中运行,包含全面且详细注释的代码。GEM 专门设计用于绘制全球范围内多日期红树林分布并量化其动态变化。目前可用的工具和方法未能充分利用沿海管理者通常持有的丰富地方专业知识——GEM 致力于填补这一空白,帮助结合地方专业知识与 GEE 的云计算能力。

此星光明博客 560

2025年新发表的语音大模型全双工模型/框架/技术

参考该论文,给出2025年新发表的全双工模型或框架或技术下面这份清单专挑、且与“全双工语音对话/同步对话(边听边说、可打断、回馈/相槌、重叠语音)”直接相关的。我也结合你提到的的四大维度(暂停处理、相槌、顺滑换手、打断管理)来点出它们各自的贡献点,便于后续评测与对比。

u013250861的博客 631

Android PMS——概述(一)

PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用

小旭的专栏 1668

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Idea 代码存在报找不到符号
下一篇: 给实体所有字段批量反射赋值
WindwardBird
博客等级 码龄7年 19粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值