0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MyBatis、JDBC等做大數(shù)據(jù)量數(shù)據(jù)插入的案例和結(jié)果

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 2023-05-22 11:23 ? 次閱讀

30萬(wàn)條數(shù)據(jù)插入插入數(shù)據(jù)庫(kù)驗(yàn)證

實(shí)體類、mapper和配置文件定義

不分批次直接梭哈

循環(huán)逐條插入

MyBatis實(shí)現(xiàn)插入30萬(wàn)條數(shù)據(jù)

JDBC實(shí)現(xiàn)插入30萬(wàn)條數(shù)據(jù)

總結(jié)

本文主要講述通過(guò)MyBatis、JDBC等做大數(shù)據(jù)量數(shù)據(jù)插入的案例和結(jié)果。

30萬(wàn)條數(shù)據(jù)插入插入數(shù)據(jù)庫(kù)驗(yàn)證

實(shí)體類、mapper和配置文件定義

User實(shí)體

mapper接口

mapper.xml文件

jdbc.properties

sqlMapConfig.xml

不分批次直接梭哈

循環(huán)逐條插入

MyBatis實(shí)現(xiàn)插入30萬(wàn)條數(shù)據(jù)

JDBC實(shí)現(xiàn)插入30萬(wàn)條數(shù)據(jù)

總結(jié)

驗(yàn)證的數(shù)據(jù)庫(kù)表結(jié)構(gòu)如下:

CREATETABLE`t_user`(
`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'用戶id',
`username`varchar(64)DEFAULTNULLCOMMENT'用戶名稱',
`age`int(4)DEFAULTNULLCOMMENT'年齡',
PRIMARYKEY(`id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='用戶信息表';

話不多說(shuō),開(kāi)整!

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

實(shí)體類、mapper和配置文件定義

User實(shí)體

/**
*

用戶實(shí)體

* *@Authorzjq */ @Data publicclassUser{ privateintid; privateStringusername; privateintage; }

mapper接口

publicinterfaceUserMapper{

/**
*批量插入用戶
*@paramuserList
*/
voidbatchInsertUser(@Param("list")ListuserList);


}

mapper.xml文件

 

insertintot_user(username,age)values

(
#{item.username},
#{item.age}
)


jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc//localhost:3306/test
jdbc.username=root
jdbc.password=root

sqlMapConfig.xml





 



 





 













 






基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

不分批次直接梭哈

MyBatis直接一次性批量插入30萬(wàn)條,代碼如下:

@Test
publicvoidtestBatchInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開(kāi)始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
try{
ListuserList=newArrayList<>();
for(inti=1;i<=?300000;?i++)?{
????????????User?user?=?new?User();
????????????user.setId(i);
????????????user.setUsername("共飲一杯無(wú)?"?+?i);
????????????user.setAge((int)?(Math.random()?*?100));
????????????userList.add(user);
????????}
????????session.insert("batchInsertUser",?userList);?//?最后插入剩余的數(shù)據(jù)
????????session.commit();

????????long?spendTime?=?System.currentTimeMillis()-startTime;
????????System.out.println("成功插入?30?萬(wàn)條數(shù)據(jù),耗時(shí):"+spendTime+"毫秒");
????}?finally?{
????????session.close();
????}
}

可以看到控制臺(tái)輸出:

Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (27759038 >yun 4194304). You can change this value on the server by setting the max_allowed_packet’ variable.

f8f021c6-f84b-11ed-90ce-dac502259ad0.png

超出最大數(shù)據(jù)包限制了,可以通過(guò)調(diào)整max_allowed_packet限制來(lái)提高可以傳輸?shù)膬?nèi)容,不過(guò)由于30萬(wàn)條數(shù)據(jù)超出太多,這個(gè)不可取,梭哈看來(lái)是不行了

既然梭哈不行那我們就一條一條循環(huán)著插入行不行呢

循環(huán)逐條插入

mapper接口和mapper文件中新增單個(gè)用戶新增的內(nèi)容如下:

/**
*新增單個(gè)用戶
*@paramuser
*/
voidinsertUser(Useruser);


insertintot_user(username,age)values
(
#{username},
#{age}
)

調(diào)整執(zhí)行代碼如下:

