我的ORM索引

对某一个查询频繁重复,应该使用缓存。

缓存应该是可以配置。

配置

Web.config:

<configuration>
<configSections>
<section name="MyOql" type="MyOql.MyOqlConfigSect,MyOql" />
</configSections>
<MyOql configSource="MyOql.config" />
</configuration>
MyOql.config:
<MyOql>
<Entitys db="dbo" CacheTime="0" CacheSqlTime="0" MaxCacheTime="43200" OraclePKG="PKG" Owner="dbo" >
<Group Name="本地缓存" CacheType="Local" CacheSqlTime="3600" CacheTime="3600" >
<Entity Name="S_Menu" UsePower="=" />
<Entity Name="P_CarInfo" />
</Group>
</Entitys>
<DbProviders>
<Provider Name="SqlServer" Type="MyOql.Provider.SqlServer,MyOql"/>
<Provider Name="MySql" Type="MyOql.Provider.MySql,MyOql.MySql"/>
<Provider Name="Oracle" Type="MyOql.Provider.Oracle,MyOql.OracleProvider"/>
</DbProviders>
</MyOql>

配置项

db:  指定数据库配置项
Owner:  指定数据库前缀
Name:  数据库表名,视图名,存储过程名。
CacheTime:  单表按主键、唯一键、自增键查询缓存时间。单位 秒
CacheSqlTime:  按除 CacheTime 之外的情况下,缓存时间。如果有多个表,按配置项最小的缓存时间。 单位 秒
ToShadow:  配置是否转存到影子库,当物理删除的时候,可以把数据转存到影子库。布尔值
MaxCacheTime:   如果最初缓存时间到现在超过最大缓存时间,则强制失效。单位 秒
CacheType:  指定缓存服务器。
UsePower:  权限类型,单字符表示一个权限,可选类型: CRUD= ~*  
       其中:
      C 表示 Create,R 表示Read,U表示Update,D表示Delete。
      = 表示是否启用行集权限.
      ~ 表示自定义过滤。
      * 是所有权限
      true 表示所有权限
      false 表示没有任何权限
Filter:  在 UsePower = "~" 时, Filter 表示传递给自定义过滤的 关键字
Type:  表示表的类型, 如: Corp 表示是公司表。可以动态对该表进行分库。 
Log:  可选值,单个字符表示一个MyOql操作类型的日志, CRUD=*
OraclePKG:  Oracle存储过程包名。

缓存部署及机制

数据库中的数据,可以分为:
  • 稳定数据
  • 易变数据

如果有多个应用,这种场景更明显。

  • 易变数据的缓存管理不应该寄宿在各自的应用程序池中。应该统一有一个缓存管理中心;
  • 稳定数据,应该在各自的应用程序池中寄存,以增强性能

稳定数据,是相对的,稳定数据也有被更新的时候,用以下办法破坏它。

  • 设置 最大缓存时间,一旦第一次缓存时间超过最大缓存时间,则强制失效。
  • 缓存中心记录每个表的最后破坏时间,稳定数据所在的程序,周期性检测。

MyOqlCache是以Windows服务形式,提供基于 TCP 协议的 WCF 服务 ,安装步骤:

1. 编译 DbEnt

2. 编译 MyOqlCache,如果出错,请检查 Dll 文件路径。

3. 运行 MyOqlCache\安装.bat

NoSql的应用

所谓术业有专攻,NoSql和RMDB不在一个层次上,无法替换。使用 NoSql 做为缓存项,或是保存中间计算结果倒是很合适。

RMDB大都是基于磁盘文件的,NoSql大都是基于内存的。能和NoSql比性能的,应该是 内存数据库!

目前缓存中心使用的是 System.Runtime.Cache 保存缓存项。如果想使用 NoSql ,需要:

1. 打开 MyOqlCache 项目,打开 MyOqlCache.cs ,找到 dbo.CacheInstance

2. 仿照 MyOqlHttpCacheDefaultInstance 重新一个类,并赋值给 dbo.CacheInstance 即可。

