2010-03-10 23 views
10

Bir işlem sırasında oluşturulan çok büyük Listeler ve Kümeler nedeniyle Java'da belleğim bitmek üzereyim ve işlemin sonunda sadece bir kez yineleniyor. Koleksiyon boyutu belirli bir eşiği aştığında, seri hale getirilebilir içeriğini diskte biriktirebilen Java koleksiyonları sağlayan herhangi bir kitaplık var mı?Disk için biriktiren Java koleksiyonları

+0

Tam olarak aradığınız şey tam olarak değil, Hadoop'a bakın http://hadoop.apache.org/ – saugata

+1

Bunun için standart bir RDBMS kullanmamanızın bir nedeni var mı? Bir bakıma, sorduğun şeyin tanımı. Hatta h2db, sqlite gibi hafif olanların çoğu görevde kalıyordu. – dpb

cevap

4

Sen ehcache gibi bir şey ve bunun overflowToDisk seçeneği deneyebilirsiniz

+0

Bildiğim kadarıyla Ehcache, (yalnızca + kaldır) öğelerini önbellekten yoklayan mantığa sahip değil, yalnızca belgelere göre #get() yöntemlerini görüyorum. Belki de böyle bir işlevi ehcache kullanarak nasıl uygulayabilirim biliyor musunuz? – MeetJoeBlack

4

çok uzun olacak, çünkü sana örnek kod post olmaz, ancak bu daha önce yaptım nasıl:

  1. uzatın LinkedBlockingQueue.
  2. offer, put, poll, take ve remove yöntemlerini geçersiz kılın. Örnek: superclass 'offer, false (kapasite ulaşıldı) değerini döndürürse, ve Diske serileştirmeye başlarım.
  3. Benzer şekilde, take uygulamasında, bellekte herhangi bir mevcut öğeniz olup olmadığını kontrol edersiniz, eğer değilse ve diskten okumaya başlarsınız (ve şimdi okunan ilk kaydı kaldırır; ya da kayıtları toplu olarak okuyabilirsiniz, elbette).
  4. Böyle bir sıranın her bir örneğini dosya sistemi güvenli tanımlayıcısı atayın, böylece dosya sistemi için güvenli dosya adı oluşturmak için kullanabilirim. Ayrıca, daha fazla almak gerekirse, muhtemelen geçerli kullanıcının ana dizini, bu sıraların disk üzerine serileştirilmesi için bir yer olarak kullanırdım. Disk-tefrika kuyruğun

Bu şekilde,% 99 hazır ve sadece tam olarak doğru noktalarda ekstra işlevsellik koydu. Java'nın BlockingQueue arayüzünün dokümantasyonunu iyice okumanız gerekecek, ama hey, bu sizin zamanınıza değecek çünkü ihtiyacınız olan az sayıdaki işlevselliği sadece sıfırdan yazmanız yeterli olacaktır.

Bu yardımcı olur umarım.

İlgili konular