歡迎光臨
每天分享高質量文章

[NewLife.XCode]功能設置

NewLife.XCode是一個有10多年曆史的開源資料中間件,由新生命團隊(2002~2019)開發完成並維護至今,以下簡稱XCode。

整個系列教程會大量結合示例代碼和運行日誌來進行深入分析,蘊含多年開發經驗於其中,代表作有百億級大資料實時計算專案。

開源地址:https://github.com/NewLifeX/X (求star, 652+)

回到目錄

連接字串

XCode支持SqlServer、SQLite、MySql、Oracle、PostgreSQL、Access、SqlCe等多種資料庫,常用連接字串模板如下:

<add name="SQLite" connectionString="Data Source=test.db;" providerName="Sqlite" />
<add name="MySql" connectionString="Server=.;Port=3306;Database=mysql;Uid=root;Pwd=;" providerName="MySql.Data.MySqlClient" />
<add name="MSSQL" connectionString="Server=.;User ID=sa;Password=sa;Database=Test;datapath=~\App_Data" providerName="System.Data.SqlClient" />
<add name="Oracle" connectionString="Data Source=Tcp://127.0.0.1/ORC;User ID=sys;Password=admin;Owner=mis" providerName="System.Data.OracleClient" />
<add name="PostgreSQL" connectionString="Server=.;Database=master;Uid=root;Pwd=root;" providerName="PostgreSQL.Data.PostgreSQLClient" />
<add name="MSSQL" connectionString="Server=.;Integrated Security=SSPI;Database=Test" providerName="System.Data.SqlClient" />
<add name="Oracle" connectionString="Data Source=orc;User ID=sys;Password=admin;" providerName="System.Data.OracleClient" />

<add name="Access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=~\App_Data\Test.mdb;Persist Security Info=False;OLE DB Services=-1" providerName="Access"/>
<add name="SqlCe" connectionString="Data Source=test.sdf;" providerName="SqlCe" />

連接字串最常見的地方就是app.config/web.config中的connectionStrings段。

這裡特別註意name,正是資料模型中講到的連接名ConnName!這個name一般取業務模塊名字,上面的名字僅僅是為了表示這是哪一種資料庫,實際專案中有用戶自己起名字。

每個資料模型生成的物體類都有一個ConnName設置,表明該物體類需要使用哪一個連接,後面是連接字串和資料庫型別。

註意!!!劃重點!!!XCode物體類支持任意切換資料庫,完全由連接字串和providerName決定所要使用的資料庫!

在這裡,強烈推薦開發環境使用SQLite,生產環境再更換SqlServer/MySql/Oracle的連接字串。

驗證連接的辦法也很簡單,var dal=DAL.Create(ConnName)即可!

DAL是XCode資料層總入口,針對資料庫的任何操作都通過該類橋接。

其中DAL.ConnStrs管理著所有的連接名以及對應的連接字串,DAL.Create(connName)時從中查找並針對連接名創建單一實體(每個連接名一個DAL實體)。

也可以通過DAL.AddConnStr(“school”, “Data Source=school.db;”, null, “MySql”)來動態添加連接名以及連接字串,最後一個引數寫資料庫名。

連接字串的第三種使用方式,也是最高級的一種,支持DAL.OnResolve委托,當配置檔案或動態配置中找不到相應連接名時,執行該委托。

為了集成配置中心(例如新生命團隊的開源專案星塵Stardust),一般在應用初始化時註冊DAL.OnResolve到外部配置中心。

最後,如果沒有任何地方設置某個連接名,並且配置中心也沒有找到,XCode將會自動創建一個SQLite連接字串。

因此,XCode物體類永遠不會提示找不到連接字串,而是會自動為了創建SQLite連接,並且建庫建表。

回到目錄

配置檔案

標準配置檔案位於Config/XCode.config,首次使用時自動創建,也可以通過XCode.Setting.Current來讀寫

xml version="1.0" encoding="utf-8"?>

