自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

支持C#的分表分庫組件-Ctrip DAL

開發(fā) 后端
Ctrip DAL是攜程框架部開發(fā)的數(shù)據(jù)庫訪問框架,支持代碼生成和水平擴展。其由攜程技術(shù)中心框架部DAL團隊開發(fā),歷經(jīng)3年不斷打磨,并在長期的實際使用中基于大量的用戶反饋不斷優(yōu)化。

[[411066]]

本文轉(zhuǎn)載自微信公眾號「后端Q」,作者conan。轉(zhuǎn)載本文請聯(lián)系后端Q公眾號。

簡介

Ctrip DAL是攜程框架部開發(fā)的數(shù)據(jù)庫訪問框架,支持代碼生成和水平擴展。其由攜程技術(shù)中心框架部DAL團隊開發(fā),歷經(jīng)3年不斷打磨,并在長期的實際使用中基于大量的用戶反饋不斷優(yōu)化。

開源范圍包括代碼生成器,Java客戶端和C#客戶端。

背景

隨著企業(yè)規(guī)模擴張和業(yè)務(wù)量的急劇增加,作為系統(tǒng)核心的數(shù)據(jù)庫相關(guān)開發(fā)也會經(jīng)歷一個由單一團隊發(fā)展為多團隊;由單機擴張到集群;由單數(shù)據(jù)庫發(fā)展為多數(shù)據(jù)庫;由采用單一數(shù)據(jù)庫產(chǎn)品到多種數(shù)據(jù)庫產(chǎn)品并存的過程。伴隨這一過程的是如何管理數(shù)據(jù)庫擴展,如何規(guī)范數(shù)據(jù)庫訪問,如何保護數(shù)據(jù)庫投資,如何應(yīng)對訪問量增加,如何預(yù)防安全問題等一系列挑戰(zhàn)。作為中國在線旅游行業(yè)的翹楚,攜程也曾經(jīng)面對同樣困擾。為了應(yīng)對這些挑戰(zhàn),實現(xiàn)企業(yè)10倍速發(fā)展,攜程開發(fā)了具有自己特色的數(shù)據(jù)庫訪問框架Ctrip DAL。

Ctrip DAL支持流行的分庫分表操作,支持Java和C#,支持Mysql和MS SqlServer。使用該框架可以在有效地保護企業(yè)已有數(shù)據(jù)庫投資的同時,迅速,可靠的為企業(yè)提供數(shù)據(jù)庫訪問層的橫向擴展能力。整個框架包括代碼生成器和客戶端。工作模式是使用代碼生成器在線生成代碼和配置,通過DAL客戶端完成數(shù)據(jù)庫操作。生成器具有豐富的向?qū)е敢?,操作簡單清晰,即可以批量生成標準DAO,也可以在方法級別定制數(shù)據(jù)庫訪問??蛻舳藙t可以簡單的通過標準的maven方式添加依賴。

Ctrip DAL與一般數(shù)據(jù)庫框架最大的不同是從企業(yè)跨部門的角度,統(tǒng)一管理數(shù)據(jù)庫相關(guān)資源。通過部署代碼生成器,企業(yè)可以做到有效的管理全公司的DAL開發(fā)團隊,明確數(shù)據(jù)庫歸屬和定制數(shù)據(jù)庫訪問。通過代碼生成器生成的標準DAO代碼與客戶端配合使用,可以大幅提高工作效率,保證代碼質(zhì)量。解決了業(yè)內(nèi)常見的伴隨業(yè)務(wù)成長而帶來的系統(tǒng)維護困難,開發(fā)效率低下,代碼風格五花八門,代碼質(zhì)量參差不齊等痛點問題。

代碼生成器

代碼生成器允許用戶創(chuàng)建Dal團隊,組織開發(fā)人員,管理數(shù)據(jù)庫,創(chuàng)建DAO并生成代碼和配置。與一般基于JDBC driver的DB sharding產(chǎn)品不同的是,代碼生成器生成的代碼和配置可以直接拿來實用,完全無需用戶寫一行代碼和配置。做到了只需開發(fā)人員關(guān)心業(yè)務(wù)邏輯,而把繁瑣的數(shù)據(jù)庫相關(guān)的編碼和配置任務(wù)全部交給DAL。由于Ctrip DAL完全在DAO這層工作,也沒有什么這種SQL語句不支持,那種SQL語句不能用的情況。同時傳遞hints的方式也非常自然,每個方法都自帶hints的接口,需要DAL額外做什么可以直接按給定的已有名字來設(shè)置,無需改寫原始的sql來添加怪異的注釋。

客戶端簡介

客戶端配合代碼生成器生成的代碼來完成用戶的數(shù)據(jù)庫訪問操作。通過Dev和QA兩方面雙重自動化測試來保障質(zhì)量,覆蓋率達到99%,并經(jīng)過生產(chǎn)實際實用的的長期嚴格檢驗。為了適應(yīng)不同公司的實際情況,DAL客戶端定義了豐富的擴展接口,覆蓋了從數(shù)據(jù)源管理,數(shù)據(jù)庫映射,連接串讀取到自定義訪問方式等等方方面面的功能。同時為了方便系統(tǒng)監(jiān)控還內(nèi)置了系統(tǒng)狀態(tài),日志和統(tǒng)計模塊。

