连接池

企业应用架构模式学习(三):映射到关系数据库

♀尐吖头ヾ 提交于 2019-12-07 15:03:22
目前大多数应用都是基于关系型数据库的,以至于从另外一个角度看应用系统复杂的功能都由数据库实现了,当然,应用系统主要的也就是数据了和业务逻辑。 数据源层的作用是与应用需要的基础设施的不同部分进行通信(不同的数据存储:文本、文件、数据库、网络存储等等),建立起数据到应用系统的关系桥梁。 架构模式 架构模式要解决的问题是驱动领域逻辑访问数据库的方式。 行数据入口 记录集访问 目前我们的框架两种都支持,findById(ID),findList(*),记录集的访问结果同样也映射到一个个实例中。 行为问题 所谓行为问题,就是如何让各种对象从数据库中读取出来以及存到数据库中。多个对象的读取修改写入数据库是麻烦的,特别是多个操作相同的数据时,如何保证对象中的数据是有效的,也就是同步。 专门解决上述问题的模式就是工作单元,工作单元跟踪所有从数据库中读取的对象以及所有以任务形式修改过的对象,同样负责将更新提交到数据库。当我们调用保存数据的时候,工作单元并不立即执行,二是放入队列中。 加载对象还有另外一个问题,就是对象总是要关联很多个对象的,当某些数据不需要时,如果还要从数据库中取出来,那效率必然底下,为了避免这种低效,不需要的数据必须不加载进来,当然需要的时候还是要能加载,这里就使用到了延迟加载,拥有对象的占位符,而不是实际对象。 读取数据 Find(id),数据查找器,用来隐藏sql查询语句。

大话转岗PHP开发小结

扶醉桌前 提交于 2019-12-06 18:38:48
前言 近期因公司内部转岗,开始参与PHP项目进行后端开发,一直都是强类型写的比较多,弱类型语言也有接触了一些,如:nodejs,python,做一些辅助服务,数据采集的事情,刚好内部有这个机会进行可以学以致用,加上之前对后端的理解和经验,很容易上手,这里记录下开发过程遇到的些问题解决方案和自己对PHP的理解,以及项目中的部分架构 当前已经进入PHP7的版本,做了很多的调整,尤其在性能上有很大的提升 面向对象 PHP框架内置很多强大函数,超级全局变量,魔术函数,魔术变量,可以通过提供的内置函数对PHP项目进行拓展,数据类型操作,http信息获取等,通过安装拓展添加各种功能支持,框架内置函数调用大部分还是偏向面向过程,通过调用函数,传入要操作的类型数据和依赖数据,这里刚开始有些不习惯,面向对象的开发中习惯直接 类型变量/对象 点出函数。 现在PHP开发可以选择使用面向过程也可以用面向对象,最早PHP版本不支持面向对象特性,PHP5开始对OOP有良好的支持,很多PHP开发者没有系统性的学习OOP相关知识,包括工龄长的PHP开发者或者老的项目很多还是偏向面向过程开发,所以会接触到很多偏向面向过程开发的项目 在项目开发过程中遇到些偏应用业务开发的项目,看似有用到类,但是并没用到面向对象的特性对业务进行抽象,如:项目中每个业务功能有个php文件对应一个类,类里里大部分都是逻辑function

SpringBoot2.0学习笔记:(十) Spring Boot中集成Redis

*爱你&永不变心* 提交于 2019-12-06 17:52:20
一、关于Lettuce 关于在SpringBoot2.0.x版本中集成Redis,我们先看一下官方的迁移文档有什么说的: Spring Boot2.0迁移指南 当你使用spring-boot-starter-redis的时候,Lettuce现已取代Jedis作为Redis驱动。当你使用更好级别的Spring数据结构时,你会发现变化时清晰的。我们仍然支持Jedis,并且你可以任意切换依赖机制,通过排除io.lettuce:lettuce-core和添加redis.clients.jedis的方式。 Lettuce现已取代Jedis作为Redis驱动 。 那Lettuce又是个什么呢?与Jedis又有何区别呢? Lettuce 是一个可伸缩的线程安全的 Redis 客户端,支持同步、异步和响应式模式。多个线程可以共享一个连接实例,而不必担心多线程并发问题。它基于优秀 Netty NIO 框架构建,支持 Redis 的高级功能,如 Sentinel,集群,流水线,自动重新连接和 Redis 数据模型 Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接 Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问

