对于sql缓存的一点疑问,以及对未来的展望

对于数据库,我也是个小白

我先举个我遇到的例子吧

一张考勤结果表,这是结果表tm_dayresult

id(主键)   psn_num(人员编号)  dutydate(排班日期)  starttime(上班时间) endtime(下班时间)    缺勤时间,旷工时间,早退时间,工作时间,,,,,

客户的情况是:(规定工作时间是08:30-17:30)

客户的需求是,假如我今天加班到20:00之后,第二天9:30以后打卡才算迟到

我接手的情况是:没有源代码,不能改源代码(用友标准产品,不允许修改),只能写触发器之类的,程序的逻辑是有另外一张打卡记录表,这是基础数据,由此计算出tm_dayresult(日汇总结果),tm_monthresult(月汇总结果),tm_yearresult(年汇总结果),然后在数据库里插入所有tm_dayresult,再插入所有tm_monthresult,,,,,

于是我要在yearresult上写触发器,得到psn_num,再去查tm_dayresult里所有这个人的记录,游标,如果迟到了,查一下前一天的下班打卡时间,,,,what a fucking day

现在问题来了,学挖掘机技术哪家强?

请忽略上句,如果看到了我也没办法喽

游标打开,这个游标肯定要先select * from tm_dayresult where [email protected]_num

这个时候已经把所有这个人数据查出来了,放在内存里了,我再去查他前一天的记录,再做一次io操作,是不是有点蠢?我可以建一个临时表,把结果存一下,去临时表里查他前一天的数据,这样是在内存里,少一次io操作

自作聪明,,,,,sql有一个机制,每一次查询,这次的结果是在内存里缓存一段时间的,下次查询不用再做io操作,不然跟直接读写文件有什么区别

那我是不是应该直接去查select * from tm_dayresult where [email protected]_num and dutydate=dateadd(d,-1,@dutydate)

这样反而效率更高,因为在这个很短的时间内,这一部分数据已经在内存里了,sql内部的机制是直接取缓存(先不管sql能不能分析出这次查询的结果已经在内存里了)

ef可以生成缓存,我对ef不了解,不知道它是如何实现。我猜,比如用sql时直接使用sql内部的缓存,在此基础上再生成自己的缓存,用oracle时用oracle的缓存,,,感觉这样比较合理。当然,直接读写文件的时候全部是自己生成的缓存(怎么设计??怎么解析??如果是读xml,excel之类还好,这本身就是一种数据库,如果是一个二进制文本,按字节读,那我不知道该如何生成缓存,也许可以记录这是文件的哪里到哪里作为索引,然后对文件内容进行增删的时候,修改索引。但不能记录磁盘位置,一个文件可能乱序存在磁盘上)

关于缓存如何实现先放一下,另一件事,我能不能在查询的时候设置:查询结果要缓存多久。因为我可能打开程序就只用一次,比如系统配置,用友的u8,我在uap里做一张报表,他的格式,内容,,,所有的东西都是存在数据库里。我把软件打开,这些配置我读一次,然后永远都不会用了,所以我能不能  (select * from tablename)with cathetiem=0

然后,我能不能用统一的数据库结构化查询语言去使用不同的关系型数据库,oracle和sql语法基本一致,但不完全一致就意味着,,,浏览器不兼容,怎么办?做两套,,,我希望以后有统一的查询语言和数据库设计器,我设计好了数据库结构,于是就形成了一个描述文件,我用这个描述文件可以生成任意数据库管理软件的数据库,就像浏览器去解析html,然后一个后台程序员不知道我的程序用了什么数据库。作为客户,我可以随时更换数据库软件,甚至支持sql导出至oracle,对于客户来讲,我的数据就是,完全的,纯粹的,“我”的数据

因为以后我们可能更彻底地模块化,我随身带的不是电脑,手机,,,而是一个具备单一功能的个人数据存储中心,轻巧,绝对安全(因为厂家只要关注这一件事,专注带来专业),我回家连上各种设备,当电脑用,在外面连上其他设备当手机用,当摄像机用,因为我的手机希望它轻巧,摄像机需要他够大(像素),专业的设备具备专业的功能,需要什么功能就用什么设备,这需要把数据和功能在硬件上严格分离,因为功能是通用的,数据是个性的,个人的,当然某些设备可能需要根据具体的数据进行可重构,但也仅限于他自己的领域,这是完全可以接受也是必要的,,,那一天,我们整个人类就像一个人一样,每个人就像一个细胞一样,完全的模块化,格式化,,,,于是我预见了那一天太遥远了,,,这等于是完全的共产主义社会

时间: 2024-10-18 00:24:01

对于sql缓存的一点疑问,以及对未来的展望的相关文章

mybatis的sql 缓存,去除mybatis缓存