C#客戶端 API列表

以下這些API位于BaseDao類中 方法族說明:除了所示的方法之外,至少還包含一個帶有IDictionary hints參數(shù)的重載方法。

注意:增刪改均適用的API被歸類至Update系列

  1. Create 
  2.  
  3. Object Insert<T>(T obj) where T : class, new() 方法族 
  4. Object InsertByComplexPk<T>(T obj) where T : class, new() 方法族 
  5. Boolean BulkInsert<T>(IList<T> list) where T : class, new() 方法族 
  6. Retrieve 
  7. IQuery<T> GetQuery<T>() where T : class, new() 
  8. IList<T> GetAll<T>() where T : class, new() 方法族 
  9. IList<T> SelectListOfSingleField<T>(String sql) 方法族 
  10. IList<T> SelectList<T>(String sql) where T : class, new() 方法族 
  11. IList<T> SelectList<T>(IQuery query) where T : class, new() 方法族 
  12. IList<T> SelectListByAdapter<T>(String sql) where T : class, new() 方法族 
  13. IList<T> SelectListByAdapter<T>(IQuery query) where T : class, new() 方法族 
  14. IList<T> ExecListBySp<T>(String procName, StatementParameterCollection parameters) where T : class, new() 方法族 
  15.  
  16. T GetByKey<T>(Object keywhere T : class, new() 方法族 
  17.  
  18. T SelectFirst<T>(String sql) where T : class, new() 方法族 
  19.  
  20. T SelectFirst<T>(IQuery query) where T : class, new() 方法族 
  21.  
  22. T VisitDataReader<T>(String sql, Func<IDataReader, T> callback) 方法族 
  23.  
  24. T VisitDataReaderBySp<T>(String procName, StatementParameterCollection parameters, Func<IDataReader, T> callback) 方法族 
  25.  
  26. DataTable SelectDataTable(String sql) 方法族 
  27.  
  28. DataTable ExecDataTableBySp(String procName, StatementParameterCollection parameters) 方法族 
  29.  
  30. DataSet SelectDataSet(String sql) 方法族 
  31.  
  32. DataSet SelectDataSet<T>(IQuery query) where T : class, new() 方法族 
  33.  
  34. DataSet ExecDataSetBySp(String procName, StatementParameterCollection parameters) 方法族 
  35.  
  36. IDataReader SelectDataReader(String sql) 方法族 
  37.  
  38. IDataReader ExecDataReaderBySp(String procName, StatementParameterCollection parameters) 方法族 
  39.  
  40. Object ExecScalar(String sql) 方法族 
  41.    
  42. Object ExecScalarBySp(String procName, StatementParameterCollection parameters) 方法族 
  43.    
  44. Update 
  45.    
  46. Int32 Update<T>(T obj) where T : class, new() 方法族 
  47.    
  48. IUpdatePartial<T> GetUpdatePartially<T>() where T : class, new() 
  49.    
  50. Int32 UpdatePartially<T>(IUpdatePartial<T> partially, T obj) where T : class, new() 方法族 
  51.    
  52. Int32 ExecNonQuery(String sql) 方法族 
  53.    
  54. void ExecSp(String procName, StatementParameterCollection parameters) 方法族 
  55.    
  56. Delete 
  57.    
  58. Int32 Delete<T>(T obj) where T : class, new() 方法族 

https://github.com/ctripcorp/dal

 

責任編輯:武曉燕 來源: 后端Q
相關(guān)推薦

2020-07-30 17:59:34

分庫分表SQL數(shù)據(jù)庫

2019-11-12 09:54:20

分庫分表數(shù)據(jù)

2024-07-26 00:16:11

2022-07-11 08:16:47

NewSQL關(guān)系數(shù)據(jù)庫系統(tǒng)

2021-08-31 20:21:11

VitessMySQL分庫

2023-08-11 08:59:49

分庫分表數(shù)據(jù)數(shù)據(jù)庫

2020-11-18 09:39:02

MySQL數(shù)據(jù)庫SQL

2025-04-01 08:45:00

2020-07-28 09:04:09

NewSQL分庫分表

2021-01-26 05:37:08

分庫分表內(nèi)存

2022-06-15 07:32:24

數(shù)據(jù)庫分庫分表

2023-08-26 20:08:15

分庫分表Spring

2023-05-15 10:02:00

分庫分表數(shù)據(jù)

2023-07-24 09:00:00

數(shù)據(jù)庫MyCat

2019-01-16 14:00:54

數(shù)據(jù)庫分庫分表

2022-06-30 07:34:46

分庫分表外賣訂單系統(tǒng)

2019-07-31 09:27:23

數(shù)據(jù)庫MySQLSQL

2024-02-21 12:17:00

2024-01-03 08:14:33

GreatSQLMyCat庫名字

2020-09-27 08:00:49

分庫分表
點贊
收藏

51CTO技術(shù)棧公眾號