ホームページ  >  記事  >  バックエンド開発  >  100 万件のレコードを含むテキスト ファイルから、重複が最も多い上位 10 件のレコードを抽出します。

100 万件のレコードを含むテキスト ファイルから、重複が最も多い上位 10 件のレコードを抽出します。

WBOY
WBOYオリジナル
2016-06-23 13:26:341644ブラウズ

1. 100 万レコードのテキスト ファイルから、重複が最も多い上位 10 件を抽出します。
サンプルテキスト:
098
123
234
789
……
234
678
654
123

アイデアを探しています


ディスカッションに返信(解決策)

テーブルにインポートして使用しますSQL統計、それが可能かどうかはわかりません。あなたが試すことができます。

それをテーブルにインポートしてから、統計に SQL を使用することが可能かどうかはわかりません。あなたが試すことができます。


これは確かに実現可能ですが、質問者が望んでいた解決策ではないかもしれません。 PHP処理やアルゴリズムを使いたい場合

explode //配列に分割して読み込む
array_count_values//繰り返し回数をカウントする
arsort//ソートして結果を取得する

テキストをチャンクで処理して記録できる

テキストをチャンクに処理して、その結果を記録することができます。一度にすべてを記憶すると、記憶に保持できなくなります...


さて、あなたの方法は一般常識に基づいていますが、詳しく説明してもらえますか?

$fp = fopen('文件', 'r');while($buf = fgets($fp)) {  $res[$buf]++;}fclose($fp);arsort($res);$res = array_keys(array_slice($res, 0, 10));print_r($res);

100 万件のレコードの半分が一意である場合、以下のアルゴリズムとあまり違いはありません
$a = file('文件');$res = array_count_values($a);arsort($res);$res = array_keys(array_slice($res, 0, 10));print_r($res);

まずバッチでデータベースに挿入し、次に SQL ステートメントの group by と order by を使用して実装します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。