基於XORM框架實現分表

2021-08-20 13:21:16 字數 1745 閱讀 6742

最近在維護公司專案過程中,學習了很多後端的東西,包括go語言以及資料庫的操作。同時站在全域性的角度去體會了高額資料量情況下後端的應對策略,為今後在前端方面如何配合後端處理高併發提供了參考。

技術背景:

xorm:xorm是乙個簡單而強大的go語言orm庫. 通過它可以使資料庫操作非常簡便。

可以簡單理解成golang裡面封裝了sql語句的框架,可以幫助我們更方便快速的運算元據庫。

廢話不多說,直接進入正文。

資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相應地,資料操作,增刪改查的開銷也會越來越大;另外,由於無法進行分布式式部署,而一台伺服器的資源(cpu、磁碟、記憶體、io等)是有限的,最終資料庫所能承載的資料量、資料處理能力都將遭遇瓶頸。

正如事情都有兩面性,任何表面看上去是捷徑的路不一定都好走。分表也是一樣

1. 如何定時的在每個月月初會自動建立乙個新錶

2. 如何解決golang類去建立乙個以時間結尾為表名的資料庫表

3. 如何解決golang類和表的對映問題,若對映不對,則影響資料插入操作

1. 利用 cron 解決月初建立新錶

func newdbengine(dburl string) (*dbengine, error) 

err = db.ping()

if err != nil

db.setmaxopenconns(10)

db.showsql(false)

log.infof("connect to database(%v) server ok!", dburl)

engine := dbengine

engine.dbengine

engine.cron = cron.new()

engine.cron

.addfunc(spec, engine.inittable)

engine.commparam = make(chan commparam, get_cache_data)

init(&engine)

return &engine, nil

}

func (db *dbengine) inittable()  else 

for key, v := range tableprefix

if i***ist else }}

}

var tableprefix = map[string]inte***ce{},

"gw_tx": model.gw_tx{},

"gw_stats": model.gw_stats{},

"mac_tx": model.mac_tx{},

"mac_rx": model.mac_rx{},

"mac_error": model.mac_error{},

"rxinfo": model.rxinfo{},

"txinfo": model.txinfo{},

}

programming is an art form.

基於 xorm 的服務端框架 XGoServer

掘金 部落格 github 你可以使用它 具備的如果你想直接輸出一條 json 給客戶端,這樣子 結果 與資料庫互動 affect,core.engine.insert item 執行插入,傳入 struct 引用 m map string inte ce if affect 0 else retu...

基於SpringBoot的快速開發框架分享

首先github 介紹一下我的這個專案,這個專案我是去年開始做的,斷斷續續寫了差不多4 5個月 而完善功能之後,也是很久沒有修改過了。這個框架基於rest風格開發,適合做前後端分離的專案,用到的技術也特別注重開發效率,都是選擇了一些可以高效開發並且使用簡單的技術。前段時間使用過thinkphp,自認...

實現基於springboot的RPC框架(序)

rpc框架大家或多或少都用過,出自於阿里系的就有dubbo,hsf,sofarpc等。但是,要深入理解rpc的原理卻不容易,其中光是核心部分,就涉及到動態 netty,服務註冊與發現,序列化,多執行緒等等。筆者為了弄清楚rpc框架的大致呼叫實現原理,自己造了個輪子 zrpc.首先,筆者寫這個rpc框...