作者,蓝雄威,叩丁狼教育高级讲师。转载请联系作者。
一、背景
随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。
当用户表达到千万级别,在做很多操作的时候都会很吃力,所以当数据增长到1000万以上就需要分库分表来缓解单库(表)的压力。
二、什么是分库分表[1]
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数 据的水平(横向)切分。
垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。
水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。
三、垂直切分 [1]
个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同 的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:
系统被切分成了,用户,订单交易,支付几个模块。 一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或者多个表。而在架构设计中,各个功能模块相互之间的交互点越统一越少,系统的耦合度就越低,系统各个模块的维护性以及扩展性也就越好。这样的系统,实现数据的垂直切分也就越容易。
但是往往系统之有些表难以做到完全的独立,存在这扩库 join 的情况,对于这类的表,就需要去做平衡,是数据库让步业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用。在系统初期,数据量比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需 要必须去做分割。
一般来讲业务存在着复杂 join 的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种 程度是考验技术架构的一个难题。 下面来分析下垂直切分的优缺点:
优点 :
拆分后业务清晰,拆分规则明确;
系统之间整合或扩展容易;
数据维护简单。
缺点 :
部分业务表无法 join,只能通过接口方式解决,提高了系统复杂度;
受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高;
事务处理复杂。
由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平拆分来做解决。
四、水平切分 [1]
相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,如图
拆分数据就需要定义分片规则。关系型数据库是行列的二维模型,拆分的第一原则是找到拆分维度。比如: 从会员的角度来分析,商户订单交易类系统中查询会员某天某月某个订单,那么就需要按照会员结合日期来拆分,不同的数据按照会员 ID 做分组,这样所有的数据查询 join 都会在单库内解决;如果从商户的角度来讲,要查询某个商家某天所有的订单数,就需要按照商户 ID 做拆分;但是如果系统既想按会员拆分,又想按商家数据,则会有一定的困难。如何找到合适的分片规则需要综合考虑衡。 几种典型的分片规则包括:
按照用户 ID 求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中;
按照日期,将不同月甚至日的数据分散到不同的库中;
按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。
如图,切分原则都是根据业务找到适合的切分规则分散到不同的库,下面用用户 ID 求模举
既然数据做了拆分有优点也就优缺点。
优点 :
拆分规则抽象好,join 操作基本可以数据库做;
不存在单库大数据,高并发的性能瓶颈;
应用端改造较少;
提高了系统的稳定性跟负载能力。
缺点 :
拆分规则难以抽象;
分片事务一致性难以解决;
数据多次扩展难度跟维护量极大;
跨库 join 性能较差
五、什么是Mycat
它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的 Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。
常见应用场景:
单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;
多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;
报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计; 替代 Hbase,分析大数据;
作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选
六、SpringBoot+Mycat+MySQL实现分表分库案例
关于分库分表,Mycat已经帮我们在内部实现了路由的功能,我们只需要在Mycat中配置以下切分规则即可,对于开发者来说,我们就可以把Mycat看做是一个数据库,接下来我们开始搭建环境:
步骤一:
Mycat是使用java写的数据库中间件,所以要运行Mycat前要准备要jdk的环境,要求是jdk1.7以上的环境。所以需要在系统中配置JAVA_HOME的环境变量.
步骤二:
从官网下载Mycat,http://dl.mycat.io/1.6-RELEASE/ 我们是基于CentOS7来搭建Mycat环境的,所以下载版本: Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
步骤三:
将下载好的安装包上传到服务器上并解压.解压之后目录结构如下:
步骤四:
配置切分规则: 将如下配置复制粘贴覆盖mycat/conf/schema.xml
的内容。
select user()
:表示的是在mycat中的逻辑库配置,逻辑库名称为:TESTDB
:表示在mycat中的逻辑表配置,逻辑表名称为:user
,映射到两个数据库节点dataNode
中,切分规则为:rule1
(在rule.xml配置)
:表示数据库节点,这个节点不一定是单节点,可以配置成读写分离.
:真实的数据库的地址配置
:用户心跳检测
:写库的配置
将如下配置复制粘贴覆盖mycat/conf/rule.xml
的内容。
id
mod-long
2
这里定义的是切分规则,是按照id
列进行切分,切分规则是采取取模的方式, 2
:这里配置了我们有拆分了多个库(表),需要和前面配置
中的dataNode个数一致,否则会出错.
步骤五:
在数据库中创建两个数据库db01,db02. 每个库中执行如下建表语句:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
步骤六:
启动mycat,执行mycat/bin/startup_nowrap.sh
步骤七:
项目已经上传到github https://github.com/javalanxiongwei/springboot-mycat 搭建SpringBoot环境,执行插入语句. application.properties
配置如下:
#配置数据源
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
#这里配置的是Mycat中server.xml中配置账号密码,不是数据库的密码。
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
#mycat的逻辑库 端口也是mycat的
spring.datasource.druid.url=jdbc:mysql://192.168.142.129:8066/TESTDB
UserMapper.java
代码如下:
@Mapper
public interface UserMapper {
@Insert("insert into user(id,name) value (#{id},#{name})")
int insert(User user);
@Select("select * from user")
List selectAll();
}
UserController.java
代码如下:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/save")
public String save(User user){
userMapper.insert(user);
return "保存成功";
}
@RequestMapping("/list")
public List list(){
return userMapper.selectAll();
}
}
步骤八:
测试: 在地址栏输入: http://localhost:8080/user/save?id=1&name=tom
http://localhost:8080/user/save?id=2&name=jack
查看数据库发现: id为1的数据插入到数据库db02中的user表。 id为2的数据插入到数据库db01中的user表。 在地址栏输入: http://localhost:8080/user/list
是可以看到刚刚插入的两条记录.
好到这一步我们就已经完成了分表分库了.
你可能感兴趣的:(数据库中间件Mycat+SpringBoot完成分库分表)
JDBC连接池
今惜时
JDBC 数据库 java mysql
数据库连接池什么是连接池连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。这种连接“汇集”起来的技术基于这样的一个事实:对于大多数应用程序,当它们正在处理通常需要数毫秒完成的事务时,仅需要能够访问JDBC连接的1个线程。当不处理事务时,这个连接就会闲置。相反,连接池允许闲置的连接被其它需要的线程使用。事实上,当一个线程需要用JDBC对一个GBase或其它数据库操作时
分布式ID设计方案详解:从理论到实践
一、为什么需要分布式ID?在分布式系统中,唯一ID的生成面临两大核心挑战:全局唯一性:避免跨节点、跨数据中心的ID冲突。有序性:确保ID按时间或业务规则递增,提升数据库写入性能(如InnoDB的B+树索引)。传统单机自增ID(如MySQLAUTO_INCREMENT)无法满足分库分表、高并发等场景需求,因此需引入分布式ID方案。二、主流分布式ID方案对比方案优点缺点适用场景UUID简单、无中心化依
MySQL分布式ID冲突详解:场景、原因与解决方案
码不停蹄的玄黓
mysql 分布式 数据库 ID冲突
引言在分布式系统开发中,你是否遇到过这样的崩溃时刻?——明明每个数据库实例的自增ID都从1开始,插入数据时却提示“Duplicateentry‘100’forkey‘PRIMARY’”;或者分库分表后,不同库里的订单ID竟然重复,业务合并时直接报错……这些问题的核心,都是分布式ID冲突。今天咱们就来扒一扒MySQL分布式ID冲突的常见场景、底层原因,以及对应的解决方案,帮你彻底避开这些坑!一、为什
【学习】搭建个人Hexo博客网站
程序员
一、准备环境1、安装node访问Node.js官网:https://nodejs.org/下载LTS(长期支持版本)安装时保持默认选项即可安装完成后,打开命令提示符验证安装:node-v2、安装npmnpm已包含在Node.js安装包中,安装Node.js时会自动安装打开命令提示符验证安装:npm-v更新npm到最新版本(可选):npminstall-gnpm3、安装hexo打开命令提示符,以管理
用 AI “一句话生成代码”,用创意兑换灵码潮品:技术人的夏日狂欢季来了
人工智能
在AI技术迅猛发展的2025年,我们正式推出“通义灵码编程智能体挑战季”,以“码力觉醒”为主题,打造一场融合技术探索与潮流文化的开发者盛宴。活动以体验MCP服务、Qwen3大模型及记忆功能的智能编程助手为核心,通过“小游戏开发”和“MCP场景实践”两大趣味赛道,降低AI技术门槛,让开发者轻松体验“一句话生成代码”的魔力。活动亮点抢先看:零门槛参与:新老用户均可参与,完成任务即领限量定制棒球帽!趣味
GitHub账号注册与Git关联:从零到一的完整指南
Android洋芋
前行路 黑科技 经验历程 github git GitHub注册 Git关联 SSH密钥 团队协作
简介GitHub是开发者协作与代码管理的核心平台,而Git则是实现版本控制与团队协作的必备工具。本文将从零开始,手把手教你完成GitHub账号注册、Git环境搭建、SSH密钥生成、本地仓库初始化及与GitHub仓库的绑定。通过代码示例、Mermaid图解及企业级应用场景,帮助你全面掌握GitHub与Git的关联技巧,为个人开发与团队协作打下坚实基础。一、GitHub账号注册与基础配置1.1注册Gi
WebService SendTimeout 超时问题
SKY徐
webservice binding behavior security wcf .net
System.TimeoutException:请求通道在等待00:01:00以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的SendTimeout值。分配给此操作的时间可能是更长超时的一部分。WCF中解决方案:1)首先保证客户端每次建立的连接在使用完成后进行关闭.即调用Close()方法,否则此连接会在设置的会话(一般为10分钟)后才自动关闭.期间任何客户端也无法使用此服务.2)如果
WebService SendTimeout 超时
weixin_30827565
System.TimeoutException:请求通道在等待00:01:00以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的SendTimeout值。分配给此操作的时间可能是更长超时的一部分。WCF中解决方案:1)首先保证客户端每次建立的连接在使用完成后进行关闭.即调用Close()方法,否则此连接会在设置的会话(一般为10分钟)后才自动关闭.期间任何客户端也无法使用此服务.2)如果
ShardingSphere-JDBC 详解
csdn_tom_168
Apache ShardingSphere 数据库 ShardingSphere JDBC 学习
ShardingSphere-JDBC(原Sharding-JDBC)是ApacheShardingSphere的核心模块之一,定位为轻量级Java框架,在Java的JDBC层提供分库分表、读写分离、数据加密、影子库等分布式数据库增强能力。它直接操作JDBC接口,对应用透明,集成成本极低。以下是ShardingSphere-JDBC的详解:一、核心功能数据分片:分库分表:将逻辑上的大表(库)拆分成
Python-selenium爬取
藏在歌词里
python selenium 开发语言
selenium前言使用python的requests模块还是存在很大的局限性,例如:只发一次请求;针对ajax动态加载的网页则无法获取数据等等问题。特此,本章节将通过selenium模拟浏览器来完成更高级的爬虫抓取任务。什么是seleniumSelenium是一个用于自动化Web应用程序测试的开源工具集。它提供了一组API和工具,可以与多种编程语言一起使用,如Java、Python、C#等,用于
STM32通用定时器PWM波输出1
zp7541
stm32基本知识 stm32 电子
STM32通用定时器PWM波输出1一、简介根据STM32中文参考手册,完成STM32通用定时器的PWM输出代码。二、1.STM32中文参考手册的PWM部分三、代码的编写1.先使能TIM3定时器voidPWM1_init(u16arr,u16psc){RCC->APB1ENR|=1APB2ENR|=1CRL&=0xffffff00;//PB0PB1GPIOB->CRL|=0x000000bb;3.脉
将conda虚拟环境迁移到新的服务器上
icewithzero
conda 服务器 运维
文章目录前言1.1修改pip文件1.2修改pip文件前言 由于服务器系统崩了,需要新建环境,就把之前备份的conda虚拟环境传到了服务器上,这里迁移的只是envs文件夹。1.1修改pip文件 迁移完成后,首先要修改虚拟环境下的pip文件和pip3文件sudochmod777/opt/conda/envs/SOD_wh/bin/pipvim/opt/conda/envs/name/bin/pipsu
Vue.js前端开发实战-----常用UI组件
1.进入命令行界面,执行yarncreatevite命令,输入项目名称,选择Vue框架,选择JavaScript,完成vue项目创建。2.在完成创建之后在其目录下通过yarn安装ElementPius,具体命令如下:
[email protected] .在VSCode中创建一个新的vue文件,文件名称命名分别为MyInfo.vue,RoommateDetail.vue
Spring Cloud Gateway 路由断言匹配规则详解
前言:Gateway的路由断言工厂(RoutePredicateFactories)是用于路由规则匹配的组件,通过这些断言工厂,Gateway能够根据请求的属性,例如:路径、方法、头部信息等,来完成不同的请求转发,本篇分享几种常见的断言工厂及配置方法。Path路由工厂根据请求路径进行匹配#路由唯一标志spring.cloud.gateway.routes[0].id=user-service#路由
动态链接库:技术赋能,打通“最后一公里”的商业模式
超级晒盐人
经验分享 学习方法 人工智能 教育电商 程序员创富
序言-飞跃大山的故事阿登是一位热爱骑行的冒险者,他计划骑行穿越一片壮丽的山脉,去探索那片未知的风景。然而,当他查看路线图时,他发现其中有一座几乎不可能翻越的高峰。这座山峰不仅陡峭无比,还充满了危险的地形,即使是经验最丰富的骑行者也望而却步。阿登知道,仅凭自己的力量,很难完成这次骑行计划。于是,他开始寻找解决方案。在一次偶然的机会中,他听说了一位名叫阿飞的飞行员,他提供一种独特的服务——用直升机帮助
在Windows上构建本地服务器实现Augment团队邀请额度自动化增长的技术探索
yangshuo1281
windows 服务器 自动化
自动化:摘要:随着AI编码助手在开发领域日益普及,如何最大化利用这些工具的免费额度成为了许多开发者关心的话题。本文将以Augment为例,深入探讨一个技术爱好者的“极限挑战”:在Windows操作系统上,从零开始搭建一个本地全栈Web应用,以自动化方式完成团队邀请流程,从而实现免费使用额度的增长。本文不仅是一份操作指南,更是一次关于API交互、Web自动化、前后端开发的深度技术实践。在文章的最后,
这是gpt o1给出的物联网工程专业的大学规划,有人看看这个合理吗?
王倚山
gpt 物联网 学习 开发语言
下面是一份更为详细、覆盖全年(包括寒暑假)的四阶段学习规划,旨在帮助你在大学剩余时间里持续学习、循序渐进地掌握物联网(IoT)核心技能,打造深厚的技术壁垒。每个阶段都有明确的学习目标与自学内容细节,并在寒暑假安排了“强化期”任务,让你全年不停歇,不断提升。总体思路稳扎稳打:从嵌入式基础到RTOS、传感器驱动、通信协议,再到边缘计算、云平台、工业协议、安全攻防,层层深入。项目驱动:每个阶段至少完成1
数据结构之栈实验
lannnn_
学习记录 数据结构 c语言 栈
栈实验实验目的实验环境实验要求实验内容源代码运行结果实验目的掌握栈这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。实验环境CodeBlocks实验要求1.熟悉c语言的语法知识;2.掌握栈的顺序存储结构—顺序栈的定义、构造、获得栈顶元素、入栈、出栈等基本操作;实验内容完成栈的定义、构造、获得栈顶元素、进栈、出栈等函数的编写。要求在主函数中实现对以上操作的调用,编写一个算法判断给定的字符向
Linux 工作环境配置
终端shell如果是pc就安装iterm2,如果是远程服务器就跳过该步骤调整字体,主题;熟悉呼出和tab切换快捷键安装完成后,在/bin目录下会多出一个zsh的文件。修改默认终端,执行:【chsh-s/bin/zsh】chsh需要su权限,没有的话可以在bashrc中加入【exec/bin/zsh】此时可以安装autojump了,https://blog.csdn.net/liujan511536
【Pytorch】8.torch.nn.conv2d
Elephant_King
Pytorch pytorch 人工智能 python
这个函数和我们之前提到的【Pytorch】6.torch.nn.functional.conv2d的使用的作用相似,都是完成CV领域的卷积操作,这里就不在过多赘述torch.nn.conv2d的使用打开pytorch的官方文档,我们可以看到torch.nn.conv2d包含了若干参数in_channels:代表输入的通道数out_channels:代表输出的通道数kernel_size:代表卷积核
顶点着色器:3D世界的魔法化妆师
你一身傲骨怎能输
计算机图形学 着色器
摘要顶点着色器是3D图形渲染中的关键组件,负责将3D模型中的顶点数据转换为2D屏幕坐标,并传递颜色、法线、纹理等属性。它通过坐标变换、属性传递和动画变形等功能,使角色和场景动态化,如角色骨骼动画、水面波动和旗帜飘动等。顶点着色器在渲染管线中处于第一站,与其他着色器(如几何着色器和片元着色器)协作,共同完成复杂的图形渲染任务。通过优化计算和合理分配顶点数量,顶点着色器能够高效处理大量数据,广泛应用于
游戏引擎中顶点着色&像素着色
霸王奉先
游戏开发基础理论 游戏引擎 顶点着色器 像素着色器 顶点颜色 顶点UV 顶点法向
一.GPU渲染管线GPU在接收到游戏端提交的Mesh,Shader数据后,渲染管线开始工作,将数据进行处理投射为2D屏幕中光栅图像.GPU硬件中着色单元有两类,分别为顶点着色器和像素着色器.二.顶点着色器完成Mesh网格中顶点(3D)到屏幕(2D)计算vertex_fvf(灵活顶点格式)=3D坐标+法向+UV+颜色(布料,摇曳等特殊效果)+自定义structVetex_Fvf{floatx,y,z
ModusToolbox 实战入门 - PSOC C3 Smart IO 与 GPIO 应用篇
WPG大大通
Infineon产线 大大通 软件 GPIO CPU 开发工具
摘要本文将带您了解PSOC™ControlC3MCU的架构与开发工具,并示范如何使用EclipseIDEforModusToolbox™创建项目。通过本次使用smartI/O外设的实作示例,您将学习如何将按钮输入引脚通过smartI/O连接至输出引脚,以驱动外部LED,在无需CPU参与的情况下完成初始化后自动运行,进一步体验PSOC™ControlC3的低功耗与高集成特性。软件下载与安装软件版本M
【unitrix】 4.19 类型级二进制数减法实现解析(sub.rs)
liuyuan77
我的unitrix库 rust
一、源码这段代码实现了一个类型级别的数值系统,支持多种数字类型(整数、定点数、变量)之间的减法运算。它使用了Rust的类型系统特性(traits和关联类型)在编译期完成数值计算。//小数、浮点数与Var的混合计算未实现usecore::ops::{Neg,Not,Add,Sub};usecrate::number::{Z0,P1,N1,B0,B1,FixedPoint,Var,NonZero,Pr
python系列之:使用md5和sha256完成签名认证,调用接口
快乐骑行^_^
前端和后端开发 python系列 使用md5和sha256 完成签名认证 调用接口
python系列之:使用md5和sha256完成签名认证,调用接口MD5签名和sha256签名认证md5认证代码sha256认证代码拼接签名生成签名拼接url调用接口MD5签名和sha256签名认证MD5签名认证算法特性:生成128位(16字节)的哈希值计算速度快已被证明存在碰撞漏洞(不同输入可能产生相同输出)签名认证流程:发送方对原始数据计算MD5哈希值将哈希值附加到数据中发送接收方重新计算接收
垂起固定翼无人机应用及技术分析
云卓SKYDROID
无人机 云卓科技 科技 科普 高科技
一、主要应用行业1.能源基础设施巡检电力巡检:适用于超高压输电线路通道的快速巡查,实时回传数据提升智能运检效率。油田管道监测:利用长航时特性(1.5-2小时)对大范围管道进行隐患排查,减少人力巡查成本。2.测绘与地理信息在山区、丘陵等复杂地形实现高精度航测,克服传统固定翼需跑道的限制。单架次可完成200平方公里区域的测绘任务,效率较旋翼机提升3倍以上。3.森林与生态监管通过热红外载荷监测林火隐患,
详细总结在电脑上安装 Ubuntu 22.04 双系统(Windows + Ubuntu)全过程
番知了
电脑 ubuntu windows
目录一、准备阶段1.1重要数据备份1.2下载Ubuntu22.04镜像1.3制作Ubuntu启动U盘二、Windows分区调整(为Ubuntu腾出空间)2.1打开磁盘管理2.2压缩完成后三、BIOS/UEFI设置(强烈建议提前完成)3.1重启电脑→进入BIOS/UEFI3.2保存设置,插入U盘,重启四、启动并安装Ubuntu4.1选择U盘启动4.2进入Ubuntu安装界面4.3安装语言、布局、网络
详细总结实际物理机上安装 Ubuntu 22.04 双系统(Windows + Ubuntu)全过程
番知了
ubuntu windows linux
目录一、准备阶段1.1重要数据备份1.2下载Ubuntu22.04镜像1.3制作Ubuntu启动U盘二、Windows分区调整(为Ubuntu腾出空间)2.1打开磁盘管理2.2压缩完成后三、BIOS/UEFI设置(强烈建议提前完成)3.1重启电脑→进入BIOS/UEFI3.2保存设置,插入U盘,重启四、启动并安装Ubuntu4.1选择U盘启动4.2进入Ubuntu安装界面4.3安装语言、布局、网络
面向对象与面向过程编程:核心区别解析
三笠o.0
Python python 开发语言
1.面向过程和面向对象面向对象编程(OOP)与结构化编程是两种不同的编程范式,它们解决问题的思路有着本质区别:结构化编程(面向过程)的特点:分析阶段:通过自顶向下的方式将问题分解为若干步骤实现阶段:将每个步骤转化为独立的方法/函数执行方式:程序通过依次调用这些方法来完成功能示例:银行转账程序可能包含:validateInput()验证输入checkBalance()检查余额updateAccoun
Spring Boot 应用开发入门指南
20230310121
spring boot 后端
引言在现代软件开发中,SpringBoot以其简化配置和快速开发的特性,成为构建Java应用的热门选择。本文将通过多个主题为大家详细介绍如何搭建和开发SpringBoot应用,涵盖开发环境配置、项目搭建、持久层整合等内容。1.配置开发环境1.1JDK安装首先,确保安装了JDK(JavaDevelopmentKit)。推荐使用JDK11或更高版本。下载地址:OracleJDK安装完成后,配置环境变量
分享100个最新免费的高匿HTTP代理IP
mcj8089
代理IP 代理服务器 匿名代理 免费代理IP 最新代理IP
推荐两个代理IP网站:
1. 全网代理IP:http://proxy.goubanjia.com/
2. 敲代码免费IP:http://ip.qiaodm.com/
120.198.243.130:80,中国/广东省
58.251.78.71:8088,中国/广东省
183.207.228.22:83,中国/
mysql高级特性之数据分区
annan211
java 数据结构 mongodb 分区 mysql
mysql高级特性
1 以存储引擎的角度分析,分区表和物理表没有区别。是按照一定的规则将数据分别存储的逻辑设计。器底层是由多个物理字表组成。
2 分区的原理
分区表由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们可以直接访问各个分区。存储引擎管理分区的各个底层
表和管理普通表一样(所有底层表都必须使用相同的存储引擎),分区表的索引只是
JS采用正则表达式简单获取URL地址栏参数
chiangfai
js 地址栏参数获取
GetUrlParam:function GetUrlParam(param){
var reg = new RegExp("(^|&)"+ param +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null
怎样将数据表拷贝到powerdesigner (本地数据库表)
Array_06
powerDesigner
==================================================
1、打开PowerDesigner12,在菜单中按照如下方式进行操作
file->Reverse Engineer->DataBase
点击后,弹出 New Physical Data Model 的对话框
2、在General选项卡中
Model name:模板名字,自
logbackのhelloworld
飞翔的马甲
日志 logback
一、概述
1.日志是啥?
当我是个逗比的时候我是这么理解的:log.debug()代替了system.out.print();
当我项目工作时,以为是一堆得.log文件。
这两天项目发布新版本,比较轻松,决定好好地研究下日志以及logback。
传送门1:日志的作用与方法:
http://www.infoq.com/cn/articles/why-and-how-log
上面的作
新浪微博爬虫模拟登陆
随意而生
新浪微博
转载自:http://hi.baidu.com/erliang20088/item/251db4b040b8ce58ba0e1235
近来由于毕设需要,重新修改了新浪微博爬虫废了不少劲,希望下边的总结能够帮助后来的同学们。
现行版的模拟登陆与以前相比,最大的改动在于cookie获取时候的模拟url的请求
synchronized
香水浓
java thread
Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然
maven 简单实用教程
AdyZhang
maven
1. Maven介绍 1.1. 简介 java编写的用于构建系统的自动化工具。目前版本是2.0.9,注意maven2和maven1有很大区别,阅读第三方文档时需要区分版本。 1.2. Maven资源 见官方网站;The 5 minute test,官方简易入门文档;Getting Started Tutorial,官方入门文档;Build Coo
Android 通过 intent传值获得null
aijuans
android
我在通过intent 获得传递兑现过的时候报错,空指针,我是getMap方法进行传值,代码如下 1 2 3 4 5 6 7 8 9
public
void
getMap(View view){
Intent i =
apache 做代理 报如下错误:The proxy server received an invalid response from an upstream
baalwolf
response
网站配置是apache+tomcat,tomcat没有报错,apache报错是:
The proxy server received an invalid response from an upstream server. The proxy server could not handle the request GET /. Reason: Error reading fr
Tomcat6 内存和线程配置
BigBird2012
tomcat6
1、修改启动时内存参数、并指定JVM时区 (在windows server 2008 下时间少了8个小时)
在Tomcat上运行j2ee项目代码时,经常会出现内存溢出的情况,解决办法是在系统参数中增加系统参数:
window下, 在catalina.bat最前面
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms5
Karam与TDD
bijian1013
Karam TDD
一.TDD
测试驱动开发(Test-Driven Development,TDD)是一种敏捷(AGILE)开发方法论,它把开发流程倒转了过来,在进行代码实现之前,首先保证编写测试用例,从而用测试来驱动开发(而不是把测试作为一项验证工具来使用)。
TDD的原则很简单:
a.只有当某个
[Zookeeper学习笔记之七]Zookeeper源代码分析之Zookeeper.States
bit1129
zookeeper
public enum States {
CONNECTING, //Zookeeper服务器不可用,客户端处于尝试链接状态
ASSOCIATING, //???
CONNECTED, //链接建立,可以与Zookeeper服务器正常通信
CONNECTEDREADONLY, //处于只读状态的链接状态,只读模式可以在
【Scala十四】Scala核心八:闭包
bit1129
scala
Free variable A free variable of an expression is a variable that’s used inside the expression but not defined inside the expression. For instance, in the function literal expression (x: Int) => (x
android发送json并解析返回json
ronin47
android
package com.http.test;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import
一份IT实习生的总结
brotherlamp
PHP php资料 php教程 php培训 php视频
今天突然发现在不知不觉中自己已经实习了 3 个月了,现在可能不算是真正意义上的实习吧,因为现在自己才大三,在这边撸代码的同时还要考虑到学校的功课跟期末考试。让我震惊的是,我完全想不到在这 3 个月里我到底学到了什么,这是一件多么悲催的事情啊。同时我对我应该 get 到什么新技能也很迷茫。所以今晚还是总结下把,让自己在接下来的实习生活有更加明确的方向。最后感谢工作室给我们几个人这个机会让我们提前出来
据说是2012年10月人人网校招的一道笔试题-给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 将重物放到天平左侧,问在两边如何添加砝码
bylijinnan
java
public class ScalesBalance {
/**
* 题目:
* 给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 (假设N无限大,但一种重量的砝码只有一个)
* 将重物放到天平左侧,问在两边如何添加砝码使两边平衡
*
* 分析:
* 三进制
* 我们约定括号表示里面的数是三进制,例如 47=(1202
dom4j最常用最简单的方法
chiangfai
dom4j
要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip
解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要
简单HBase笔记
chenchao051
hbase
一、Client-side write buffer 客户端缓存请求 描述:可以缓存客户端的请求,以此来减少RPC的次数,但是缓存只是被存在一个ArrayList中,所以多线程访问时不安全的。 可以使用getWriteBuffer()方法来取得客户端缓存中的数据。 默认关闭。 二、Scan的Caching 描述: next( )方法请求一行就要使用一次RPC,即使
mysqldump导出时出现when doing LOCK TABLES
daizj
mysql mysqdump 导数据
执行 mysqldump -uxxx -pxxx -hxxx -Pxxxx database tablename > tablename.sql
导出表时,会报
mysqldump: Got error: 1044: Access denied for user 'xxx'@'xxx' to database 'xxx' when doing LOCK TABLES
解决
CSS渲染原理
dcj3sjt126com
Web
从事Web前端开发的人都与CSS打交道很多,有的人也许不知道css是怎么去工作的,写出来的css浏览器是怎么样去解析的呢?当这个成为我们提高css水平的一个瓶颈时,是否应该多了解一下呢?
一、浏览器的发展与CSS
《阿甘正传》台词
dcj3sjt126com
Part Ⅰ:
《阿甘正传》Forrest Gump经典中英文对白
Forrest: Hello! My names Forrest. Forrest Gump. You wanna Chocolate? I could eat about a million and a half othese. My momma always said life was like a box ochocol
Java处理JSON
dyy_gusi
json
Json在数据传输中很好用,原因是JSON 比 XML 更小、更快,更易解析。
在Java程序中,如何使用处理JSON,现在有很多工具可以处理,比较流行常用的是google的gson和alibaba的fastjson,具体使用如下:
1、读取json然后处理
class ReadJSON
{
public static void main(String[] args)
win7下nginx和php的配置
geeksun
nginx
1. 安装包准备
nginx : 从nginx.org下载nginx-1.8.0.zip
php: 从php.net下载php-5.6.10-Win32-VC11-x64.zip, php是免安装文件。
RunHiddenConsole: 用于隐藏命令行窗口
2. 配置
# java用8080端口做应用服务器,nginx反向代理到这个端口即可
p
基于2.8版本redis配置文件中文解释
hongtoushizi
redis
转载自: http://wangwei007.blog.51cto.com/68019/1548167
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件。采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务。下面是Redis2.8.9的配置文
第五章 常用Lua开发库3-模板渲染
jinnianshilongnian
nginx lua
动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现。而Lua中也有许多模板引擎,如目前我在使用的lua-resty-template,可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的。
如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;而lua-r
JZSearch大数据搜索引擎
颠覆者
JavaScript
系统简介:
大数据的特点有四个层面:第一,数据体量巨大。从TB级别,跃升到PB级别;第二,数据类型繁多。网络日志、视频、图片、地理位置信息等等。第三,价值密度低。以视频为例,连续不间断监控过程中,可能有用的数据仅仅有一两秒。第四,处理速度快。最后这一点也是和传统的数据挖掘技术有着本质的不同。业界将其归纳为4个“V”——Volume,Variety,Value,Velocity。大数据搜索引
10招让你成为杰出的Java程序员
pda158
java 编程 框架
如果你是一个热衷于技术的
Java 程序员, 那么下面的 10 个要点可以让你在众多 Java 开发人员中脱颖而出。
1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 Object Oriented Programming(面向对象编程)这一概念是必须的。没有 OOPS 的坚实基础,就领会不了像 Java 这些面向对象编程语言
tomcat之oracle连接池配置
小网客
oracle
tomcat版本7.0
配置oracle连接池方式:
修改tomcat的server.xml配置文件:
<GlobalNamingResources>
<Resource name="utermdatasource" auth="Container"
type="javax.sql.DataSou
Oracle 分页算法汇总
vipbooks
oracle sql 算法 .net
这是我找到的一些关于Oracle分页的算法,大家那里还有没有其他好的算法没?我们大家一起分享一下!
-- Oracle 分页算法一
select * from (
select page.*,rownum rn from (select * from help) page
-- 20 = (currentPag