我有一个数据库表,其中每行都是一部电影(其中包含“title”、“director”和“jpeg_data”等字段),还有一个相关的表,其中每行都是一部电影的截图(包含“movie_id”和“jpeg_data”字段)。每部电影都有2-8张截图。
我想按顺序输出数据
现在,我发现的最简单的解决方案是执行(一个粗略的伪代码):
for movie in database.select id,title,director from movies
print movie.title, movie.director
for screenshots in database.select screenshots where movie_id = id
print screenshots.screenshot
这是一个嵌套循环,内循环正在进行数据库调用。这将使用我当前的数据集进行2,800个数据库调用,这看起来非常缓慢和效率低下。
一定有更好的解决办法,但我真的想不出一个。我想选择所有的电影,并选择所有的截图,然后找到一些方法来迭代两个数组,同时保持它们之间的同步,如果这是正确的话。
在这种情况下,正确的/最优的做法是什么?
发布于 2014-12-04 00:00:04
在发表了一些评论并再次阅读了这个问题之后,我意识到了一个核心问题--你有一个XY问题:
还有一个相关的表格,其中每行都是电影中的一个截图(包括字段'movie_id‘和'jpeg_data'),我确实看到了一个性能上的成功,是的;即使在我本地托管的网页上只有12张图片,我也看到了5秒的加载时间,因为它获取了图像。
web浏览器的目的是尽可能快地获取所有数据。在呈现页面时,它通常(并不总是)更愿意做大量的静态数据(如图像)的小提取,而不是一次大的获取。一个大的抓取-它必须等待一点,直到它可以开始呈现。
这可能是核心问题。不是循环上的迭代,而是必须遍历循环才能获得jpeg数据。
不要将图像存储在数据库中。将图像存储为web服务器可以作为静态文件访问的静态文件。将文件名或文件路径存储在数据库中。
试图将大型(而不是一致大小的)二进制文件从数据库中提取出来,并不是它所设计或擅长的--这正是文件系统所擅长的。
相关信息:
撇开这一点不说,你有两个结果集。您可以:
其中一些可能受到语言和数据库选择的限制。
https://softwareengineering.stackexchange.com/questions/264504
复制相似问题