找回密码
 注册
查看: 877|回复: 3

一个关于数据库高速缓冲的设想,Linux下如何实现?

[复制链接]
发表于 2005-11-14 11:44:17 | 显示全部楼层 |阅读模式
网站的MySQL数据库大约1G(预计增长最大不超过1.5G),SELECT占95%以上,UPDATE和INSERT基本上没有。服务器的内存很大,有4G,然而要命的是只有一个7200转的SATA硬盘,并且不支持NCQ功能,一遇到多个并发查询时就慢的像蜗牛!
我有个不增加任何投资的改善性能的想法,大家看看如何实现?
专门划出1.5G内存来建立一个data目录的镜象,读取时只从内存中读取(不访问硬盘),写入时同时更新内存和硬盘,这样硬盘就变成一个“只写”存储器。
由于写操作很少,这样可以有效的避免硬盘操作从而提高效率,而剩余的2.5G内存也不算小。
大家说说看这个如何实现呢?
问题的关键在于如何保证读取的时候只访问内存,而写入的时候同时更新内存和硬盘。
不用ShareMemery和RamDisk的原因在于不能保证实时刷新硬盘,这样万一掉电的话,就要哭死了~
================
补充说明
------------
query-cache的用处不大啊,因为想要这样做最初的一个原因是受到了sql查询攻击,攻击者利用网站在用户注册时必须遍历库以确定是否有重复的用户名,然后不停的提交随机生成的用户名进行查询,这样每次查询的语句都不一样,所以query-cache再大也没有用,硬盘还得拼命的转~
当然也可以通过建立索引来避免遍历,但这里只是为了说明问题而举的例子,因为某些查询始终是无法避免遍历的,比如提取大于平均值的记录。
这个想法的本意是在用内存的高速度代替硬盘的低速度,同时又要有较强的抗风险能力[掉电或内存崩溃时丢失的数据不会超过崩溃前的2秒]
发表于 2005-11-15 11:23:59 | 显示全部楼层
1. 建立两个数据库,一个放在硬盘上,一个放在内存里。
2. 按 SELECT 的限制条件拆分表。
3. 修改程序,SELECT 操作内存里的库,UPDATE 和 INSERT 操作硬盘上的库。
4. 运行两个 MySQL Server,通过复制功能更新内存里的表。
5. 写个脚本,开机时把硬盘里的库复制到内存中。
回复

使用道具 举报

发表于 2005-11-15 11:30:49 | 显示全部楼层
顺便问一下,您在其它平台上是如何实现的?
回复

使用道具 举报

 楼主| 发表于 2005-11-15 17:13:42 | 显示全部楼层
对头!
这个只是我的想法,在其他系统上也没有实现,在看了你的回答前一直处于,迷茫中。。。
问了好多牛牛,都不知道怎么办才好,困惑很久了。
感谢!感谢!有个思路就好办了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-13 14:55 , Processed in 0.041371 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表