@Test
publicvoidtestCirculateInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開(kāi)始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
try{
for(inti=1;i<=?300000;?i++)?{
????????????User?user?=?new?User();
????????????user.setId(i);
????????????user.setUsername("共飲一杯無(wú)?"?+?i);
????????????user.setAge((int)?(Math.random()?*?100));
????????????//?一條一條新增
????????????session.insert("insertUser",?user);
????????????session.commit();
????????}

????????long?spendTime?=?System.currentTimeMillis()-startTime;
????????System.out.println("成功插入?30?萬(wàn)條數(shù)據(jù),耗時(shí):"+spendTime+"毫秒");
????}?finally?{
????????session.close();
????}
}

執(zhí)行后可以發(fā)現(xiàn)磁盤IO占比飆升,一直處于高位。

f8faa088-f84b-11ed-90ce-dac502259ad0.png

等啊等等啊等,好久還沒(méi)執(zhí)行完

f9025210-f84b-11ed-90ce-dac502259ad0.gif

先不管他了太慢了先搞其他的,等會(huì)再來(lái)看看結(jié)果吧。

two thousand year later …

控制臺(tái)輸出如下:

f910aa54-f84b-11ed-90ce-dac502259ad0.png

總共執(zhí)行了14909367毫秒,換算出來(lái)是4小時(shí)八分鐘。太慢了。。

f91fc8cc-f84b-11ed-90ce-dac502259ad0.png

還是優(yōu)化下之前的批處理方案吧

MyBatis實(shí)現(xiàn)插入30萬(wàn)條數(shù)據(jù)

先清理表數(shù)據(jù),然后優(yōu)化批處理執(zhí)行插入:

--清空用戶表
TRUNCATEtablet_user;

以下是通過(guò) MyBatis 實(shí)現(xiàn) 30 萬(wàn)條數(shù)據(jù)插入代碼實(shí)現(xiàn):

/**
*分批次批量插入
*@throwsIOException
*/
@Test
publicvoidtestBatchInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開(kāi)始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
intwaitTime=10;
try{
ListuserList=newArrayList<>();
for(inti=1;i<=?300000;?i++)?{
????????????User?user?=?new?User();
????????????user.setId(i);
????????????user.setUsername("共飲一杯無(wú)?"?+?i);
????????????user.setAge((int)?(Math.random()?*?100));
????????????userList.add(user);
????????????if?(i?%?1000?==?0)?{
????????????????session.insert("batchInsertUser",?userList);
????????????????//?每?1000?條數(shù)據(jù)提交一次事務(wù)
????????????????session.commit();
????????????????userList.clear();

????????????????//?等待一段時(shí)間
????????????????Thread.sleep(waitTime?*?1000);
????????????}
????????}
????????//?最后插入剩余的數(shù)據(jù)
????????if(!CollectionUtils.isEmpty(userList))?{
????????????session.insert("batchInsertUser",?userList);
????????????session.commit();
????????}

????????long?spendTime?=?System.currentTimeMillis()-startTime;
????????System.out.println("成功插入?30?萬(wàn)條數(shù)據(jù),耗時(shí):"+spendTime+"毫秒");
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????}?finally?{
????????session.close();
????}
}

使用了 MyBatis 的批處理操作,將每 1000 條數(shù)據(jù)放在一個(gè)批次中插入,能夠較為有效地提高插入速度。同時(shí)請(qǐng)注意在循環(huán)插入時(shí)要帶有合適的等待時(shí)間和批處理大小,以防止出現(xiàn)內(nèi)存占用過(guò)高等問(wèn)題。此外,還需要在配置文件中設(shè)置合理的連接池和數(shù)據(jù)庫(kù)的參數(shù),以獲得更好的性能。

f92a15c0-f84b-11ed-90ce-dac502259ad0.png

在上面的示例中,我們每插入1000行數(shù)據(jù)就進(jìn)行一次批處理提交,并等待10秒鐘。這有助于控制內(nèi)存占用,并確保插入操作平穩(wěn)進(jìn)行。

f93242d6-f84b-11ed-90ce-dac502259ad0.png

五十分鐘執(zhí)行完畢,時(shí)間主要用在了等待上。

如果低谷時(shí)期執(zhí)行,CPU和磁盤性能又足夠的情況下,直接批處理不等待執(zhí)行:

