2011-06-11 14 views

cevap

14

Java, sorununuz için daha büyük bir çözümün parçası olarak kullanılabilecek genel amaçlı bir sıralama yordamı sağlar. bellekteki tüm fit için çok büyük olduğunu verileri sıralamak için ortak bir yaklaşım şudur:

1) ana belleğe sığacak şekilde en o 1 Gb (o 1 Gb

2) Quicksort diyelim, fazla veri okuyun Eğer Koleksiyonları çerçevesinden Java'nın yerleşik tür) Eğer ettik kadar "yığın-1"

4) 1-3 adımlarını tekrarlayın olarak diske 1 Gb sıralanmış

3) Yazma kullanmayı tercih ediyorum nerede burada Tüm verilerden geçerek, her bir veri yığınını ayrı bir dosyada kaydedebilirsiniz. Eğer orijinal verileriniz 9 Gb ise, şimdi 9 sıralı "chunk-1" etiketli "chunk-9" etiketli veri parçasına sahip olacaksınız.

5) Artık 9 sıralı parçaları birleştirmek için son birleştirme sıralamalarına ihtiyacınız var. tamamen sıralanmış tek bir veri kümesine. Birleştirme sırası, bu önceden sıralanmış parçalara karşı çok verimli çalışacaktır. Temelde 9 dosya okuyucusu (her bir yığın için bir tane) artı bir dosya yazıcısı (çıktı için) açılacaktır. Daha sonra her bir okuma dosyasındaki ilk veri elemanını karşılaştırır ve çıktı dosyasına yazılan en küçük değeri seçer. Seçilen değerin geldiği okuyucunun bir sonraki veri elemanına ilerlemesi ve en küçük değeri bulmak için 9 yollu karşılaştırma işleminin tekrarlanması, yine çıktı dosyasına cevap yazılmasıdır. Bu işlem, tüm veriler tüm yığın dosyalarından okunana kadar tekrarlanır. 5. adım bitirdiniz tüm verileri okuma bittikten sonra

6) - çıktı dosyası şimdi tam Sıralanan veri bu yaklaşımla kolayca kendi genel bir "megasort" programı yazabilirsiniz ile

set içerir Bir dosya adı ve maxMemory parametresi alır ve temp dosyalarını kullanarak dosyayı verimli bir şekilde sıralar. Bahse girerim ki, bunun için en az birkaç uygulama bulabilirsin, ama eğer yapmazsan, sadece yukarıda açıklandığı gibi kendi kendine dönebilirsin.

+2

Bu yöntemle ve Java kodu da dahil olmak üzere bir makale buldum: http://www.codeodor.com/index.cfm/2007/5/10/Sorting-really-BIG-files/1194 – Franck

0

Büyük veri kümelerini işlemenin en yaygın yolu bellektir (bu günlerde 1 TB'lık bir sunucu satın alabilirsiniz) veya bir veritabanında.

Bir veritabanı kullanmıyorsanız (veya daha fazla bellek satın alırsanız), kolayca kendiniz yazabilirsiniz.

Map-Reduce işlevlerini gerçekleştiren yardımcı olabilecek kütüphaneler vardır, ancak kaydettiklerinden daha fazla karmaşıklık ekleyebilirler.

İlgili konular