LMDB

2016-03-23 16 views
2

ile bellek veritabanlarında, yüz milyonlarca küçük kayıt için BerkelyDB'yi anahtar değer deposu olarak kullanan bir projem var.LMDB

Kullanılma şekli, tüm değerlerin veritabanına eklenmesi ve daha sonra bunların tek bir iş parçacığından gelen sıralı ve rasgele erişim kullanılarak yinelendiği yöntemdir.

BerkeleyDB ile, "hiçbir zaman diskte saklanması amaçlanmamış" in-memory databases oluşturabilirsiniz. Veritabanı BerkeleyDB önbelleğine sığacak kadar küçükse, hiçbir zaman diske yazılmaz. Önbellekten büyükse, taşmayı tutmak için geçici bir dosya oluşturulur. Bu seçenek, veritabanımı kapatırken uygulamamın gigabaytlarca ölü veriyi diske yazmasını önlediğinden, işleri önemli ölçüde hızlandırabilir.

BerkeleyDB yazma performansının bir SSD'de bile çok zayıf olduğunu buldum, bu yüzden LMDB'a geçmek istiyorum. Ancak, documentation, dayanarak kalıcı olmayan bir veritabanı oluştururken bir seçenek yok gibi görünüyor.

Kalıcılık veya eşzamanlı erişime önem vermiyorsam LMDB'den en iyi performansı almak için hangi yapılandırma/seçenek kombinasyonlarını kullanmalıyım? yani geçici destek diski depolaması ile bir "bellek içi veritabanı" gibi davranmasını sağlamak için?

cevap

1

Sadece MDB_NOSYNC kullanın ve asla mdb_env_sync() öğesini çağırın. Ayrıca MDB_WRITEMAP'ı da kullanabilirsiniz. OS hala kirli sayfaları diske akıtacak; Bu davranışı kontrol etmek için/proc/sys/vm/dirty_ratio vb. ile oynayabilirsiniz. Bu yayına itibaren

+0

Bu veritabanı kapatıldığında her şeyin diske yazılmasına neden olacağını düşünüyorum. Tamamen bellekte bir veritabanı için, bu işlem tüm işlemleri önemli ölçüde yavaşlatır. –

+0

Anlamsız. Bir dosyayı kapatmak dosyayı temizlemez. OS kapanmadan önce dosyaları kapatır ve silerseniz, hiçbir şey yazılmaz. – hyc

+0

Sadece tamlığı sağlamak için, Linux'taki çoğu (tümü olmasa da) durum için doğru sizsiniz. Ancak bu, diğer işletim sistemleri için veya hatta tüm dosya sistemleri için geçerli değildir. Tthere, Mac OS X'de bazı durumlarda 'close()' engellemenin bazı kanıtlarıdır. Kaynak: http://blog.libtorrent.org/2012/10/asynchronous-disk-io/ Tüm bu tür hileler gibi Aslında sizin için çalışıp çalışmayacağını görmek için denemelisiniz. –