Es kann geschätzt werden, dass die Größe jeder Datei 5G*64=300G beträgt, was viel größer ist als 4G. Daher ist es unmöglich, es zur Verarbeitung vollständig in den Speicher zu laden. Erwägen Sie einen „Teile-und-herrsche“-Ansatz.
Durchlaufen Sie die Datei a, erhalten Sie Hash(URL) 00 für jede URL und speichern Sie dann die URL in 1000 kleinen Dateien (eingestellt auf a0,a1,...a999). Auf diese Weise beträgt die Größe jeder kleinen Datei ungefähr 300 MB. Durchlaufen Sie die Datei b und speichern Sie die URLs in 1000 kleinen Dateien (b0, b1...b999) auf die gleiche Weise wie a. Nach dieser Verarbeitung befinden sich alle möglichen identischen URLs in den entsprechenden kleinen Dateien (a0 vs. b0, a1 vs. b1...a999 vs. b999) und nicht entsprechende kleine Dateien (z. B. a0 vs b99) Es ist unmöglich, dieselbe URL zu haben. Dann müssen wir nur noch die gleiche URL in 1000 Paaren kleiner Dateien finden.
Zum Beispiel können wir für a0 vs. b0 a0 durchlaufen und die URL in hash_map speichern. Dann durchqueren Sie b0. Wenn sich die URL in der hash_map befindet, bedeutet dies, dass diese URL sowohl in a als auch in b vorhanden ist.
Wenn die aufgeteilten kleinen Dateien ungleichmäßig sind und einige kleine Dateien zu groß sind (z. B. größer als 2G), können Sie erwägen, diese zu großen kleinen Dateien auf ähnliche Weise in kleine Dateien aufzuteilen
Gestern hat mich der Baidu-Interviewer gebeten, es heute zu studieren
Oben werden die beiden angegebenen Dateien a und b vorgestellt, von denen jede 5 Milliarden URLs speichert, jede URL 64 Bytes belegt und die Speichergrenze 4 GB beträgt. Wie finde ich die gemeinsamen URLs der Dateien a und b? Ich hoffe, dass es Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird, einschließlich relevanter Inhalte.