Çok özel bir kullanım durumu için bir bellek içi nesne veritabanı tasarlıyorum. Tek bir yazardır, ancak verimli eşzamanlı okumaları desteklemesi gerekir. Okumalar izole edilmelidir. Sorgu dili yoktur, veritabanı yalnızca şunları destekler:
- özniteliğe / öznitelik kümesine göre nesne / -s alma (ifadeler için destek olabilir, ör.
x.count < 5
) - nesnenin niteliğini al
Sorgu, yukarıdaki işlemlerden rasgele bir sayıdan oluşan zorunlu bir komut dosyasıdır. Veri boyutu << bellek olacaktır, bu nedenle özelliklerin çoğundaki tüm nesne ve indeksler değiştirilmeden rahatça sığmalıdır.
Ne ihtiyacım var yazma nesneler, yazma eşzamanlılık desteklemiyor, ancak ideal O (1) anlık görüntüleri (belki yazma üzerine kopya) ve O (logN) erişimi desteklemelidir nesnenin öznitelik dizini için bir veri yapısıdır. İdeal olarak, sürümler arasında maksimum yapısal paylaşım ile okumalarda yüksek eşzamanlılığa izin verir.
Ben bakıyordum CTries , Eşzamanlı BSTS ve Eşzamanlı Splay Ağaçlar ama gerçekten burada doğru yönde arıyorum olmadığından emin değilim. Yukarıdaki yapılar, umursamadığım eklerin karmaşıklığına çok dikkat ediyor.
Soru : Kullanım durumum için kutudan çıktığı bilinen bir veri yapısı var mı?
EDIT : biraz düşündükten sonra kalıcı bir BST / Splay ağacı işe yarayacak gibi görünüyor. Yazar, 'ana' kopyayı güncelleyecek ve sorgular yürütme başlangıcından itibaren ağacı alacak ve bittikten sonra onu atacaktı. Ancak, daha iyi bir çözüm olup olmadığı konusunda hala ilgileniyorum.