微软没有成熟的内存数据库可用,当游戏或者大型应用。
频繁修改对象访问(可以对应到数据表)状态时,IO性能将成为系统瓶颈。
MemeCached不能解决全部问题,尤其是级联查询非主键字段的情况。
因此需要有个内存数据库的架构,加大内存,缓解IO。我思考,是否可以用DataSet实现内存数据库?1,有一个全局的静态的DataSet名叫DS,结构和物理数据库完全一致,可以在项目启动时,映射到内存里,数据是空的。
2,大量并发访问时,查询时发现内存中没有的数据,再从物理数据库灌进来,同时进缓存MemeCached
3,有主键的数据从集群缓存MemeCached里取。
3,插入和修改先进DS,延迟一段时间再进物理库。
4,DS的大小自动维护,不超过系统内存可用量。以上只是思路,想看看大家思考后会有什么结果,预料到什么问题?
频繁修改对象访问(可以对应到数据表)状态时,IO性能将成为系统瓶颈。
MemeCached不能解决全部问题,尤其是级联查询非主键字段的情况。
因此需要有个内存数据库的架构,加大内存,缓解IO。我思考,是否可以用DataSet实现内存数据库?1,有一个全局的静态的DataSet名叫DS,结构和物理数据库完全一致,可以在项目启动时,映射到内存里,数据是空的。
2,大量并发访问时,查询时发现内存中没有的数据,再从物理数据库灌进来,同时进缓存MemeCached
3,有主键的数据从集群缓存MemeCached里取。
3,插入和修改先进DS,延迟一段时间再进物理库。
4,DS的大小自动维护,不超过系统内存可用量。以上只是思路,想看看大家思考后会有什么结果,预料到什么问题?
解决方案 »
- C# datagridview单元格操作问题 <紧急求助>
- C# 如何调用DataGridViewCellValidatingEventArgs事件,并传入参数
- 特求助关于DES加密
- 如何在关闭一个窗体时显示另一个窗体?(原窗体关闭,只留下新窗体)
- 如何实现动态设置button的borderstyle
- C#如何接收邮件中的附件!!!急,在线等了!!(高分,不够在给)
- 小问题有关数值转换
- SharpDevelop可否开发c#web程序?
- Winform的DataGridview问题
- 关于.net,送分问题,今天结贴。
- 有关P/Invoke
- 我的form程序在计划任务中执行以后看不到界面,怎么修改?
这方面我也不太懂,不过按照“3,插入和修改先进DS,延迟一段时间再进物理库。”这一条来说是不是需要维护一个很大的消息队列来控制DS数据-->物理数据库的操作?
Dictionnary<T,Dictionnary<T,T>>这样的结构也会非常多,而且是自动生成的。
为了加快查询速度,用这个东西做索引。而且,这个DS是专门一台机器,跑在WCF状态机程序里的。
(或者其他更快的通讯机制MSMQ,RabitMQ之类的)
======
如果数据加中 存在"假删"操作,即通过update某条数据的某个字段来实现冻结此条数据
这一操作先进DS 后持久化进库
那么在这段"延迟"时间内,这条数据还是有效的?
如果不能,排他怎么处理?DS与实际DB交互的时间间隔需要考虑一下,太频繁就没有意义了,但如果间隔太久,万一断电什么的,损失会很大
更好的方法是把windows全部放在内存里面运行。然后定时镜像数据库。
现在已经有很好的解决方案了。楼主可以参考一下。
另外不建议dataset。因为dataset本来就是瓶颈。
你可以创建自己的表结构,用文件和hashtable来模拟。
如果非要用到数据库的话,最好批量处理。Bulk insert就是一种很好的方式。
1。Dataset的内存更新数据后再延迟执行到物理数据库更新,这段时间,要适当均衡下 你系统会不会挂掉
或特殊情况下的数据丢失问题,此时就真的不好在要求强事务环境下维护使用,另外DataSet的数据如果很大批量更新性能速度,个人曾有小尝试过,不是很理想.(泛型的循环插入再由事务最终提交的批量更新方式性能还可以)
4。 个人感觉居于DataSet公用缓存,还不如居于内存映射文件方式进行架构处理-I-O问题。
http://hi.baidu.com/free_specter/blog/item/a69279f46328d168dcc474e9.htmlmemcache_engine
我想,起码对于只插入,不修改的情况,会有较大改善的,我顶你!!
也希望如果您有成果的话,请与我联系,我期待您的好消息。我这几天研究oracle的timesten,我觉得这个timesten 就可以用dataset来实现嘛!不用很痛苦的配置了