首页 新闻 会员 周边 捐助

如何把access数据库文件映射到内存?

0
悬赏园豆:50 [已关闭问题] 关闭于 2017-07-14 08:15

如何把access数据库文件映射到内存,而程序访问的时候访问内存数据库,当程序关闭时再写入磁盘。

这样做主要是想提高查询速度。有哪位大神做过,说下思路即可?

要基于windows,与编程语言无关。

问题补充:

我想着是不是可以通过hook住CreateFile和ReadFile这几个API,把文件访问导向内存,但不知道除了这几个,还要Hook哪些,也不太确定这个方案的可行性。

空明流光的主页 空明流光 | 初学一级 | 园豆:111
提问于:2016-01-20 16:08
< >
分享
所有回答(5)
0

我记得当时我们师傅在对数据库操作的时候,C#,就是把数据库中的内容,放进内存的。用C#创建了一个内存表,C#好像有这个功能。

我觉得你可以自定义数据结构,模拟表的结构,然后,把数据库中所有数据读写近内存,只是内存开辟多一点就OK了。

其实数据库利用好了,你这个需求是不必要的。

[0] | 园豆:1257 (小虾三级) | 2016-01-20 16:24

@沧海一杰: 查询操作复杂而且慢。应该交给DB优化。放内存肯定是不可取的。

支持(0) 反对(0) [0] | 园豆:1257 (小虾三级) | 2016-01-20 17:27

@[0]: 请不要答非所问,我是来咨询技术,不是让你来给我做策划的。

支持(0) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2016-01-20 17:37

@沧海一杰: redis 查一下

支持(0) 反对(0) [0] | 园豆:1257 (小虾三级) | 2016-01-20 19:34
0

第一、如果你想把数据放在内存(缓存)中,前提是数据量不大,如果很大内存是放不下的。

第二、既然数据量不大,但是查询又慢。只能说明你的SQL有问题。

第三、总和以上两点,优化SQL的效果要远高于映射内存。

第四、给分吧。

CCU | 园豆:238 (菜鸟二级) | 2016-01-20 16:38

请不要答非所问,我是来咨询技术,不是让你来给我做策划的。

支持(1) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2016-01-20 17:37
0

可以了解一下RAMDISK,把内存映射出一部分来当做硬盘,再把ACCESS文件放到内存硬盘上,效率可以明显提升。

I,Robot | 园豆:9783 (大侠五级) | 2016-01-20 18:03
0

sqlite支持内存数据库的功能,可以直接改用sqlite而不是access。或者从access提取数据到sqlite内存数据库,然后对内存数据库操作,最后再更新回access,这个过程你要做的事是两种数据库字段类型之间的转换和对应。

编程小菜鸭 | 园豆:170 (初学一级) | 2016-01-20 23:54
0

如果愿意换数据库,Sqlite是非常容易满足你的期望的。

 

如果坚持用Access,可以将所有表都创建对应的类,然后将所有数据都取出来,放到类list中,这个时候查询就使用Linq。

BTW:本来思考过让你放到DataSet的,但是想了下,发现查询比较不容易。

幻天芒 | 园豆:37205 (高人七级) | 2016-01-21 09:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册