数据库开发笔记

MYSQL数据库的连接库有两种:
Mysql.Data:官方的库。
MySqlConnector:社区开源库
有不少人推荐使用MySqlConnector,说是可能性能更好,更快一点。
MYSQL数据库使用过程中发现一个问题,如果长期不操作数据库,比方说几个小时不操作,后面再去操作的时候,经常有时候会连接失败,或者卡在那里卡半天,才会有反应。
因为是内部的连接池已经断开了。
这个问题之前被困扰了很久,尝试了不少的库,发现都有这个问题。
Data Source=xxx.xxx.xxx.xxx;Port=3306;User ID=username;Password=password;Initial Catalog=databaseName;Charset=utf8mb4;SslMode=none;Pooling=true;ConnectionIdleTimeout=180;ConnectionLifeTime=600;Keepalive=30;MaxPoolSize=100;MinPoolSize=1;
其实是MYSQL服务器对长期没有操作的连接对象,会去主动断开释放。
MYSQL客户端这边不知道连接已经被断开了,再去连的时候,会发现一直连不上,一直等到超时,才会去新链接去连接。这段时间可能前台就一直等着数据。
上面的连接串的主要作用是主动设置一个空置超时时间,就是客户端这边自己发现某个连接闲置多少时间了以后,自己主动去释放回收。这样下次要用的时候,就不会用到已经断开的连接。
这个时间要设置成一个比较合理的时候,不断频繁地去断开重连,其实也会影响整体的性能。
ConnectionLifeTime设置的是连接对象的整体生命周期。到了这个时间以后,不管有没有在用,都去释放掉,起个新的连接。说是生命周期太长,长时间使用,也可能会有性能的问题。
MinPoolSize和MaxPoolSize是最小和最大连接池数量。MinPoolSize=1的话,就是相当于保证连接池里最少有一个连接是随时可用的。根据实际情况来设置,保证性能的情况下,设置小的一点的数量,不然占用服务器资源。
对应的FreeSQL也有两种类库:FreeSql.Provider.MySql和FreeSql.Provider.MySqlConnector,相当于一个使用官方的库,一个是使用MySqlConnector。
前面说的闲置超时的设置,貌似只有在MySqlConnector里面有,官方的库设置这个参数会报错。
所以现在很多的MYSQL库,我都改用MySqlConnector了。
这段时间部分项目我也有在用微软的Microsoft.EntityFrameworkCore。
官方支持的SQLite和SQL Server。MYSQL属于社区支持,没前两者好。
所以部分用SQLite的项目,我也使用Microsoft.EntityFrameworkCore.Sqlite。
这个库的优点是,接口更简洁、方便。
也能自动创建库表,但是和FreeSQL的区别是,EFCore只会在库表不存在的时候才会去创建,不会去主动更新。如果需要更新的话,需要自己用工具和命令手动去更新。
优点是,不容易误操作,不会引发毁灭性的数据误操作。缺点是更新稍微麻烦一点。
但是FreeSQL的自动同步表功能其实也是比较危险的功能。在实际业务场景里面用非常的危险,最好也是不要启用。
另一个Dapper也在使用。更灵活,也是这三种里面速度最快的。
FreeSQL前面在使用的时候,发现一个表里,我只加载部分字段,弄起来稍微麻烦。Dapper因为是直接使用SQL来进行查询和操作的,反而有时候显得更加灵活,更加可控。
这三种里面,目前使用最多的还是FreeSQL。
Dapper会在一些比较需要用到复杂和细致操作的时候使用。
EFCore一般是在一些只用到SQLite的项目里面使用。

posted @ 2025-10-17 10:17  wzwyc  阅读(9)  评论(0)    收藏  举报