/**
*分批次批量插入
*@throwsIOException
*/
@Test
publicvoidtestBatchInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開(kāi)始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
intwaitTime=10;
try{
ListuserList=newArrayList<>();
for(inti=1;i<=?300000;?i++)?{
????????????User?user?=?new?User();
????????????user.setId(i);
????????????user.setUsername("共飲一杯無(wú)?"?+?i);
????????????user.setAge((int)?(Math.random()?*?100));
????????????userList.add(user);
????????????if?(i?%?1000?==?0)?{
????????????????session.insert("batchInsertUser",?userList);
????????????????//?每?1000?條數(shù)據(jù)提交一次事務(wù)
????????????????session.commit();
????????????????userList.clear();
????????????}
????????}
????????//?最后插入剩余的數(shù)據(jù)
????????if(!CollectionUtils.isEmpty(userList))?{
????????????session.insert("batchInsertUser",?userList);
????????????session.commit();
????????}

????????long?spendTime?=?System.currentTimeMillis()-startTime;
????????System.out.println("成功插入?30?萬(wàn)條數(shù)據(jù),耗時(shí):"+spendTime+"毫秒");
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????}?finally?{
????????session.close();
????}
}

則24秒可以完成數(shù)據(jù)插入操作:

f93ea85a-f84b-11ed-90ce-dac502259ad0.png

f948bf16-f84b-11ed-90ce-dac502259ad0.png

可以看到短時(shí)CPU和磁盤占用會(huì)飆高。

把批處理的量再調(diào)大一些調(diào)到5000,在執(zhí)行:

f95130ba-f84b-11ed-90ce-dac502259ad0.png

13秒插入成功30萬(wàn)條,直接蕪湖起飛

JDBC實(shí)現(xiàn)插入30萬(wàn)條數(shù)據(jù)

JDBC循環(huán)插入的話跟上面的mybatis逐條插入類似,不再贅述。

以下是 Java 使用 JDBC 批處理實(shí)現(xiàn) 30 萬(wàn)條數(shù)據(jù)插入的示例代碼。請(qǐng)注意,該代碼僅提供思路,具體實(shí)現(xiàn)需根據(jù)實(shí)際情況進(jìn)行修改。

