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

[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)

    分享創造快樂