2012-03-04 141 views
0

首先,我打算做的是使用内存来存储最新的“用户更新”记录每个用户的环形缓冲区的想法。
我是MySQL新手。我如何在内存中创建表格?
在官方网站,据说我们可以在创建表格时设置ENGINE = MEMORY。但文件声称,内存中的这些表总是用于读取,而不是用于写入。
实施使用MySQL

我根本不知道该怎么做。

我到这个问题了几天。我不能在服务器上安装memcache和任何PHP扩展,因为我不使用虚拟专用服务器,我可以做的只是在httpdocs文件夹中传输脚本和文件...我也尝试使用平面文件来存储数据作为缓冲区/缓存,但是我发现由于拒绝权限,我无法在服务器的文件目录中写入/创建文件,并且我不允许更改此权限。
使用MySQL进行缓冲可能是我唯一的选择。希望有人能给我一些提示。

谢谢。

p.s.我使用运行PHP的Linux Apache服务器,以MySQL作为数据库。

+0

你能更好地描述你正在尝试做什么吗? – Brad 2012-03-04 03:14:36

+0

实际上,我正在为我的iPhone应用程序编写服务器端脚本,此应用程序定期向Web服务器发送数据。这些数据将存储在MySQL数据库中,但我也希望最新的数据,比方说每个用户的30个数据保存在内存中,以便浏览器端以更高的速度访问最近的用户数据。 – dannail 2012-03-04 03:19:05

+0

如果你有足够的用户需要这个,你将没有足够的内存来按照你提出的方式来扩展它。做一个适当的索引,并在普通桌面上执行此操作。 – Brad 2012-03-04 03:40:21

回答

0

ENGINE = MEMORY表可用于读取或写入。

要小心的唯一的事情是,在内存表中的所有数据消失在服务器崩溃时,关闭,重启等。(正如你所期望的在内存中的表。)

+0

您的意思是重新启动服务器/服务器崩溃将清空内存表,但不删除它们? – dannail 2012-03-04 03:22:08

+0

@ user988988表架构不会与表本身一起存储 - 因此表定义将被保留(因为它不仅存储在内存中)。 – Amber 2012-03-04 03:23:14

0

你真的应该仔细阅读关于MySQL的MEMORY引擎。数据存储在RAM中,因此当服务器断电或重新启动时,RAM将被清除,数据将被清除。 MEMORY表应该是MySQL中最快速访问的表类型,但只能存储临时数据,不能保证。

如果我理解正确,你正在试图从PHP生成的某种数据的静态缓存,是不是?最简单的方法是将它们作为固定文件缓存写入您的www目录,无论是HTML还是JS。如果你不能chmod你的目录是可写的,那么将它们存储在MySQL中应该也可以,但只有在实际上有帮助。

缓存数据的思想是:减少SQL查询,减少磁盘I/O,减少代码生成。但是使用MEMORY表会花费太多的内存使用。将它们存储在一个普通的MyISAM表中应该也可以,并且可以安全地处理大量的后台工作。

但是,应该考虑两件事情:1,访问时缓存是否存在; 2,如果缓存是最新的。

给你的结果某种关键应该是一个好主意,所以PHP首先检查缓存日期,如果不存在,生成缓存,然后显示或以其他方式直接显示缓存。