/**
*JDBC分批次批量插入
*@throwsIOException
*/
@Test
publicvoidtestJDBCBatchInsertUser()throwsIOException{
Connectionconnection=null;
PreparedStatementpreparedStatement=null;

StringdatabaseURL="jdbc//localhost:3306/test";
Stringuser="root";
Stringpassword="root";

try{
connection=DriverManager.getConnection(databaseURL,user,password);
//關(guān)閉自動(dòng)提交事務(wù),改為手動(dòng)提交
connection.setAutoCommit(false);
System.out.println("=====開(kāi)始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
StringsqlInsert="INSERTINTOt_user(username,age)VALUES(?,?)";
preparedStatement=connection.prepareStatement(sqlInsert);

Randomrandom=newRandom();
for(inti=1;i<=?300000;?i++)?{
????????????preparedStatement.setString(1,?"共飲一杯無(wú)?"?+?i);
????????????preparedStatement.setInt(2,?random.nextInt(100));
????????????//?添加到批處理中
????????????preparedStatement.addBatch();

????????????if?(i?%?1000?==?0)?{
????????????????//?每1000條數(shù)據(jù)提交一次
????????????????preparedStatement.executeBatch();
????????????????connection.commit();
????????????????System.out.println("成功插入第?"+?i+"?條數(shù)據(jù)");
????????????}

????????}
????????//?處理剩余的數(shù)據(jù)
????????preparedStatement.executeBatch();
????????connection.commit();
????????long?spendTime?=?System.currentTimeMillis()-startTime;
????????System.out.println("成功插入?30?萬(wàn)條數(shù)據(jù),耗時(shí):"+spendTime+"毫秒");
????}?catch?(SQLException?e)?{
????????System.out.println("Error:?"?+?e.getMessage());
????}?finally?{
????????if?(preparedStatement?!=?null)?{
????????????try?{
????????????????preparedStatement.close();
????????????}?catch?(SQLException?e)?{
????????????????e.printStackTrace();
????????????}
????????}

????????if?(connection?!=?null)?{
????????????try?{
????????????????connection.close();
????????????}?catch?(SQLException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????}
}
f95afca8-f84b-11ed-90ce-dac502259ad0.giff9631622-f84b-11ed-90ce-dac502259ad0.png

上述示例代碼中,我們通過(guò) JDBC 連接 MySQL 數(shù)據(jù)庫(kù),并執(zhí)行批處理操作插入數(shù)據(jù)。具體實(shí)現(xiàn)步驟如下:

獲取數(shù)據(jù)庫(kù)連接。

創(chuàng)建 Statement 對(duì)象。

定義 SQL 語(yǔ)句,使用 PreparedStatement 對(duì)象預(yù)編譯 SQL 語(yǔ)句并設(shè)置參數(shù)。

執(zhí)行批處理操作。

處理剩余的數(shù)據(jù)。

關(guān)閉 Statement 和 Connection 對(duì)象。

使用setAutoCommit(false) 來(lái)禁止自動(dòng)提交事務(wù),然后在每次批量插入之后手動(dòng)提交事務(wù)。每次插入數(shù)據(jù)時(shí)都新建一個(gè) PreparedStatement 對(duì)象以避免狀態(tài)不一致問(wèn)題。在插入數(shù)據(jù)的循環(huán)中,每 10000 條數(shù)據(jù)就執(zhí)行一次 executeBatch() 插入數(shù)據(jù)。

另外,需要根據(jù)實(shí)際情況優(yōu)化連接池和數(shù)據(jù)庫(kù)的相關(guān)配置,以防止連接超時(shí)等問(wèn)題。

總結(jié)

實(shí)現(xiàn)高效的大量數(shù)據(jù)插入需要結(jié)合以下優(yōu)化策略(建議綜合使用):

1.批處理: 批量提交SQL語(yǔ)句可以降低網(wǎng)絡(luò)傳輸和處理開(kāi)銷,減少與數(shù)據(jù)庫(kù)交互的次數(shù)。在Java中可以使用Statement或者PreparedStatement的addBatch()方法來(lái)添加多個(gè)SQL語(yǔ)句,然后一次性執(zhí)行executeBatch()方法提交批處理的SQL語(yǔ)句。

在循環(huán)插入時(shí)帶有適當(dāng)?shù)牡却龝r(shí)間和批處理大小,從而避免內(nèi)存占用過(guò)高等問(wèn)題:

設(shè)置適當(dāng)?shù)呐幚泶笮。号幚泶笮≈冈谝淮尾迦氩僮髦胁迦攵嗌傩袛?shù)據(jù)。如果批處理大小太小,插入操作的頻率將很高,而如果批處理大小太大,可能會(huì)導(dǎo)致內(nèi)存占用過(guò)高。通常,建議將批處理大小設(shè)置為1000-5000行,這將減少插入操作的頻率并降低內(nèi)存占用。

采用適當(dāng)?shù)牡却龝r(shí)間:等待時(shí)間指在批處理操作之間等待的時(shí)間量。等待時(shí)間過(guò)短可能會(huì)導(dǎo)致內(nèi)存占用過(guò)高,而等待時(shí)間過(guò)長(zhǎng)則可能會(huì)延遲插入操作的速度。通常,建議將等待時(shí)間設(shè)置為幾秒鐘到幾十秒鐘之間,這將使操作變得平滑且避免出現(xiàn)內(nèi)存占用過(guò)高等問(wèn)題。

可以考慮使用一些內(nèi)存優(yōu)化的技巧,例如使用內(nèi)存數(shù)據(jù)庫(kù)或使用游標(biāo)方式插入數(shù)據(jù),以減少內(nèi)存占用。

總的來(lái)說(shuō),選擇適當(dāng)?shù)呐幚泶笮『偷却龝r(shí)間可以幫助您平穩(wěn)地進(jìn)行插入操作,避免出現(xiàn)內(nèi)存占用過(guò)高等問(wèn)題。

2.索引: 在大量數(shù)據(jù)插入前暫時(shí)去掉索引,最后再打上,這樣可以大大減少寫入時(shí)候的更新索引的時(shí)間。

3.數(shù)據(jù)庫(kù)連接池: 使用數(shù)據(jù)庫(kù)連接池可以減少數(shù)據(jù)庫(kù)連接建立和關(guān)閉的開(kāi)銷,提高性能。在沒(méi)有使用數(shù)據(jù)庫(kù)連接池的情況,記得在finally中關(guān)閉相關(guān)連接。

