第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 SQLC 時,如何使數(shù)據(jù)庫連接在運行時可切換

使用 SQLC 時,如何使數(shù)據(jù)庫連接在運行時可切換

Go
拉風(fēng)的咖菲貓 2022-09-19 14:44:16
我知道這個問題已經(jīng)被問過很多次了,但我沒有為我的情況找到一個好的答案。我正在使用 SQLC 生成用于查詢數(shù)據(jù)庫的方法。使用開始時初始化的一個連接時,一切正?!,F(xiàn)在,我需要在多租戶環(huán)境中進行設(shè)置,其中每個租戶將具有單獨的數(shù)據(jù)庫?,F(xiàn)在,我想從連接映射(映射[字符串]*sql。DB) 將租戶與數(shù)據(jù)庫連接連接起來。我的問題是關(guān)于在運行時覆蓋/選擇連接。使用一個連接,存儲庫被初始化為:type Repository interface {    GetCustomerById(ctx context.Context, id int64) (Customer, error)    ListCustomers(ctx context.Context) ([]Customer, error)}type repoSvc struct {    *Queries    db *sql.DB}func NewRepository(dbconn *sql.DB) Repository {    return &repoSvc{        Queries: New(dbconn),        db:      dbconn,    }}customerRepo := customerRepo.NewRepository(conn)GetCustomerById 是 SQLC 生成的方法,連接是數(shù)據(jù)庫連接如何根據(jù)參數(shù)(從 Cookie 或上下文)建立連接?
查看完整描述

1 回答

?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

假設(shè)您使用的是單獨的數(shù)據(jù)庫,最簡單的方法是維護 ,其中是區(qū)分租戶(例如,包含租戶 ID 的 或)的方式。map[tenantID]RepositorytenantIDstringuint

這樣,您就可以在運行時執(zhí)行所有操作:

  • 當(dāng)您需要添加租戶時,只需實例化該租戶并將其添加到地圖中Repository

  • 當(dāng)您需要刪除租戶時,只需將其從映射中刪除并關(guān)閉數(shù)據(jù)庫連接Repository

  • 當(dāng)您需要對租戶執(zhí)行查詢時,請在映射中查找相應(yīng)的,并使用它來執(zhí)行該租戶的查詢Repository

如果上述操作可能同時發(fā)生,請確保使用某種同步機制來避免訪問映射時的數(shù)據(jù)爭用(例如 、或 )。sync.Mapsync.RWMutex

如果您有一個存儲租戶及其數(shù)據(jù)庫連接 URI 的數(shù)據(jù)庫表,您仍然可以使用此方法:當(dāng)您需要執(zhí)行查詢檢查時,如果 缺少 :,則查詢租戶表并將該租戶的 添加到映射中。然后,您可以定期掃描 并刪除任何一段時間未使用的內(nèi)容。RepositorymapRepositorymapRepository

為了使所有這些更容易,您還可以將整個機器包裝到一個接口中,該接口與接口相同,但每個方法上都接受一個附加參數(shù):MultitenantRepositoryRepositorytenantID

type MultitenantRepository interface {
    GetCustomerById(ctx context.Context, tenant tenantID, id int64) (Customer, error)
    ListCustomers(ctx context.Context, tenant tenantID) ([]Customer, error)
}

這將避免將多租戶設(shè)置的所有復(fù)雜性暴露給業(yè)務(wù)邏輯。


查看完整回答
反對 回復(fù) 2022-09-19
  • 1 回答
  • 0 關(guān)注
  • 71 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號