前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[NewLife.XCode]功能设置

[NewLife.XCode]功能设置

作者头像
大石头
发布2019-05-24 20:44:46
1.9K0
发布2019-05-24 20:44:46
举报
文章被收录于专栏:智能大石头

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。

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

连接字符串

XCode支持SqlServer、SQLite、MySql、Oracle、PostgreSQL、Access、SqlCe等多种数据库,常用连接字符串模板如下:

代码语言:javascript
复制
<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来读写

代码语言:javascript
复制
<?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时,日志会输出调整好的最终连接字符串,可用于学习。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 连接字符串
  • 配置文件
  • 连接字符串高级设置
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档