[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" />
<!--OLE DB Services=-1表示打開連接池-->
<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"?>
<!--XCode設置-->
<Setting>
  <!--調試-->
  <Debug>true</Debug>
  <!--輸出SQL。是否輸出SQL語句,默認啓用-->
  <ShowSQL>true</ShowSQL>
  <!--SQL目錄。設置SQL輸出的單獨目錄,默認爲空,SQL輸出到當前日誌中。生產環境建議輸出到站點外單獨的SqlLog目錄-->
  <SQLPath></SQLPath>
  <!--SQL執行時間。跟蹤SQL執行時間,大於該閥值將輸出日誌,默認1000毫秒-->
  <TraceSQLTime>1000</TraceSQLTime>
  <!--連接映射。連接名映射#,表名映射@,把實體類中的Test2和Test3連接名映射到Test去-->
  <ConnMaps></ConnMaps>
  <!--參數化添刪改查。默認關閉-->
  <UseParameter>false</UseParameter>
  <!--SQLite默認目錄。沒有設置連接字符串的連接默認創建SQLite連接,數據庫放在該目錄-->
  <SQLiteDbPath>..\Data</SQLiteDbPath>
  <!--備份目錄。備份數據庫時存放的目錄-->
  <BackupPath>..\Backup</BackupPath>
  <!--命令超時。查詢執行超時時間,默認0秒不限制-->
  <CommandTimeout>0</CommandTimeout>
  <!--數據層緩存。默認0秒-->
  <DataCacheExpire>0</DataCacheExpire>
  <!--實體緩存過期。整表緩存實體列表,默認10秒-->
  <EntityCacheExpire>10</EntityCacheExpire>
  <!--單對象緩存過期。按主鍵緩存實體,默認10秒-->
  <SingleCacheExpire>10</SingleCacheExpire>
  <!--擴展屬性過期。擴展屬性Extends緩存,默認10秒-->
  <ExtendExpire>10</ExtendExpire>
  <!--反向工程。Off 關閉;ReadOnly 只讀不執行;On 打開,僅新建;Full 完全,修改刪除-->
  <Migration>On</Migration>
</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時,日誌會輸出調整好的最終連接字符串,可用於學習。

 

系列教程

NewLife.XCode教程系列[2019版]

  1. 增刪改查入門。快速展現用法,代碼配置連接字符串
  2. 數據模型文件。建立表格字段和索引,名字以及數據類型規範,推薦字段(時間,用戶,IP)
  3. 實體類詳解。數據類業務類,泛型基類,接口
  4. 功能設置。連接字符串,調試開關,SQL日誌,慢日誌,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置
  5. 反向工程。自動建立數據庫數據表
  6. 數據初始化。InitData寫入初始化數據
  7. 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
  8. 髒數據。如何產生,怎麼利用
  9. 增量累加。高併發統計
  10. 事務處理。單表和多表,不同連接,多種寫法
  11. 擴展屬性。多表關聯,Map映射
  12. 高級查詢。複雜條件,分頁,自定義擴展FieldItem,查總記錄數,查彙總統計
  13. 數據層緩存。Sql緩存,更新機制
  14. 實體緩存。全表整理緩存,更新機制
  15. 對象緩存。字典緩存,適用用戶等數據較多場景。
  16. 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
  17. 實體工廠。元數據,通用處理程序
  18. 角色權限。Membership
  19. 導入導出。Xml,Json,二進制,網絡或文件
  20. 分表分庫。常見拆分邏輯
  21. 高級統計。聚合統計,分組統計
  22. 批量寫入。批量插入,批量Upsert,異步保存
  23. 實體隊列。寫入級緩存,提升性能。
  24. 備份同步。備份數據,恢復數據,同步數據
  25. 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版
  26. 大數據分析。ETL抽取,調度計算處理,結果持久化

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章