首页 新闻 会员 周边 捐助

更新内存中的数据

0
悬赏园豆:100 [已解决问题] 解决于 2013-07-16 10:19

有15张数据库表load进内存中,大概需要内存10G(数据量比较大),随时有request访问内存中的这些数据(平均每分钟2次),然后每10分钟需要把这15张表的内容从数据库中update到内存中一下,问题就来了:如果在update的过程中有request,拿到的数据可能是update了一半的数据,表和表之间是有关系的,这样的数据不能使用。我该怎么解决这个问题?请大神说出您详细的思路,谢谢!

澍可的主页 澍可 | 初学一级 | 园豆:85
提问于:2013-07-15 16:24
< >
分享
最佳答案
1

缓存是要有粒度划分的,你这样将整个库作为缓存单位,这个问题就没法解决。以记录为单位缓存,或者以需要的逻辑将若干条记录作为一个单位进行缓存。

收获园豆:30
天边彩云 | 小虾三级 |园豆:629 | 2013-07-16 10:12
其他回答(3)
1

每10分钟需要把这15张表的内容从数据库中update到内存中

这个是为了同步数据?

update的过程中有request,只能让request等待 update 操作完成。

数据量这么大的话,除了第一次写入内存比较多之外,其他的时候没必要重新写入相同的数据。

你可以写个触发器之类的,数据变更之后,自动的更新内存中的数据,如果每一次都全部重写,肯定很慢而且没必要这么做。

收获园豆:20
二十三号同学 | 园豆:974 (小虾三级) | 2013-07-15 16:47

update时是只update不同部分的,实时性比较强不考虑等待,正在考虑用深复制,hot swop。谢谢。

支持(0) 反对(0) 澍可 | 园豆:85 (初学一级) | 2013-07-15 16:54

@澍可: 你用C++写的。。 这方面就不懂了。

支持(0) 反对(0) 二十三号同学 | 园豆:974 (小虾三级) | 2013-07-15 17:13

@澍可: 大数据,建议你问问dudu站长

支持(0) 反对(0) 二十三号同学 | 园豆:974 (小虾三级) | 2013-07-15 17:16

@二十三号同学: 没有用C++呀,哪里体现出来用C++了。。。。

支持(0) 反对(0) 澍可 | 园豆:85 (初学一级) | 2013-07-16 08:58

@澍可: 能不能截个图或者打个比方描述一下你的需求,或许解决思路需要调整调整,不一定是技术有限就不能解决。

支持(0) 反对(0) 二十三号同学 | 园豆:974 (小虾三级) | 2013-07-16 09:49
1

为什么不在update数据库记录的同时直接更新内存中对应的数据?

收获园豆:30
dudu | 园豆:31053 (高人七级) | 2013-07-15 18:16

业务比较复杂,update数据库记录的系统和我这个不是同一套系统。每次update内存中的数据大概用10秒多,lock的话对用户是不可忍受的,我考虑是不是可以复制一份数据,update的时候就让request先用这个副本,update完成后request来了再用最新数据再把副本里的数据更新的最新。这样做的话该怎么做呢?

支持(0) 反对(0) 澍可 | 园豆:85 (初学一级) | 2013-07-16 08:54

@澍可: 无法想像,update内存中的一条数据记录要10秒多

支持(0) 反对(0) dudu | 园豆:31053 (高人七级) | 2013-07-16 09:41

@dudu: 哈哈,是update内存中的这10G数据,有时候0.08s,有时候10s,时间不一定的,要看有多少数据发生了变化。谢谢大家的意见,已经有了解决方案。

支持(0) 反对(0) 澍可 | 园豆:85 (初学一级) | 2013-07-16 10:17

@澍可: 问题是如何解决的?

支持(0) 反对(0) 二十三号同学 | 园豆:974 (小虾三级) | 2013-07-16 10:42
1

更新数据的同时把原来的内存中的数据过期掉,或者同时更新,我比较倾向于过期掉。

收获园豆:20
Tom.汤 | 园豆:3051 (老鸟四级) | 2013-07-15 22:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册