对 DAO 框架的初步构思

女生的网名这么多〃 提交于 2019-12-06 14:09:06
对 DAO 框架的初步构思 基础: 内置支持JDBC、Spring JDBC和MyBatis数据库访问 -- 抽象提供一致的使用接口 默认三种DAO代理对象访,支持XML动态配置 不依赖Spring 升级: 插件式连接池 插件式支持Spring 事务 多数据源配置 1.内置支持JDBC、Spring JDBC和MyBatis数据库访问 -- 抽象提供一致的使用接口。 请看下面的代码SessionMgr接口: SessionMgr<> { ()()} 代码中实现了简单的数据库操作会话的获取。对外暴露提供统一的接口。JDBC,SpringJDBC和Mybatis各会话管理实现类实现该接口。 自然这块还包括初始化,连接池,事务等工作。 2. XML动态配置 用户肯定说配置太麻烦了,那默认就是支持三种数据库操作会话。 但肯定会有独钟于其中一项的,比如Mybatis。请看下面一段XML配置: <!-- Session 管理器(可选) --> <!-- 可以配置多个,不同的 Session 管理器可使用不同的方式连接不同的数据库 --> <database-session-managers> <!-- name - 名称(必填),class - 管理器实现类(必填) --> <manager name ="session-mgr-jdbc" class ="org.fast.dao.jdbc

性能优化总结篇

女生的网名这么多〃 提交于 2019-12-06 12:35:43
参加工作十一个年头了,从最初为团队的慢SQL做性能优化,到主导推动压力测试完成性能指标,再到后来紧急救火处理各类线上性能问题,对常见的性能问题及其分类在此也做个总结。有些人认为做性能优化并没有那么复杂,不就是做压力测试吗,然后哪里有性能瓶颈就解决哪里不就可以了吗?然而现实情况并不会如此简单,比如系统可能是遗留的老系统,也或者耦合过多不做一定的改造很难单独某个模块进行压力测试,甚至是压力测试中性能表现很好但线上却出了问题。在进行性能优化前你要对系统有个全局的认识,解决手段通常按紧迫程度也可以分即时参数调优类、短期编码救急类、长期架构优化类。 参数调优类按最常见出问题的顺序可分为: JVM参数调优、数据库连接池调优、Tomcat并发线程数等调优等 短期编码救急类的按出问题的顺序可分为: 慢SQL、不合理的循环操作、不合理的线程(池)模型、不合理的超时设置等 长期架构优化类的按出问题的顺序可分为: 应用单点设计、数据库单点设计、未异步化、长任务同步接口设计等 JVM参数调优可参考 《JVM垃圾回收那些事》 数据库连接池调优不同的连接池实现会有所不同,当然不同的连接池性能也差异不小,可自行搜索主流连接池性能基准测试结果对比 其他各类中间件的参数调优可参考阅读各中间件的user guide文档。 参数调优类性能优化见效最快,只要不是用了很偏门的中间件

golang--redis连接池

