如何通过RamDisk的方法加速小型数据库的访问速度
应用功能:
数据库中存在大量数据时候,我们的程序启动则比较慢,因此启动从ramdisk中读取数据库可以提高速度。
RamDisk简介
本文首先介绍了 如何在rh6.0系统上创建一个RamDisk,然后介绍了如何通过将数据库内容存放到RamDisk中的方法来加速对数据库的访问 。
什么是RamDisk?一个RamDisk是分配作为一个分区的内存块,或者说将内存模拟为硬盘空间,从而可以想对待硬盘空间一样在其上保存文件。
为什么会要使用RamDisk呢?主要是为了提高速度,若事先知道特定的文件将被高频率访问,通过将文件存放在内存里就可以提高性能。例如web服务器就可以采用这种方式来加快访问速度。下面是一些可能会对加深对RamDisk的理解的资源链接:
http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html
http://metalab.unc.edu/LDP/HOWTO/mini/LILO.html
/usr/src/linux/Documentation/RamDisk.txt
如何使用RamDisk
使用RamDisk是非常简单的。首先,RH6.0的缺省安装本身就有对RamDisk的支持,你所要作的就是格式化一个RamDisk,然后加载(mount)其到目录结构下即可。通过命令"ls -al /dev/ram*"可以查看系统可以利用的RamDisk的数目。这些RamDisk并不起作用,除非设置以后。下面是一个非常简单的使用RamDisk的例子:
# create a mount point:
mkdir /tmp/RamDisk0
# create a filesystem:
mke2fs /dev/ram0
# mount the RamDisk:
mount /dev/ram0 /tmp/RamDisk0
这三个命令分别为RamDisk创建一个目录,格式化它(创建文件系统),最后加载该文件系统到目录"/tmp/RamDisk0上。下面就可以将该目录当作一个分区使用。若格式化失败,则说明你的系统内核没有对RamDisk的支持,则需要重新编译内核,RamDisk支持的内核开关是:CONFIG_BLK_DEV_RAM 。
缺省的RamDisk的大小为 4Mb=4096块。在创建randisk文件系统时可以得到RamDisk大小的信息:
mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Linux ext2 filesystem format
Filesystem label=
1024 inodes, 4096 blocks
204 blocks (4.98%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group
运行命令"df -k /dev/ram0"可以查看可以真正使用的RamDisk的空间大小(因为创建文件系统时会占用一些空间):
>df -k /dev/ram0
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 3963 13 3746 0% /tmp/RamDisk0
需要注意的是当你的系统重新启动以后,RamDisk中的数据会丢失,所以如果RamDisk中的数据被修改了,必须将其备份到别的目录下。
改变RamDisk的大小
为了使用RamDisk,可以通过将对RamDisk的支持编译进入内核中或者编译为模块的方式,在需要时将其加载。编译为模块的方式可以在加载模块时动态决定RamDisk的大小。
当RamDisk被编译进入内核,改变RamDisk的大小的方法为在lilo.conf中田加内容: RamDisk_size=10000 (or RamDisk=10000 for old kernels),然后运行lilo命令,重新启动机器,这样下次加载RamDisk以后,大小就变为10M:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
label=linux
root=/dev/hda2
read-only
RamDisk_size=10000
当编译RamDisk支持为模块形式,可以在加载时决定RamDisk的大小,可以通过杂/etc/conf.module中添:
options rd rd_size=10000
或者在动态加载是通过命令行的形式传入:
insmod rd rd_size=10000
下面是关于如何使用模块的一个例子:
卸载前面加载的文件系统:umount /tmp/RamDisk0 .
卸载模块:rmmod rd
加载RamDisk模块,并设置大小为20M:insmod rd rd_size=20000
创建一个文件系统:mke2fs /dev/ram0
加载RamDisk的文件系统:mount /dev/ram0 /tmp/RamDisk0
在web服务器中使用RamDisk的例子:
这里举一个在web服务器中使用三个RamDisk的例子,这里要确保web服务器的所有内容不超过9M(包括CGI的内容)。
首先,对web服务器的root目录下的内容备份到其他地方,然后重新创建www的根目录:
mv /home/httpd/ /home/httpd_real
mkdir /home/httpd
mkdir /home/httpd/cgi-bin
mkdir /home/httpd/html
mkdir /home/httpd/icons
然后,在/etc/rc.d/init.d/httpd.init中添加如下启动执行信息:
### Make the RamDisk partitions
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2
### Mount the RamDisks to their appropriate places
mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html
### Copying real directory to RamDisks (the
### data on the RamDisks is lost after a reboot)
tar -C /home/httpd_real -c . | tar -C /home/httpd -x
### After this you can start the web-server.
注:
切记若RamDisk中的数据被修改,并且做的修改都是有意义的,则需要对RamDisk中的数据做备份。
你可以启动一个cron任务来完成这个工作,如:每10分钟检查一次看是否有数据被修改,若有则对数据进行备份。
RamDisk的一个应用是使用/tmp做为RamDisk,若系统中有很多程序使用RamDisk,则可以很明显地加快系统速度,而且每次系统重新启动这些暂时数据都会丢失。
通过RamDisk加速小型数据库的访问速度
如果将将PostgreSQL数据库服务器文件加载到内存中就可以加快数据库访问速度。
在/test目录下加载RamDisk
一、在/test目录下设置RamDisk。
mkdir -p /Test
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /Test
这时候你将拥有一个4M大小的RamDisk,根据需要你可以更改你的RamDisk的大小。
二、为PostgreSQL设置RamDisk
理想状态下,你将拥有两个数据库服务器。一个是可以进行修改的,另外一个是存放在RamDisk中的拷贝。为了达到这个目的,需要使用命令: "pg_dump" 或 "pg_dumpall".
注:这里假设已经在lilo.conf中设置RamDisk的大小,使其大于数据库服务器的大小。如果你希望了解合适的大小,可以使用命令"cd /var/lib/pgsql; du ".
然后:
### Stop the current postgresql server
/etc/rc.d/init.d/postgres stop
### rename the current directory
mv /var/lib/pgsql /var/lib/pgsql_main
#### Create a directory to have our RamDisk on
mkdir -p /var/lib/pgsql_memory
#### change the ownership of the new directory to postgres or whatever
#### the actual owner is.
chown postgres /var/lib/pgsql_memory
#### Make an alias or link to the original name, /var/lib/pgsql
ln -s /var/lib/pgsql_memory /var/lib/pgsql
#### Format the RamDisk
mkfs -t ext2 /dev/ram0
#### Mount the RamDisk to the postgresql directory
mount /dev/ram0 /var/lib/pgsql_memory
#### Copy everything from the main directory into the RamDisk
tar -C /var/lib/pgsql_main -cp . | tar -C /var/lib/pgsql_memory -xp
### Start the current postgresql server
/etc/rc.d/init.d/postgres start
经过测试,发现在RamDisk中的PostgreSQL的性能提升最高达到50%左右。需要的时候,可以将其他的应用放置在RamDisk中以提升效率,如ldap服务器等。
themis> df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/ram1 769 408 322 56% /
/dev/ram2 95 6 84 6% /var
tmpfs 1964 0 1964 0% /dev/shm
/dev/oopsdev 7 1 5 17% /oops
/dev/sharedev 462 10 428 2% /share
/dev/sagjava 250 120 117 51% /usr/java
如何通过RamDisk的方法加速小型数据库的访问速度相关推荐
- 小麦盒子cdn_CDN加速,提高网站访问速度的最佳方法
上个月,一台湾的朋友向我反映了他的网站现在十分糟糕的情况. 事情是这样的,这位台湾朋友有一网站,面向用户主要在中国大陆,2010年10月,他把网站寄存地从台湾移到了广东,他租用的是独立服务器,使用线路 ...
- CentOS / RHEL Cachefiles 加速网络文件系统NFS访问速度
为什么80%的码农都做不了架构师?>>> 1. CacheFiles介绍 NFS是一种经常使用到的网络共享文件系统,在分布式环境下,多台服务器的文件共享是一个问题.然而,对于这 ...
- 如何使用DNS加速你的浏览器访问速度?
不知道大家有没有遇到过这种情况, 我们访问用浏览器网页无法正常显示, 但是我们使用的QQ却能正常的打开? 这是因为 : 我们在登录QQ的时候是直接访问的腾讯的服务器, 在下载好的QQ客户端已经帮你配置 ...
- 百度云加速提升网站访问速度
欢迎大家进群,一起探讨学习 博主技术文档地址 博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star 今天偶然的情况,看到了百度云加速能进行网站访问速度提升,因为现在我是用学生价买的阿里云服 ...
- 如何使用百度云加速提升网站访问速度
今天偶然的情况,看到了百度云加速能进行网站访问速度提升,因为现在我是用学生价买的阿里云服务器,1核2G 1M带宽的,所以第一次加载资源的时候,是非常慢的,所以就打算尝试一下. 1)下面进入正题,打开百 ...
- 如何使用XML作为小型数据库
如何使用XML作为小型数据库? 首先,我们以下面的user.xml作为我们所要使用的xml文件,具体内容如下: <?xml version="1.0" encoding=&q ...
- 小型数据库_如果您从事“小型科学”工作,那么您是否正在利用数据存储库?
小型数据库 If you're a scientist, especially one performing a lot of your research alone, you probably ha ...
- 如何使用mysql数据库做网站_php小型数据库(不用mysql做网站)
php教程小型数据库教程(不用mysql教程做网站) include 'pdbm.php'; $timestart = explode(' ', microtime()); $timestart = ...
- 网站访问速度加速的方法
一.网上搜集到的一些解决方案 1.减少CSS文件数量和体积 网站加载CSS文件的时间为:浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文 ...
最新文章
- LNMP架构详解(2)——Mysql、PHP、Nginx源码编译过程
- dlp防泄密系统卸载_浙江好用的企业图纸防泄密软件推荐,局域网内部图纸透明加密方案...
- binlog二进制文件解析
- 毕业论文 | 基于脉冲耦合神经网络(PCNN)的图像特征提取:论文及源代码及参考文献
- 数据结构 | 如何一文搞定链表问题?(附20本书获奖名单)
- 封装、继承、多态的理解
- 1093芯片做正弦波逆变器_长途自驾游“缺电”如何选购正确车载逆变器,避开商家套路...
- 【需求工程】需求管理
- 【Spring】Spring 解决循环依赖的 3 种方式
- .net mysql 参数,在MySQL .NET Provider中使用命名参数
- pythonjava有什么区别_Java与Python的区别对比
- PHP合并2个数字键数组的值
- 少量数据通过Excel表格数据导入server SqlServer查询
- LinkSLA坚持用户第一,打造可持续的运维服务方案
- 原创【歌词类】雪中吟
- JPEG图像格式及文件结构
- Ubuntu系统显示实时网速信息
- 腾讯位置服务模仿微信发送位置功能
- 甲骨文公司将云层添加至其大型机VTL当中
- 016-JLE JNG(小于等于)
热门文章
- NB-IoT智能配电柜测温监测系统解决方案
- Java断言(assert)的介绍和使用
- php 鼠标经过 图片,jq实现酷炫的鼠标经过图片翻滚效果_jquery
- 聊一下Node.js中NAPI的napi_value
- ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately
- 安装windows server 2012在H3C服务器上
- oracle sql数据计算精度问题
- MATLAB积分方法
- 100条信号完整性效应的经验法则
- python 一些模块的应用