2013-08-19 16 views
9

Haritalanmış/sıraya alınması gereken milyarlarca Nesneyi ele alan bir projede MapDB kullanıyorum. Program bittikten sonra herhangi bir kalıcılığa ihtiyacım yok (MapDB veritabanları geçicidir). Programın olabildiğince hızlı çalışmasını istiyorum, ancak docs'u okuduktan sonra bile MapDB'nin commit() işlevini (performansla ilgili olduğunu varsayalım) karıştırdım. Sorularım:MapDB'yi verimli bir şekilde kullanma (işlemlerle ilgili karışıklık)

  1. Tam olarak ne yapar? Çalışma anlayışım, Objects'ı yığından diske seri hale getirerek yığın alanını serbest bırakmasıdır. Bu doğru mu?

  2. Sadece işlenen Objects başvurularına ne olur?

Sonuçta ben kadar verimli elimden geldiği kadar MapDB nasıl kullanılacağını bilmek istiyorum (? MapDB bu şeffaf hale ile) onlar GC ile temizleyelim ya da 'referansı' nasılsa diskte bir nesne yapmak mı, ama Bunu ne için taahhüt() olduğunu bilmeden yapamam. MapDB'yi verimli bir şekilde kullanmak için sahip olabileceğiniz diğer tavsiyeleri takdir ediyorum.

cevap

2

commit işlemi, veritabanı sistemindeki gibi, transactions numaralı işlemdir. MapDB, işlemleri gerçekleştirir, bu nedenle commit etkin bir şekilde 'bu DB'ye yaptığım değişiklikleri kalıcı ve diğer kullanıcılara görünür kılar'. Ücretsiz işlem, geçerli işlemde yaptığınız tüm değişiklikleri içeren rollback'dur. Commit (doğrudan) hafızada olanı ve olmayanı etkilemez. Yığın alanını geri almaya çalışıyorsanız, compact() yerine bakmak isteyebilirsiniz.

İkinci sorunuz için, bir nesneyi güçlü bir referansa tutuyorsanız, o zaman bu güçlü referansı kullanmaya devam edersiniz. MapDB sizin için silmeyecek. MapDB'yi çoğu zaman normal bir Java Haritası olarak düşünmelisiniz. get'u aradığınızda MapDB, bellekte mi yoksa diskte mi olduğunu gizler ve yalnızca alınan nesneye kullanılabilir bir başvuru döndürür. Geri alınan nesne, başka bir şey gibi, çöp haline gelene kadar hafızada takılır.

İlgili konular