问题描述
有classGamepublicintGameId{get;set;}publicstringGameName{get;set;}和数据库Game表List<Game>games通过httpwebrequest获得更新,每秒更新一次,但这个httpwebrequest只有gameId,并没有gamename,想要更新这个class,现在的做法是每次request完都需要去历遍games执行一次sql语句(select*fromgameswheregameid=@gameid),非常慢,需要改善,目前的思路是这样,先建一个List<game>GamesInDatabase读取全部数据库数据,然后games得到后和GamesInDatabase做历遍。那么问题来了1,这个思路正确吗,是否有更加快速的方案2,数据库Game表会通过另外一个程序更新的,那么Game表更新的时候GamesInDatabase也同样需要更新,如何做到?EntityFramework是否有这样的功能,数据库里有更新的时候本地也同样更新。
解决方案
解决方案二:
你要想清楚你这么做的意义和目的是什么?构造一个静态数据集合,然后每次进行webrequest后还能够会写到数据库,并将数据集合同步更改?(如果这样那难度在哪里?)EF不会帮你解决“数据同步”的问题,这个部分需要你自己去实现。
解决方案三:
1、.思路当然正确,就是缓存机制么2、EF没有这个功能3、net类库有System.Runtime.Caching可用,不过这种标准的缓存机制,并不能严格做到GameName一定准确,它采用的一般是过时更新等手段,有可能取得旧数据。所以是不是适用就要看你的应用对这个数据严谨度的要求4、如果要实现最佳的缓存,那只能全部自己写代码了,但你的更新程序是另外一个程序(我理解为是另外一个exe,不知道你表达是否准确),这就很难做了。
解决方案四:
list<game>games中存放的gameid是相同的?
解决方案五:
为了找到一条记录,就“读取全部数据库数据”,这不叫做真正的缓存技术。先把概念搞清楚。你的所谓的List中数据的命中率低到令人发指的程度,就产生内存数据的不断“抖动”。这是很“坑”的思路。所谓缓存,是说你把“select*fromgameswheregameid='abcd'”这样一个语句(或者这个语句的md5)作为key,然后创建一个Cache单元。这样你把这个语句发数据库系统一次之后,重复使用1000次而不需要再把它发给数据库系统。在缓存中只有个别的记录,而不是什么“全部数据库数据”!至于说数据库系统中的表发生了改变,这个缓存单元应该自动清理掉,以避免在内存中有脏数据。但是如果数据库系统中的表没有改变,就不要想当然地去定时清理什么缓存单元。
解决方案六:
所谓缓存,是说相同的sql查询语句作为key,将查询出来的几条(或者几十条)记录缓存起来。缓存单元的大小的选择,是个关键。把数据库表、甚至数据库叫做缓存,那就太坑爹的。
解决方案七:
数据库里有更新的时候本地也同样更新。要做到上面这点。建议思路:对该表添加触发器,监控它的增删改动作,一旦发生,就通过oracleAQ发送消息到IBMMQ,然后你从MQ就可以实时获取到数据的变动。但是我自己也不知道“”“”通过oracleAQ发送消息到IBMMQ“”“”这一步怎么做,你问问其他人吧。
解决方案八:
只有ID的话,可以先查询出ID对应的gamename然后把id和name同时更新到表中啊,是这样?
解决方案九:
缓存数据,每次的http请求,对缓存进行修改。然后将这一条保存到数据库。