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

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

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

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

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-05-22 11:23 ? 次閱讀

30萬條數(shù)據(jù)插入插入數(shù)據(jù)庫驗證

實體類、mapper和配置文件定義

不分批次直接梭哈

循環(huán)逐條插入

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

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

總結(jié)

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

30萬條數(shù)據(jù)插入插入數(shù)據(jù)庫驗證

實體類、mapper和配置文件定義

User實體

mapper接口

mapper.xml文件

jdbc.properties

sqlMapConfig.xml

不分批次直接梭哈

循環(huán)逐條插入

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

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

總結(jié)

驗證的數(shù)據(jù)庫表結(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='用戶信息表';

話不多說,開整!

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

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

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

實體類、mapper和配置文件定義

User實體

/**
*

用戶實體

* *@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 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

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

不分批次直接梭哈

MyBatis直接一次性批量插入30萬條,代碼如下:

@Test
publicvoidtestBatchInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
try{
ListuserList=newArrayList<>();
for(inti=1;i<=?300000;?i++)?{
????????????User?user?=?new?User();
????????????user.setId(i);
????????????user.setUsername("共飲一杯無?"?+?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?萬條數(shù)據(jù),耗時:"+spendTime+"毫秒");
????}?finally?{
????????session.close();
????}
}

可以看到控制臺輸出:

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ù)包限制了,可以通過調(diào)整max_allowed_packet限制來提高可以傳輸?shù)膬?nèi)容,不過由于30萬條數(shù)據(jù)超出太多,這個不可取,梭哈看來是不行了

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

循環(huán)逐條插入

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

/**
*新增單個用戶
*@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("=====開始插入數(shù)據(jù)=====");
longstartTime=System.currentTimeMillis();
try{
for(inti=1;i<=?300000;?i++)?{
????????????User?user?=?new?User();
????????????user.setId(i);
????????????user.setUsername("共飲一杯無?"?+?i);
????????????user.setAge((int)?(Math.random()?*?100));
????????????//?一條一條新增
????????????session.insert("insertUser",?user);
????????????session.commit();
????????}

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

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

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

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

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

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

two thousand year later …

控制臺輸出如下:

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

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

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

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

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

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

--清空用戶表
TRUNCATEtablet_user;

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

/**
*分批次批量插入
*@throwsIOException
*/
@Test
publicvoidtestBatchInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開始插入數(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("共飲一杯無?"?+?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();

????????????????//?等待一段時間
????????????????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?萬條數(shù)據(jù),耗時:"+spendTime+"毫秒");
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????}?finally?{
????????session.close();
????}
}

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

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

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

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

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

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

/**
*分批次批量插入
*@throwsIOException
*/
@Test
publicvoidtestBatchInsertUser()throwsIOException{
InputStreamresourceAsStream=
Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSessionsession=sqlSessionFactory.openSession();
System.out.println("=====開始插入數(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("共飲一杯無?"?+?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?萬條數(shù)據(jù),耗時:"+spendTime+"毫秒");
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????}?finally?{
????????session.close();
????}
}

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

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

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

可以看到短時CPU和磁盤占用會飆高。

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

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

13秒插入成功30萬條,直接蕪湖起飛

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

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

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

/**
*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)閉自動提交事務(wù),改為手動提交
connection.setAutoCommit(false);
System.out.println("=====開始插入數(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,?"共飲一杯無?"?+?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?萬條數(shù)據(jù),耗時:"+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

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

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

創(chuàng)建 Statement 對象。

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

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

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

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

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

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

總結(jié)

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    33

    文章

    8605

    瀏覽量

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

    關(guān)注

    64

    文章

    8890

    瀏覽量

    137449
  • mybatis
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    6714

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    jdbcmybatis的區(qū)別

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

    MyBatis的實現(xiàn)原理

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

    B+樹索引如何對Mysql單表數(shù)據(jù)量造成影響

    我們說 Mysql 單表適合存儲的最大數(shù)據(jù)量,自然不是說能夠存儲的最大數(shù)據(jù)量,如果是說能夠存儲的最大量,那么,如果你使用自增 ID,最大就可以存儲 2^32 或 2^64 條記錄了,這是按自增 ID
    的頭像 發(fā)表于 04-16 08:08 ?1606次閱讀
    B+樹索引如何對Mysql單表<b class='flag-5'>數(shù)據(jù)量</b>造成影響

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

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

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

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