我在Ubuntu(.mp3,.wav等)文件上有一个音乐目录.该目录可以包含所需数量的子目录,没有限制.我希望能够创建一个音乐库 - 也就是说,根据以下过滤器返回歌曲列表:
1)播放列表的成员资格2)艺术家姓名3)字符串搜索4)歌曲名称等
但是,如果文件名被更改,移动,甚至添加到我的音乐目录,我需要能够反映出这是在我的音乐组织引擎中 - 很快!
我原本以为只使用pyinotify,incron或inotify来监视我的目录.不幸的是,我的目录是Samba共享,因此监视文件事件失败.所以我的下一个猜测是简单地在python中递归搜索目录,并填充SQL数据库.然后在更新时,我只想查看是否有任何更改(扫描每个子文件夹以查看每首歌曲的名称是否已在数据库中,如果没有添加),并相应地进行更新.不幸的是,这似乎是一个糟糕的O(n^2)
实现 - 对于一个多TB的音乐收藏来说非常糟糕.
稍微好一点的可能涉及在SQL中创建树结构,从而缩小可能的候选者以在任何给定的子文件夹步骤中搜索匹配到该子文件夹的大小.似乎还不够优雅.
我可以使用哪些设计范例/包来帮助自己?显然将涉及许多聪明的哈希表.我只是在寻找正确方向的一些指示,以解决问题.(我也是一个完整的瘾君子.)
我正在使用PHP来查询我网站上的MySQL数据库.请回答以下问题:
mysql_close()
在完成查询数据库的时候不使用会发生什么?连接将保持打开状态?如果是,那么多少时间?如果没有那么为什么?mysql_close()
性能如何?我是否应该在每次需要访问数据库时打开一个新连接,或者我应该只保留一个连接并最终关闭它?我正在优化数据库,并且有一些我不清楚固定长度数据类型的东西.
据我所知,这些数据类型是固定长度的:
这些是可变长度的:
如果我错了请纠正我!
现在,我的问题是:这些数据类型是固定长度还是可变长度?
谢谢.
我想知道我是否采用值为8的INT,这是否意味着我只能从1到99999999或从1到4294967295 UNSIGNED?
使用标准api,我有一个查询,它执行以下操作:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<SourcePath> pathQuery = cb.createQuery(SourcePath.class);
Root<SourcePath> pathRoot = pathQuery.from(SourcePath.class);
pathQuery.where(cb.equal(cb.literal(0x00010002).as(String.class), (pathRoot.get(SourcePath_.path))));
TypedQuery<SourcePath> query = entityManager.createQuery(pathQuery);
query.getResultList();
Run Code Online (Sandbox Code Playgroud)
生成的sql查询结果如下:
select ...snip aliases... from SourcePath where cast(x'00010002', char(1)) = path;
Run Code Online (Sandbox Code Playgroud)
(路径将是一些讨厌的旧别名,但这是无关紧要的).
此查询不正确.特别是,中投:cast(x'00010002', char(1))
不强制转换为字符串,由指定的.as(String.class)
,相反,它应该是cast(x'00010002', char)
,或者cast(x'00010002', char(N)
在那里N
是一个合适的足够大的数量.
我已将此抛出失败的原因与org.hibernate提供的MySqlDialect隔离开来.尤其:
public String getCastTypeName(int code) {
if ( code==Types.INTEGER ) {
return "signed";
}
else if ( code==Types.VARCHAR ) {
return "char";
}
...snip...
}
Run Code Online (Sandbox Code Playgroud)
链的哪一个被解释为a char
,由对话框注册:registerColumnType( Types.CHAR, "char(1)" );
.
最后,对我的问题.我该如何解决这个问题?我是否将其报告为Hibernate的错误?我是否扩展了Dialog并从getCastTypeName更正了返回的类型?是否有 …
我正在开发一个系统,需要允许用户被分组.这些组可以由系统中的其他特权用户自由创建,编辑和删除.那部分很容易; 只需创建一个group_users
将用户链接到组的表.(如果你是规范化的坚持者,那么你可以创建一个group
只列出组的group_users
表,然后有一个表将它们链接在一起 - 这也很好)
这是它变得棘手的地方.客户端希望组还包含任意深度和任意重叠的组(组可以在多个组中,组可以包含多个组).这很容易存储(使用group_groups
表),但如果没有像Oracle的CONNECT BY这样的排序扩展,很难查询.
这个递归层次结构也需要追溯 - 意味着如果组A包含组B,组B被修改,那么组A也将被修改 - 所以我不能作弊并且只是扁平化结构.如果你不相信我,它不能简单地被夷为平地,请考虑这种情况.你有一个名为"酷人"的小组,其中包含用户1和2.有人创建了一个名为"真正很酷的人"的小组,其中包含用户3并包含"酷人"组.当我查询"真的很酷的人"时,我应该得出结论,用户1,2和3都在群组中.现在说有人决定用户2不再是一个很酷的人,并从"酷人"中删除用户2.在那个时间点之后,"真正很酷的人"只包含用户1和3.如果我最初将结构弄平,当我将他从"酷人"中删除时,我不知道将用户2从"真正的酷人"中删除".
因此,在这种情况下,一个微不足道的扁平化将不起作用.我考虑过的其他选择:
group_users_flattened
,但也保持一张group_groups
桌子.为group_users_flattened
INSERT/UPDATE/DELETE 创建一个触发器,该触发器将转到该group_groups
表,查找包含该组的所有组,并动态地进行相应的更改group_users_flattened
.
还有其他我未考虑过的想法吗?
我在hibernate中遇到数据太大的问题.那是-
引起:java.sql.BatchUpdateException:数据截断:com.mysql.jdbc.PreparedStatement.executeBatch中com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1527)第1行第'FBZipLoc'列的数据太长(PreparedStatement.java:1065)org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)... 12更多
是否可以自动截断所有字段的数据.或任何其他方式来处理这个问题.但我不想检查所有字段的数据长度,因为我有超过一千个字段.
这是有问题的PDO代码:
$db->prepare("INSERT INTO user (id, name, password, salt, email, join_date, chats)
VALUES (NULL, ?, ?, ?, ?, ?, ?)");
$db->execute(array($name, $password, $salt, $email, $joindate, ''));
Run Code Online (Sandbox Code Playgroud)
我得到致命的错误:Fatal error: Call to undefined method PDO::execute() in register.php on line 12
第12行是上面的执行.可能有什么不对?该数组包含完美的字符串,使用print_r进行检查.
我想创建一个用户登录表单,它需要使用电子邮件而不仅仅是用户名.如果它不是电子邮件,我有什么方法可以弹出警报吗?顺便说一句所有这些都是在xcode中.
我是postgreSQL的新手,令我惊讶的是,似乎没有单一的功能UTC_DATE()
来自MySQL.
我能够使用日期和时区功能的组合获得所需的结果,但我想知道最快的方法是什么.
我只想在当天00:00:00获得UTC日期部分.