我有一个包含10,000多个不同文件的数据库,我需要每隔5秒从该数据库中抓取4个随机文件。
我想知道你对建筑师有什么建议。我在考虑使用平面文件或sqlite?通过mysql这样做会非常慢吗?
答案 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个文件并将它们写入目录或其他什么会更快?但当然,你可以做到这一点。只需更改上述查询中的限制即可。