一直对这部分不太了解,稍微看了一下,但由于知识储备有限,错误在所难免。
总的看起来MySQL在这部分依旧使用了常规的 reactor+线程池 高并发网络模型,这里我们以poll为列,有如下特点:
貌似看起来大佬的手法都是通用的,都是按照一定模式写出来的。当然实际上涉及的东西还是非常多,但是这里我们仅仅了解网络框架部分,对于线程池\vio通信模块\net协议模块不做讨论,因为我也不了解,这里主要看看网络框架。
对于用户会话线程通常叫做thread_one_connection,接着会调用thd_prepare_connection->login_connection将准备对连接fd进行ppoll的超时参数设置为connect_timeout指定的值,也就是言外之意connect_timeout是在处理连接请求的时候生效的参数。
然后thd_prepare_connection->login_connection->check_connection,在函数check_connection中完成主要任务是:
在login_connection的末尾会将连接fd的ppoll的timeout参数设置为read_timeout/write_timeout。
最后接下来就是进行命令处理的环节了。也就是do_command。通常我们的会话就堵塞在这里等待客户端命令的到来如下:
写个数据库连接工具类:public MySqlDataReader GetData()
{string connection = "server=localhostuser id=rootpassword=123456database=ABCpooling=true"
MySqlConnection conn = new MySqlConnection(connection) string sqlQuery = "SELECT * FROM Article"
MySqlCommand comm = new MySqlCommand(sqlQuery, conn)
conn.Open()
MySqlDataReader dr = comm.ExecuteReader()
conn.Close() return dr
}
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)