- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个工作脚本,可以在合理的时间内完成这项工作,而且看起来相当可靠。它完全用 PHP 编码,并围绕 saccharine 建议的 array_diff() 思想构建(所以,谢谢 saccharine!)。
我有一个 MySQL 数据库,它是某个目录中 mp3 文件及其属性(即标题/艺术家/专辑)的索引。
新文件经常被添加到音乐目录中。目前它包含大约 25,000 个 MP3 文件,但我需要创建一个每天左右执行一次的 cron 作业,添加在数据库中找不到的所有文件。
问题是我不知道最好/最省力的方法是什么。我假设必须在每个 cron 运行中对每个 文件运行MySQL 查询(以检查它是否已经索引),因此脚本将不可避免地需要一点时间while 运行(这没关系;这是一个自动化过程)。然而,正因为如此,我通常选择的语言(PHP)可能不够,因为它不是为运行这样的长时间运行的脚本而设计的(或者是......?)。
这显然很好,但我并不担心删除已删除文件的索引条目(如果文件实际上被删除,它总是手动清理,而且我不介意手动进入数据库来修复索引)。
顺便说一句,这将是递归的;这些文件大多位于 Artist/Album/Title.mp3 结构中,但是它们并不是像这样严格排序的,并且脚本肯定必须能够获取新文件的 ID3 标签。事实上,理想情况下,我希望脚本在每次运行时为每个文件获取 ID3 标记,并向数据库添加新行或更新现有行(如果已更改)。
不管怎样,我是从头开始的,所以我想首先是最基本的建议(比如使用哪种编程语言 - 如果有必要,我愿意学习一种新的语言)。非常感谢!最佳答案
首先是一个愚蠢的问题,是否不能简单地按添加日期对文件进行排序,并且仅对最后一天添加的文件运行迭代?我不太熟悉如何处理文件,但看起来应该是可能的。
如果您只想提高当前代码的速度,我建议您检查数据是否已正确索引。如果您通过表的索引进行搜索,查询会更快。如果您正在搜索不是关键的列,您可能需要更改您的设置。您还应该避免使用“SELECT *”,而使用“SELECT COUNT”,因为 mysql 将返回整数而不是对象。
您还可以在几个 mysql 查询中完成所有操作,但这会增加 php 代码的复杂性。使用有关所有文件 $files 的信息调用数组。从数据库中选择数据,其中数据库中的文件与 $files 中的文件匹配。像这样的东西。
"SELECT id FROM MUSIC WHERE id IN ($files)"
读取返回的数组并将其标记为$db_files。然后使用 array_diff() 查找 $files 数组中未出现在 $db_files 数组中的所有文件。将丢失的文件标记为 $missing_files。然后将 $missing_files 中的文件插入数据库。
关于mysql - 如何更新约 25,000 个音乐文件的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7859045/
我是一名优秀的程序员,十分优秀!