作者,蓝雄威,叩丁狼教育高级讲师。转载请联系作者。
一、背景
随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、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完成分库分表)
Neo4j Windows 3.5 详细安装教程
赵允静Joy
Neo4jWindows3.5详细安装教程neo4jwindows3.5详细安装教程附百度云链接项目地址:https://gitcode.com/Resource-Bundle-Collection/1af38本资源文件提供了Neo4jWindows3.5版本的详细安装教程,帮助用户快速完成Neo4j的安装和配置。教程内容包括从下载、解压、配置环境变量到启动Neo4j服务的全过程。安装步骤访问官网
mediapipe流水线分析 三
江太翁
Android NDK 人工智能 mediapipe android
目标检测Graph一流水线上游输入处理1TfLiteConverterCalculator将输入的数据转换成tensorflowapi支持的TensorTfLiteTensor并初始化相关输入输出节点,该类的业务主要通过interpreterstd::unique_ptrtflite::Interpreterinterpreter_=nullptr;实现类完成数据在cpu/gpu上的推理1.1Tf
7月6日星期日今日早报简报微语报早读
微语早读
生活
7月6日星期日,农历六月十二,早报#微语早读。1、江苏:县级以下禁止开发政务服务APP,年底前全面完成整合归并;2、台风“丹娜丝”或于7日夜间至8日上午在闽浙沿海登陆;3、中国足协:超2.5万人注册球员自荐系统,303人进入备选库;4、商务部:只要欧盟企业满足承诺条件,就不会被征收白兰地反倾销税;5、中国人民抗日战争纪念馆7月8日起恢复开放;6、WTT美国大满贯单打签表公布,孙颖莎王楚钦等将出战;
【推荐算法课程二】推荐算法介绍-深度学习算法
盒子6910
运维视角下的广告业务 算法 推荐算法 深度学习 运维开发 运维 人工智能
三、深度学习在推荐系统中的应用3.1深度学习推荐模型的演化关系图3.2AutoRec——单隐层神经网络推荐模型3.2.1AutoRec模型的基本原理AutoRec模型是一个标准的自编码器,它的基本原理是利用协同过滤中的共现矩阵,完成物品向量或者用户向量的自编码。再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序。什么是自编码器?自编码器是指能够完成数据“自编码”的模型。无论是图像、音频,
Assistant API 流式传输中的事件流原理细节
上有晨光
大模型Agent开发 人工智能 算法 大模型 OpenAI Agent
一、AssistantAPI流式传输事件流基础OpenAIAssistantAPI的流式输出在特定操作时会生成新事件,每个事件由event和data构成。data存放如大模型回复等关键数据,event则表明大模型的处理阶段,像运行、排队、完成等状态信息。二、事件流核心流程整体流程:从创建assistant对象、thread对象并追加message开启run状态(即start模式)起,到获取模型回复
通俗易懂,一看就懂的React与Vue的区别
More more
react.js vue.js
React和Vue是当前最主流的前端框架,对开发者而言,日常开发中它们的区别可以总结为以下几点(用实际场景举例说明):一、写模板的方式不同React:用JSX(JavaScript+HTML混合写法),所有UI逻辑都在JavaScript中完成。Vue:用类似HTML的模板语法,逻辑和模板分离,但也可以通过JSX扩展。//React组件(JSX)functionButton(){const[cou
Java+Python智能化云盘【Day3】
关沐吖
Java+Python Ai智能云盘项目开发专栏 java python 开发语言
提示词工程Prompt简介:大模型必备Prompt提示词工程讲解什么是PromptEngineering提示词工程通过特定格式的文本输入引导AI模型生成期望输出的技术,明确地告诉模型你想要解决的问题或完成的任务也是大语言模型理解用户需求并生成相关、准确回答或内容的基础类比:给Java程序员的任务需求文档(越清晰明确,结果越符合预期)为什么需要学习?大模型就是你的员工,你可以有多个助手,OpenAI
Java+Python智能化Ai云盘[Day2]
OK啊,为了完成学校老师布置的UML作业主播也是开始拿自己的项目开始当成期末大作业来交了。顺道的我也把自己的项目整个的梳理了一通,如果大家最近有UML的大作业要交也可以自取,到时候我把文章word版本直接发到百度网盘上去。里面我只有类图、用例图、活动图、顺序图、状态图。这次也算是一个提前复习了一下项目了把,整个的文档文字都是拿ai去写的,图的话也是我先看了一遍代码,然后给ai说了一遍也算是自己理通
前端常见面试题
黄马小配件
前端 css html
sass语言的特点?1.可以减少重复代码:Sass可以通过使用变量、混合、继承等方式来减少代码的重复性,提高代码的可维护性。2.支持嵌套:Sass支持CSS样式的嵌套,可以更方便地控制样式的层级关系。3.支持模块化:Sass支持模块化开发,可以将样式分成多个模块进行开发,提高代码的可读性和可维护性。4.支持函数和运算符:Sass支持函数和运算符,可以完成更复杂的样式计算。5.支持导入其他文件:Sa
SSL 终结(SSL Termination)深度解析:从原理到实践的全维度指南
(:满天星:)
ssl 网络协议 网络 linux 运维 服务器 centos
SSL终结(SSLTermination)深度解析:从原理到实践的全维度指南一、SSL终结的本质与技术背景1.定义与核心价值SSL终结是指在网络通信链路上,由前端设备(如负载均衡器、反向代理)作为加密流量的“终点”,负责完成SSL/TLS协议的解密过程,并将明文数据转发给后端服务器。其技术本质是通过计算资源的集中化管理,解决HTTPS服务中加密计算与性能扩展的矛盾。2.技术演进背景HTTPS普及的
景联文科技完成数千万元Pre-A轮融资,布局公共数据生产运营|36氪首发
景联文科技
人工智能
景联文的目标是,成为地方政府的公共数据生产、运营商,帮助挖掘公共数据的最大价值。36氪获悉,数据服务公司「景联文科技」于近期完成了数千万元Pre-A轮融资,投资方为杭州金投集团旗下基金。据悉,景联文科技本轮融资将用于公共数据生产运营的布局、智能化语料工程平台构建、以及自建垂直领域高质量标注基地,打造“平台+基地+行业”的数据链闭环生态。景联文科技成立于2012年,是一家AI数据服务运营商。据景联文
景联文科技完成数千万元Pre-A轮融资,加速公共数据生产运营战略布局
景联文科技
人工智能 大数据
2025年5月,景联文科技近期完成数千万元Pre-A轮融资,投资方为杭州金投集团旗下基金,本轮融资将用于布局公共数据生产运营、构建智能化语料工程平台和自建垂域高质量标注基地,形成"平台+基地+行业"的数据链闭环生态。一、聚焦公共数据生产运营国家数据局成立标志着数据治理从“分散监管”向“集中统筹”转型,从顶层设计开始快速推动“数据要素市场化”。2025年5月,国家宣布将加大中央财政资金投入,支持地方
R 语言安装使用教程
小奇JAVA面试
安装使用教程 r语言 开发语言
一、R语言简介R是一种用于统计分析、数据挖掘和可视化的编程语言和环境。它在学术界和数据分析领域中广泛使用,拥有丰富的统计函数库和绘图功能。二、安装R语言2.1下载R安装包前往CRAN官网下载适合你操作系统的安装程序:官网地址:https://cran.r-project.org/2.2Windows安装下载.exe安装包;双击安装程序,按默认选项一路安装即可;安装完成后,可通过RGUI或命令行启动
多目标路径规划:IMOMD-RRT*算法详解
多目标路径规划项目结构与关键算法解析一、项目版本概览该路径规划项目共包含两个主要版本:两个版本的共同点:配置文件路径:config/algorithm_config.yamlsystem:使用不同算法的编号destination:定义目标点的ID列表map:指定使用的地图文件pseudo:1:仅规划起点到终点0:多目标路径规划两个版本的区别:✅新版特点:路径生成由src/main可执行文件完成;支
20个高级DeepSeek指令,帮助你提升200%工作效率,建议收藏!
资源客
DeepSeek指令
前两天我帮一个做产品的朋友优化了几个提示词,结果花2小时就完成了原本需要一整天的竞品分析报告。他当时就愣了,说:"我之前怎么没想到可以这样用?"其实DeepSeek最大的价值不是给你标准答案,而是成为你的思维伙伴。关键就在于你怎么"提问"。今天我把这段时间总结的20个高效提示词分享出来,都是我在实际工作中反复验证过的。如果你能熟练运用其中的5-6个,保证你的工作效率至少提升2倍。深度思考场景:让A
10分钟掌握Python缓存
项目背景代码检查项目,需要存储每一步检查的中间结果,最终把结果汇总并写入文件中在中间结果的存储中可以使用context进行上下文的传递,但是整体对代码改动比较大,违背了开闭原则也可以利用缓存存储,处理完成之后再统一读缓存并写入文件在权衡了不同方案后,我决定采用缓存来存储中间结果。接下来,我将探讨Python中可用缓存组件。python缓存分类决定选择缓存,那么python中都有哪些类型的缓存呢?1
网络资源模板--基于Android Studio 实现的天气预报App
编程乐学
Android 网络项目模板 安卓课设 安卓大作业 androidstudio android 天气预报
目录一、环境说明二、项目简介三、项目演示四、部设计详情(部分)注册页面首页五、项目源码一、环境说明二、项目简介该项目是一个基于Android平台的天气预报应用,使用AndroidStudio开发工具和Java编程语言完成。项目采用了SQLite数据库存储用户数据和地区信息,通过OkHttp实现网络请求获取天气数据,并结合Gson解析JSON格式的天气信息。界面方面使用MaterialDesign设
R语言初学者爬虫简单模板
q56731523
r语言 爬虫 开发语言 iphone
习惯使用python做爬虫的,反过来使用R语言可能有点不太习惯,正常来说R语言好不好学完全取决于你的学习背景以及任务复杂情况。对于入门学者来说,R语言使用rvest+httr组合,几行代码就能完成简单爬取(比Python的Scrapy简单得多),R语言数据处理优势明显,爬取后可直接用dplyr/tidyr清洗,小打小闹用R语言完全没问题,如果是企业级大型项目还是有限考虑python,综合成本还是p
嵌入式Linux-线程同步-自旋锁和读写锁
线程同步一、自旋锁1.1自旋锁概述1.2自旋锁的初始化1.3自旋锁加锁和解锁二、读写锁2.1何为读写锁2.2读写函数初始化2.3读写锁上锁和解锁2.4读写锁的属性一、自旋锁1.1自旋锁概述自旋锁与互斥锁很相似,从本质上说也是一把锁,在访问共享资源之前对自旋锁进行上锁,在访问完成后释放自旋锁(解锁);事实上,从实现方式上来说,互斥锁是基于自旋锁来实现的,所以自旋锁相较于互斥锁更加底层。如果在获取自旋
【深入理解Linux锁机制】五、衍生自旋锁
dong__ge
深入理解Linux驱动程序开发 # Linux内核锁 Linux锁机制 Linux锁 内核锁 Linux驱动开发 Linux
系列文章:我的圈子:高级工程师聚集地【深入理解Linux锁机制】一、内核锁的由来【深入理解Linux锁机制】二、中断屏蔽【深入理解Linux锁机制】三、原子操作【深入理解Linux锁机制】四、自旋锁【深入理解Linux锁机制】五、衍生自旋锁【深入理解Linux锁机制】六、信号量【深入理解Linux锁机制】七、互斥体【深入理解Linux锁机制】八、完成量
javascript基础从小白到高手系列四千八百七十一:读取响应状态信息
完美句号
javascript 开发语言 ecmascript
Response对象包含一组只读属性,描述了请求完成后的状态,如下表所示。属性值headers响应包含的Headers对象ok布尔值,表示HTTP状态码的含义。200~299的状态码返回true,其他状态码返回falseredirected布尔值,表示响应是否至少经过一次重定向status整数,表示响应的HTTP状态码statusText字符串,包含对HTTP状态码的正式描述。这个值派生自可选的H
干程序员这一行也8年+了,我咋觉得开心越来越难了?
旧曲重听1
前端 程序人生 java 职场和发展
“在字节的时候,有一次和10几个同事封闭在会议室开发一个大项目,临近项目上线的那几天,几乎都到2、3点才下班。每当0点以后都是大家最累的时候,虽然每个人脸上充满困意和疲惫,但是看着项目逐渐成型,功能越来越完善,每个人依然干劲十足。我们或许都有做大项目的经历,在项目即将完成前,你会叫苦叫累吗?你的目标就在眼前,你做事充满动力,这才是健康的状态。做难而正确的事情,是很爽的。这段经历过去好多年了,说实话
MySQL 8.0 权限审计实战:揪出那些“权力过大”的用户
运维开发王义杰
系统运维 mysql mysql android 数据库
在日常的运维和开发工作中,数据库的安全性是我们绝对不能忽视的一环。随着攻击手段的日益多样化,仅仅设置一个复杂的密码是远远不够的。我们需要定期对数据库的权限进行审计和加固,遵循“最小权限原则”(PrincipleofLeastPrivilege),确保每个用户只拥有其完成工作所必需的最小权限。在MySQL8.0中,权限管理变得更加精细。今天,我将带大家通过几个简单的SQL查询,快速锁定两类高风险用户
在 Redis 分布式锁场景中,锁超时但业务逻辑未完成解决方案
程序媛青青
redis 分布式 数据库
在Redis分布式锁场景中,锁超时但业务逻辑未完成是一个典型问题,通常称为锁过期与业务执行时间不匹配。以下是几种解决方案:方案一:自续期(看门狗机制)在获取锁的同时启动一个后台线程,定期检查业务是否仍在执行,若未执行完则自动延长锁的过期时间。示例代码(使用Redisson框架):importorg.redisson.Redisson;importorg.redisson.api.RLock;imp
yolov5/v7/v8/v9/v10环境详细配置教程(Windows+conda+pycharm)
视觉算法er
深度学习环境配置 YOLO 目标检测 人工智能 深度学习 conda pycharm
一、所需环境配置1.1.虚拟环境创建首先,打开AnacondaPrompt命令窗口,创建一个新的虚拟环境,后面的包都在这个环境中安装。创建命令是:我的习惯是使用3.8版本的python,你也可以换成更高版本;condacreate-nyolopython=3.8输入命令后,运行结果如下:输入y即可;1.2.激活虚拟环境安装完成后,即可激活虚拟环境,输入以下命令即可;condaactivateyol
URLEncoder和URLDecoder(乱码处理)
前言在进行向服务器传递表单数据的实验的时候,发现得到的英文字符正常而中文字符都是乱码。在百思不得其解的时候,学习了一下URLEncoder和URLDecoder,以及顺藤摸瓜找到了产生乱码的原因和解决办法,在此记录一波。URLEncoder和URLDecoderURLEncoder和URLDecoder主要用完成普通字符和application/x-www-form-urlencodedMIME字
stm32使用rs485进行串口调试
rs485收发数据:在上一篇中完成:https://blog.csdn.net/bling_bling_bui/article/details/149027288?spm=1001.2014.3001.5501https://blog.csdn.net/bling_bling_bui/article/details/149027288?spm=1001.2014.3001.5501重定向print
mac上使用docker搭建gitlab
在Mac上搭建GitLab可以使用Docker来简化安装过程一、安装详细步骤1.安装Docker如果你尚未安装Docker,可以通过以下步骤安装:下载并安装DockerDesktopforMac.安装完成后,启动DockerDesktop,确保Docker运行正常。2.拉取GitLabDocker镜像GitLab官方提供了Docker镜像,可以直接使用它来启动一个GitLab实例。打开终端,运行以
mobaxterm终端sqlplus乱码问题解决
胡斌附体
数据库 sqlplus 字符集设置 乱码
背景。使用mobaxterm终端连接linux。在查询数据库表注释时发现**?**中文乱码。影响对表的分析。完成以下三个编码设置再打开sqlplus查询含中文的数据就正常了总结。需要查看sqlplus的编码是什么SELECTparameter,valueFROMnls_database_parametersWHEREparameterIN('NLS_CHARACTERSET','NLS_NCHAR
CppCon 2018 学习:Return Value Optimization
什么是“返回槽”?在C++或其他编译型语言中,返回槽(ReturnSlot)是编译器在调用函数时为其返回值提前分配的一块内存空间。函数执行完成后,它会把计算出来的返回值写入这块区域,然后控制权返回给调用者,调用者再从这块区域读取结果。举个简单例子:intapple(){return42;}intpear(){return1+apple();//apple返回42,pear返回43}这段代码你觉得看
分享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