<Setting>
  
  <Debug>trueDebug>
  
  <ShowSQL>trueShowSQL>
  
  <SQLPath>SQLPath>
  
  <TraceSQLTime>1000TraceSQLTime>
  
  <ConnMaps>ConnMaps>
  
  <UseParameter>falseUseParameter>
  
  <SQLiteDbPath>..\DataSQLiteDbPath>
  
  <BackupPath>..\BackupBackupPath>
  
  <CommandTimeout>0CommandTimeout>
  
  <DataCacheExpire>0DataCacheExpire>
  
  <EntityCacheExpire>10EntityCacheExpire>
  
  <SingleCacheExpire>10SingleCacheExpire>
  
  <ExtendExpire>10ExtendExpire>
  
  <Migration>OnMigration>
Setting>

各配置項解釋:

  • Debug。顧名思義,這是XCode的除錯開關,打開後,日誌中會多寫一些東西,告訴你它正在做什麼事情,分析問題的時候可以打開,如果嫌日誌太少也可以打開,咱們日誌性能很好不用擔心;
  • ShowSQL。顯示每一個執行的SQL陳述句,可能是配置中最常用的一個配置項,可以在日誌中明明白白看到應用在執行啥資料庫操作,每分鐘執行超過30次的中大型應用務必關閉,否則光日誌就能寫爆磁盤;
  • SQLPath。SQL日誌預設跟普通日誌放在一起,設置該相對路徑後,可以獨立存放;
  • TraceSQLTime。慢日誌跟蹤時間,預設1000ms,執行時間超過此值的SQL將輸出在日誌中(常規日誌,非SQL日誌),對於中大型系統分析問題非常有用;
  • UseParameter。使用引數名查詢,預設false,設置為true時執行的添刪改查將使用引數化操作。該引數也可以寫在連接字串中;
  • SQLiteDbPath。沒有給連接名設置任何連接字串時,預設生成SQLite資料庫,該設置是存放這些預設SQLite資料庫的目錄;
  • CommandTimeout。命令執行超時時間,預設0不限制,可根據應用需要設為15秒或30秒;
  • DataCacheExpire。資料層快取(一級快取)有效期,以select陳述句為key快取結果資料集,任何添刪改操作或過期時清空快取。預設0秒,web前臺網站建議設為10秒;
  • EntityCacheExpire。物體快取(二級快取)有效期,上一章有提到Meta.Cache對應物體快取,預設10秒,過期後繼續傳回舊資料並異步更新,添刪改操作清空;
  • SingleCacheExpire。物件快取(三級快取)有效期,上一章有提到Meta.SingleCache,預設10秒,過期後繼續傳回舊資料並異步更新,添刪改操作清空;
  • ExtendExpire。擴展屬性有效期,上一章擴展屬性部分有提到Extends帶有的快取效果,預設10秒;
  • Migration。反向工程,自動建庫建表加欄位改欄位等,就靠它設置。Off 關閉;ReadOnly 只讀不執行;On 打開,僅新建;Full 完全,修改刪除。預設On僅新建,經驗表明最合理;

回到目錄

連接字串高級設置

上面的設置對整個應用全域性有效,而需要針對具體某個連接進行控制,可以把設置項寫在連接字串中,該功能最常用的場景就是配置中心。

高級設置如下:

  • ShowSQL。用法同上,針對性打開SQL日誌
  • UseParameter。用法同上,針對性打開引數化
  • Migration。用法同上,可針對連接控制是否打開反向工程,某些只讀連接可以設置Off
  • DataCache。用法同上DataCacheExpire,針對性設置當前連接
  • Readonly。該連接是否只讀,只讀連接在資料層禁止執行Insert/Update/Delete
  • TablePrefix。該連接下所有表名增加前綴,適用於多個系統共用一個庫,避免不同系統的表名重名
  • Owner。擁有者,資料表所在Schema和登錄用戶不一致時,需要設置資料表所在Schema(Oracle中所屬用戶)
  • Provider。提供者,資料庫型別,特用於配置中心,便於在連接字串中指定資料庫型別

SQLite資料庫的連接字串有特殊支持,外部沒有設置時,自動配置WAL等以極大提高性能。(提升效果可參考飛仙 http://feixian.newlifex.com )

此外,MySql和Oracle的資料源還支持 Data Source=tcp://10.0.0.3:1234/racdb 的簡寫用法。

XCode配置Debug為true時,日誌會輸出調整好的最終連接字串,可用於學習。

 

受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可通過二維碼轉賬支持公眾號。

    赞(0)

    分享創造快樂