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ı
cevap
Sen ehcache gibi bir şey ve bunun overflowToDisk seçeneği deneyebilirsiniz
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
çok uzun olacak, çünkü sana örnek kod post olmaz, ancak bu daha önce yaptım nasıl:
- uzatın
LinkedBlockingQueue
. offer
,put
,poll
,take
veremove
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.- 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). - 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.
- 1. Java Koleksiyonları (LIFO Yapısı)
- 2. Java Commons Koleksiyonları removeAll
- 3. Java/Scala (derinlik) koleksiyonları birlikte çalışabilirlik
- 4. NHibernate Eager Yükleme Koleksiyonları + Sayfa Gösterimi
- 5. Scala koleksiyonları
- 6. İki Koleksiyonları
- 7. Java'nın WeakReference ilgili sorular ve Koleksiyonları Birkaç java
- 8. Lombok @Builder başlatılıyor değil koleksiyonları
- 9. Java koleksiyonları neden uygun bir harita yöntemi sunmuyor?
- 10. Java jeneriklerini koleksiyonları döndüren arabirimlerde kullanma. En iyi pratik? Tuzaklar?
- 11. App.config için Özel Yapılandırma - bölümlerin koleksiyonları?
- 12. java Koleksiyonları kullanarak farklı nesne türlerini karşılaştırın ve sıralayın
- 13. Linux: Stat çalışması için Sabit Disk Statüsü
- 14. Linux'ta düşük seviye disk işlemleri C++ için
- 15. Java kullanarak sabit disk boyutunu ve boyutunu nasıl edinirim?
- 16. Yalnızca yazma koleksiyonları MongoDB
- 17. Eclipse ayıklayıcı ve koleksiyonları
- 18. laravel koleksiyonları mapWithKeys
- 19. SimpleXML çerçeve - gömülü koleksiyonları
- 20. Oracle'da koleksiyonları birleştirme?
- 21. Clojure koleksiyonları üzerindeki işlemler
- 22. Firestore sorgu alt koleksiyonları
- 23. Scala'da koleksiyonları sıralama
- 24. Docker - Disk Kotaları
- 25. Kalıcı Disk Boyutunu Azalt
- 26. Linux Sunucusunda Disk Alanı
- 27. Çalışma zamanında bir dizi türü verilen bir Java dizisi nasıl oluşturulur? Java koleksiyonları çerçevesinde
- 28. Backbone js koleksiyonları koleksiyon sorunu
- 29. DOM çocuk koleksiyonları - fark nedir?
- 30. JPA hevesli yükleme FetchType.LAZY çocuk koleksiyonları
Tam olarak aradığınız şey tam olarak değil, Hadoop'a bakın http://hadoop.apache.org/ – saugata
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