微笑、不失礼 提交于 2019-12-06 10:52:16
通过golang对redis操作,还可以通过redis连接池,流程如下: (1)事先初始化一定数量的连接,投入到连接池; (2)当go需要操作redis时,直接从连接池取出连接即可; (3)这样可以节省临时获取redis的时间,从而提高效率; package main import ( "fmt" "github.com/garyburd/redigo/redis" ) var pool *redis.Pool func init() { pool = &redis.Pool{ MaxIdle: 8, MaxActive: 0, IdleTimeout: 100, Dial: func() (redis.Conn, error) { return redis.Dial("tcp", "localhost:6379") }, } } func main() { conn := pool.Get() defer conn.Close() _, err1 := conn.Do("HMSet", "user1", "name", "beijing", "address", "beijing") if err1 != nil { fmt.Println("HMSet err=", err1) return } _, err3 := conn.Do("HMSet", "user2",

.NET连接池的问题详解

别等时光非礼了梦想. 提交于 2019-12-06 10:36:27
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=135 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com NET 连接池救生员 NET 连接池救生员 防止可淹没应用程序的池溢出 William Vaughn 大多数 ADO.NET 数据提供程序使用连接池,以提高围绕 Microsoft 断开连接的 .NET 结构构建的应用程序的性能。应用程序首先打开一个连接(或从连接池获得一个连接句柄),接着运行一个或多个查询,然后处理行集,最后将连接释放回连接池。如果没有连接池,这些应用程序将花费许多额外时间来打开和关闭连接。 当您使用 ADO.NET 连接池来管理基于 Web 的应用程序和客户端/服务器 Web 服务应用程序的连接时,您的客户通常会获得更快的连接和更好的总体性能。但是,当您的应用程序或 Web 站点上突然涌入了同时希望进行连接的大量客户时,会发生什么事情呢?您的应用程序会“沉没”,还是会“游泳”?就像救生员一样,您需要仔细监视连接池,以维护它的良好性能,并防止连接池发生溢出。我们首先探讨连接池可能溢出的原因,然后讨论如何编写代码或使用 Windows 性能监视器来监视连接池。 正如我于 2003 年 5 月发表的 “Swimming in the .NET

apache的开源连接池

孤街醉人 提交于 2019-12-06 10:09:16
今天在做一个300多M的xml文件加载入库的过程中发现一个严重的问题,经过几番查找后终于得以解决,在此做下记录: 问题描述: 加载xml文件的过程中有XML格式校验、解析、数据校验、入库四步操作,经过监控发现在入库之前的三个过程执行的时间较长,以至于在进行入数据库的过程中后台抛出如下异常: 2009-04-03 09:10:46,953 - ERROR TransactionInterceptor - Application exception overridden by rollback exception org.springframework.dao.DataAccessResourceFailureException: SqlMapClient operation; SQL []; --- The error occurred in net/htjs/rkxx/dao/sqlmaps/CZRK_BDXX_ZB.xml. --- The error occurred while applying a parameter map. --- Check the getSEQ_BDXX_ID-InlineParameterMap. --- Check the statement (query failed). --- Cause: java.sql.SQLException: Io

Springboot2.x整合Redis以及连接哨兵模式/集群模式

a 夏天 提交于 2019-12-06 08:29:59
依赖: <!--spirngboot版本为2.x--> <!-- 加载spring boot redis包,springboot2.0中直接使用jedis或者lettuce配置连接池,默认为lettuce连接池,这里使用jedis连接池 --> <!-- 加载spring boot redis包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <!-- 排除lettuce包,使用jedis代替--> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> application.properties配置 ##配置redis的连接信息 #spring.redis

SpringBoot application.properties配置参数详情

家住魔仙堡 提交于 2019-12-06 04:17:50
multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart.location 上传文件存放位置 multipart.max-file-size最大文件大小 multipart.max-request-size 最大请求大小 server server.address 服务器地址 server.port 服务器端口 server.context-parameters.[param name] 设置 servlet 上下文参数 server.context-path 应用上下文路径 Jsp-servelt server.jsp-servelt.class-name 针对jsp 使用的 Servlet 类名(默认:org.apache.jasper.servlet.JspServlet) server.jsp-servlet.registered JspServelt 是否要注册到内嵌的 Servlet 容器里(默认 true) server.jsp-servlet.init-parameters[param name] 设置 Jsp Servlet 初始化参数 server.servlet-path主分发器 Servlet 的路径(默认:/)