【发布时间】:2013-05-15 13:38:44
【问题描述】:
我想对大约 20M 行的大文件进行排序:
- 团队名称和升序
- 然后按最高分递减。
这样我就可以获得每支球队得分最高的球员。
我想考虑系统的资源。所以...
- 有没有办法在不将所有数据放入 Perl 中的哈希/数组的情况下做到这一点?
- 我们可以使用 Unix/Linux 排序实用程序来执行此操作吗?
如果是这样,你能告诉我怎么做吗?
我的输入文件大约有 20M 行,格式如下
Chicago Bulls|Michael Jordan|38
LA Lakers|Kobe Bryant|32
Chicago Bulls|Steve Kerr|16
LA Lakers|Paul Gasol|20
LA Lakers|Shaquile ONeal|19
Chicago Bulls|Scottie Pippen|23
.
.
.
【问题讨论】:
-
使用数据库,它们是为此类任务而设计的。 :)
-
实际上我是从 MySQL 数据库中获取这些数据的。但 DBA 反驳说最好在 App 层完成。在 MySQL 中用于对团队中的每个球员进行排名并获得每个团队的前 3 名得分手的 SQL 具有子查询、排序依据、拥有......等等,DBA 正在推动这些。
-
考虑更换 DBA。这是半个笑话,但说真的,我不希望 DBA 会给出这样的答案。
-
数据似乎已经按分数(第 3 列)排序,是这样吗?如果是这样,您只需要第一列的稳定排序:
sort -s -t\| -k1 file.in -
根据this page on dev.mysql.com 很简单:
SELECT team, name, score FROM basketball ORDER BY team, score DESC;。如果这足以导致您的数据库明显变慢,则说明它有问题。