10,000多个不同的文件,我需要每5秒抓取4个文件?

时间:2010-12-23 16:20:52

标签: php database database-design sqlite

我有一个包含10,000多个不同文件的数据库,我需要每隔5秒从该数据库中抓取4个随机文件。

我想知道你对建筑师有什么建议。我在考虑使用平面文件或sqlite?通过mysql这样做会非常慢吗?

5 个答案:

答案 0 :(得分:2)

只需将文件放入具有确定名称(0.dat,1.dat等)的目录中,然后直接读取它们。

文件系统中的B树和缓存将负责其余部分。这完全是它的目的。

答案 1 :(得分:2)

只是一种广义的方法 每隔5秒运行selectRandom()过程将太乱。而是每120秒运行selectRandomGroups()

selectRandomGroups()在每次执行中执行selectRandom() 120/5次。并将结果组存储在某个存储(缓存)中。

下一次使用grabRandomGroup()每隔5秒从缓存中检索最后一个组。并将其删除。

答案 2 :(得分:0)

来自非常繁重的关系数据库背景,我的第一反应是不推荐“NoSQL”文档类型的数据库系统。但在这种情况下,听起来基本上你需要一个大的哈希表。我会看看像MongoDB或CouchDB这样的东西。你可以在这里看到差异(http://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid)。

您可能会关注的另一件事是使用Amazon S3或类似的东西将此信息存储在“云”中,如果您认为您需要很快扩展并且没有内部容量。

否则,上面提到的文件系统理念也可以起作用

答案 3 :(得分:0)

为什么不直接存储图像链接而不是整个图像文件?如果在mysql服务器上有任何负载,那么每5秒返回4个文件名的查询不应该放多少。当然可能少于在同一台服务器上安装和运行另一个DBMS。

假设这是某种类型的网站,您可以通过使用javascript生成随机文件名,然后对图像执行任何操作,将其卸载到用户计算机。

答案 4 :(得分:0)

我想从您的评论中可以看出,您的文件存储在同一个表中。为什么这样的事情会太慢?

SELECT * FROM files WHERE approved = 1 AND type = image ORDER BY RAND() LIMIT 4

为什么每24小时运行一个脚本以获取69120个文件并将它们写入目录或其他什么会更快?但当然,你可以做到这一点。只需更改上述查询中的限制即可。