第二次用到mybaits,还是被同一个问题坑了几个小时,所以一定要把这个问题分享给大家.网友很多都是说了一大堆的配置,都是在mybatis.xml中配置.但是,我是没有用mybatis.xml的,我的配置都是在每个**mapper.xml中配置,无非就是一个关联实体类的路径,和一个别名. 在mybatis框架中,在SqlSession未关闭之前,在一个session里面,如果执行相同的select语句,mybatis不会重新查询数据库,而是直接返回缓存在内存中的查询结果,这个是与MyBatis的

discuz 7.2 faq.php sql注入的一点研究

6.2号(可能更早)看到网上这个exp,是一个discuz 7.2的sql注射漏洞 经过多番考证,网上多数exp中都存在这些或者那些的问题,我自己利用和修改后总结,利用方法如下: Discuz 7.2 /faq.php SQL注入漏洞 1.获取数据库版本信息 faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(version(),floor(r

关于String的split方法的一点疑问

今天莫名其妙的又做了一下leetcode上面的第一题,是简单的字符串逆序输出问题.下面是我处理的代码: public String reverseWords(String s) { if(s == null) return new String(""); StringBuffer fir = new StringBuffer(s); if(fir.length() == 0) return new String(""); while(fir.length() !=

为SQL缓存通知启用数据库

没有为 SQL 缓存通知启用数据库“ClassApp”. 要为 SQL 缓存通知启用数据库,请使用 System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications 方法,或命令行工具 aspnet_regsql.要使用此工具,请运行“aspnet_regsql.exe -?”以了解详细信息. 看看数据库是否启用了相关的监听服务:Select DATABASEPROPERTYEX('数据库名字','IsBrokerEnabled') 接

Sql缓存依赖

Sql缓存依赖主要分为两种: 1.轮询模式(poll model) 2.推模式(push model) 今天先讲解第一种模式:轮询 要使用sql轮询模式,得做三方面的工作: 1.对数据库启用缓存依赖 2.对一个或多个表启用缓存依赖 3.在web.config中配置应用程序 一.对数据启用缓存依赖 在visual studio command prompt中执行以下命令 aspnet_regsql -C "Data Souce=localhost;Integrated Security=True;

工厂模式的一点疑问

最近看了一下设计模式中的工厂模式,对于其中的工厂方法模式有一点疑问,在此记录,方便以后学习所需. 首先工厂模式是为了满足开闭原则:扩展开放,修改封闭. 对比一下简单工厂模式和工厂方法模式,会发现简单工厂模式中的createBMW()方法中包含的选择生成方法的switch语句,在工厂方法模式中的工厂类里没地方放,因此只能移交给客户,由客户来做switch.好了,那么问题来了(挖掘机哪家强?),在工厂方法中真的满足开闭原则吗?是的,工厂类和产品类满足,可是客户类呢?增加一个产品就必须到客户类里修改s

使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)

使用 SQL 缓存依赖项 最简单的缓存策略就是使缓存数据在一个指定的时间周期后过期.但是这个简单的方法意味着缓存数据没有保持与底层数据源的联系,从而导致过期数据长时保存或当前数据很快过期.更好的方法是使用 SqlCacheDependency 类,这样数据一直被缓存,直到其底层数据在 SQL 数据库中被修改.本篇教程将讲解怎样使用这个类. Part 1 简介 使用 ObjectDataSource 缓存数据 和在架构中缓存数据 教程中探讨的缓存技术使用基于时间的有效期 , 在指定的周期过后从缓存

最近写sql遇到了一点问题,如何查询某一段连续日期的数据,自己写了个很小的数据表,来说明我的思路。希望有高人给更清晰的思路指导

工作:开始遇到各种数据库的问题,初涉数据库,并不是很了解,可能很多关键的数据库知识没有掌握 现在把我遇到的问题,用简化的形式表达出来.就是求取一连续时间段上出现的数据 构建一个小的表如下,目的是为了求取连续三天出现同一种的天气的数据 CREATE TABLE weather ( w_status VARCHAR(MAX), w_date DATETIME ) INSERT INTO weather(w_status,w_date)VALUES('晴','2017-3-18') INSERT IN

关于进行条件筛选的SQL关键字的一点理解

概述 一般能够用于条件筛选的有三种: ON: 联结(join)筛选 WHERE: 一般条件筛选 HAVING: 分组后的条件筛选 ON JOIN – ON 语句的执行顺序: 例句: SELECT * FROM A LEFT JOIN B ON A.ID = B.ID AND A<>0 WHERE A.name = 'x' 注意在作on 连接后 的and 子句 和where 子句 . 他们有什么不同? 逻辑上解释:(不考虑执行计划中执行步骤和作嵌套连接等具体方式,这里只讨论如何思考逻辑上的步骤)