數(shù)據(jù)庫(kù)參數(shù)調(diào)整:增加MySQL數(shù)據(jù)庫(kù)緩沖區(qū)大小、配置高性能的磁盤和I/O等。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149953
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8805

    瀏覽量

    136992
  • mybatis
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    6691

原文標(biāo)題:高效方案:30萬(wàn)條數(shù)據(jù)插入 MySQL 僅需13秒

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    貴州數(shù)據(jù)寶:做大數(shù)據(jù)行業(yè)的“淘寶”

    ``公司簡(jiǎn)介數(shù)據(jù)寶核心優(yōu)勢(shì) 選擇數(shù)據(jù)寶選擇合作共贏數(shù)據(jù)寶公司目前得到各大官方媒體的密切關(guān)注。貴州日?qǐng)?bào)報(bào)道—數(shù)據(jù)寶要做大數(shù)據(jù)行業(yè)的“支付寶”
    發(fā)表于 07-04 11:41

    大數(shù)據(jù)運(yùn)用的技術(shù)

    大數(shù)據(jù)是對(duì)海量數(shù)據(jù)進(jìn)行存儲(chǔ)、計(jì)算、統(tǒng)計(jì)、分析處理的一系列處理手段,處理的數(shù)據(jù)量通常是TB級(jí),甚至是PB或EB級(jí)的數(shù)據(jù),這是傳統(tǒng)數(shù)據(jù)處理手段所
    發(fā)表于 04-08 16:50

    大數(shù)據(jù)專業(yè)技術(shù)學(xué)習(xí)之大數(shù)據(jù)處理流程

    集中的大型分布式數(shù)據(jù)庫(kù) 或者分布式存儲(chǔ)集群,利用分布式技術(shù)來(lái)對(duì)存儲(chǔ)于其內(nèi)的集中的海量數(shù)據(jù)進(jìn)行普通的查詢和分類匯總,以此滿足大多數(shù)常見(jiàn)的分析需求。特點(diǎn)和挑戰(zhàn):導(dǎo)入數(shù)據(jù)量大,查詢涉及的
    發(fā)表于 06-11 16:41

    VLFFT加入PCIE實(shí)現(xiàn)大數(shù)據(jù)量計(jì)算

    我買了一個(gè)研華的8681E開(kāi)發(fā)板,核心用的是C6678,我想使用PCIE接口,結(jié)合VLFFT程序,實(shí)現(xiàn)持續(xù)的大數(shù)據(jù)量的FFT變換,但是我不知道如何在VLFFT程序的基礎(chǔ)上進(jìn)行修改,加入PCIE的傳輸
    發(fā)表于 06-19 06:11

    我的LWIP write發(fā)送大數(shù)據(jù)量就卡死該怎么辦?

    目前在做httpserver,發(fā)現(xiàn)發(fā)送小數(shù)據(jù)時(shí)沒(méi)有問(wèn)題,但當(dāng)發(fā)送大數(shù)據(jù)量時(shí),發(fā)現(xiàn)write函數(shù),無(wú)法返回,一路跟蹤下來(lái)發(fā)現(xiàn)卡死在u32_t sys_arch_sem_wait(sys_sem_t
    發(fā)表于 07-16 22:28

    stm32f405+lwip+enc28j60+TCPModbus大數(shù)據(jù)量頻繁收發(fā)主動(dòng)斷開(kāi)連接

    單片機(jī)作為服務(wù)器,PC作為客戶端,通過(guò)上位機(jī)讀取單片機(jī)flash中的數(shù)據(jù),遵從TCPModbus協(xié)議?,F(xiàn)在就是頻繁大數(shù)據(jù)量收發(fā)會(huì)導(dǎo)致服務(wù)器主動(dòng)斷開(kāi)連接,然后客戶端就連不上了,也ping不通,希望各位大神幫忙分析一下,或者給個(gè)排查問(wèn)題的思路。
    發(fā)表于 03-18 04:35

    mybatis支持數(shù)據(jù)庫(kù)輕兼容的輕方案

    一個(gè)輕的方案, 令mybatis支持數(shù)據(jù)庫(kù)輕兼容
    發(fā)表于 04-09 17:44

    大數(shù)據(jù)與物聯(lián)網(wǎng)如何相互協(xié)作

    來(lái)源:互聯(lián)網(wǎng)隨著物聯(lián)網(wǎng)不斷的發(fā)展的趨于成熟期,我們同時(shí)也收集了更多的信息數(shù)據(jù),其實(shí)就是所謂的大數(shù)據(jù)。換個(gè)說(shuō)法,也就是說(shuō)物聯(lián)網(wǎng)和大數(shù)據(jù)可以互相協(xié)作。據(jù)統(tǒng)計(jì)《福布斯》預(yù)測(cè),到2025年,生成的數(shù)據(jù)
    發(fā)表于 10-22 06:01

    數(shù)據(jù)量大、分析急,該用什么軟件做數(shù)據(jù)分析?

    數(shù)據(jù)量大,現(xiàn)在的軟件分析效率太低,操作也麻煩,有沒(méi)有更適合的數(shù)據(jù)分析軟件?或許BI數(shù)據(jù)分析軟件會(huì)是個(gè)好選擇。奧威軟件旗下的OurwayBI就是一款專做大數(shù)據(jù)可視分析的軟件,能在極短時(shí)間
    發(fā)表于 12-29 11:33

    怎樣去解決HAL庫(kù)在大數(shù)據(jù)量頻繁收發(fā)時(shí)出現(xiàn)串口接收失效的問(wèn)題

    HAL庫(kù)在大數(shù)據(jù)量頻繁收發(fā)時(shí)為什么會(huì)出現(xiàn)串口接收失效呢?怎樣去解決HAL庫(kù)在大數(shù)據(jù)量頻繁收發(fā)時(shí)出現(xiàn)串口接收失效的問(wèn)題?
    發(fā)表于 12-08 07:53

    基于數(shù)字廣播的大數(shù)據(jù)量接收與存儲(chǔ)策略

    數(shù)字廣播嵌入式終端在接收大數(shù)據(jù)量的廣播信息時(shí)受限于軟件處理速度,數(shù)據(jù)因不能得到及時(shí)處理而造成丟包,大量數(shù)據(jù)動(dòng)態(tài)存儲(chǔ)時(shí)的頻繁申請(qǐng)易產(chǎn)生內(nèi)存碎片,影響系統(tǒng)運(yùn)行速度
    發(fā)表于 04-09 08:44 ?36次下載

    jdbcmybatis的區(qū)別

    MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。
    發(fā)表于 02-02 17:43 ?1.1w次閱讀
    <b class='flag-5'>jdbc</b>與<b class='flag-5'>mybatis</b>的區(qū)別

    MyBatis的實(shí)現(xiàn)原理

    本文主要詳細(xì)介紹了MyBatis的實(shí)現(xiàn)原理。mybatis底層還是采用原生jdbc來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的,只是通過(guò) SqlSessionFactory,SqlSession Execut
    的頭像 發(fā)表于 02-24 11:25 ?6407次閱讀
    <b class='flag-5'>MyBatis</b>的實(shí)現(xiàn)原理

    MyBatis Plus解決大數(shù)據(jù)量查詢慢問(wèn)題

    在實(shí)際工作中當(dāng)指定查詢數(shù)據(jù)過(guò)大時(shí),我們一般使用分頁(yè)查詢的方式一頁(yè)一頁(yè)的將數(shù)據(jù)放到內(nèi)存處理。但有些情況不需要分頁(yè)的方式查詢數(shù)據(jù)或分很大一頁(yè)查詢數(shù)據(jù)時(shí),如果一下子將
    的頭像 發(fā)表于 01-16 10:17 ?1725次閱讀

    藍(lán)牙Mesh模塊多跳大數(shù)據(jù)量高帶寬傳輸數(shù)據(jù)方法

    通過(guò)多個(gè)跳數(shù)進(jìn)行通信,從而實(shí)現(xiàn)大范圍的覆蓋。然而,隨著數(shù)據(jù)量的增加和帶寬需求的提高,如何在藍(lán)牙Mesh網(wǎng)絡(luò)中實(shí)現(xiàn)高效、穩(wěn)定的多跳大數(shù)據(jù)量高帶寬傳輸數(shù)據(jù)成為了一個(gè)亟待解決的問(wèn)題。本文將介紹一種基于藍(lán)牙Mesh模塊的多跳
    的頭像 發(fā)表于 05-28 11:23 ?463次閱讀
    藍(lán)牙Mesh模塊多跳<b class='flag-5'>大數(shù)據(jù)量</b>高帶寬傳輸<b class='flag-5'>數(shù)據(jù)</b>方法