我的ORM之十一 -- 缓存的更多相关文章

  1. orm框架与缓存的关系

    1.mybatis规定,一级缓存没必要bean类实现序列化,但二级缓存bean类必须实现序列化. 因为二级缓存是基于namespace的也就是基于接口的,二级缓存可以设置存储源,可以是redis或者m ...

  2. Django ORM Queryset 的缓存机制, 惰性查询简述

    在Django的ORM中 必须注意由于QuerySet的 cache导致的数据获取不正确的问题 在哪些情况下不会出发QuerySet缓存? 隐式存储QuerySet(查询语句没有显示赋值给变量而直接进 ...

  3. mybatis学习 十一 缓存

    1. 应用程序和数据库交互的过程是一个相对比较耗时的过程2. 缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行效率3. MyBatis 中默认 SqlSession 缓存(一级缓存)开启 同 ...

  4. 我的ORM汇总

    MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...

  5. 说说数据库架构,ORM缓存和路由

    为什么在ORM层做缓存,而不是DB层 ORM能有效地提高程序员的开发效率,程序员更喜欢操作对象而不是数据库,他们不关心也不想手写一堆SQL语句,毕竟一个公司里普通程序员要占多数,他们并不是非常熟悉数据 ...

  6. CYQ.Data V5 分布式自动化缓存设计介绍

    前方: 其实完成这个功能之前,我就在思考:是先把想法写了来,和大伙讨论讨论后再实现,还是实现后再写文论述自己的思维. 忽然脑后传来一个声音说:你发文后会进入发呆阶段. 所以还是静下心,让我轻轻地把代码 ...

  7. Hibernate缓存原理与策略

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  8. Hibernate缓存原理与策略 Hibernate缓存原理:

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  9. 是谁决定了走redis缓存?当然是mybatis啊

    1.是谁决定了走redis缓存?当然是mybatis啊 mybatis里默认实现数据的增删改查功能,这里要用到缓存啊 而且是mybatis这种orm框架采用缓存机制的,mybatis默认都有两层缓存了 ...

随机推荐

  1. sublimeText3安装emmet(For Mac)

    每次重装st,安装emmet都困难重重,对上一次依照网上查的资料一步步做好了,这次又忘了如何操作,结果又是网上搜索打开一箩筐的网页. 终于决定,把这些惨痛的经历记录下来,要用的话自己看,也可能可以帮助 ...

  2. VBA常用函数

    字符串相关: ①截取字符串: 从字符串左侧开始:Left(string,length) 从字符串右侧开始:Right(string,length) 从字符串中间开始:mid(string,start, ...

  3. 3G产品升级相关知识

    1.3G产品升级时,内核,文件系统,boot,应用程序,全都升级了,是在boot里升的; 2.拨号模式里的 chap:公网; pap:专网 3.用来查看U盘挂在哪个目录下: cat /proc/par ...

  4. OSG配置问题

    BUILD_OSG_ARAPPERS: 这一项要选,不然后面编译自己的测试程序的时候,会报无法打开文件"osgIntrospectiond.lib"错误. Could not fi ...

  5. CentOS 6.5 x86_64系统手动释放内存

    1.查询当前内存使用情况和释放缓存的参数 redismaster 10:29:24 [~] [root] free -m total used free shared buffers cachedMe ...

  6. mac地址和ip地址、子网掩码和默认网关

    MAC地址 MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模型中, ...

  7. 解决ORA-00824: cannot set sga_target due to existing

    今天Linux服务器机子重启了下,Oracle启动不起来,提示:解决ORA-00824: cannot set sga_target due to existing 看了很多解决方法,发现下面这个特别 ...

  8. 面向对象程序设计 第二次作业<1>

    Github链接:https://github.com/zora02/object-oriented/tree/master/1001.A%2BB%20Format%20(20) 一.解题 题目 解题 ...

  9. sqlserver开启'xp_cmdshell'命令

    --sql server中开启xp_cmdshell命令 1. --允许配置高级选项 GO RECONFIGURE GO . --开启xp_cmdshell服务 RECONFIGURE GO . -- ...

  10. 等比例压缩图片到指定的KB大小

    基本原理: 取原来的图片,长宽乘以比例,重新生成一张图片,获取这张图片的大小,如果还是超过预期大小,继续在此基础上乘以压缩比例,生成图片,直到达到预期 /** * @获取远程图片的体积大小 单位byt ...