Saya merancang objek database dalam-memori untuk kasus penggunaan yang sangat spesifik. Ini adalah penulis tunggal, tetapi harus mendukung pembacaan berbarengan yang efisien. Bacaan harus diisolasi. Tidak ada bahasa permintaan, database hanya mendukung:
- dapatkan objek / -s dengan atribut / set atribut (mungkin ada dukungan untuk ekspresi, misalnya
x.count < 5
) - dapatkan atribut objek
Kueri adalah skrip imperatif yang terdiri dari angka arbitrer dari operasi di atas. Ukuran data akan menjadi << memori, jadi semua objek dan indeks pada sebagian besar atribut harus sesuai dengan nyaman tanpa bertukar.
Yang saya butuhkan adalah struktur data untuk indeks atribut objek, yang dapat berupa O (n) pada tulis, tidak mendukung konkurensi tulis, tetapi harus mendukung idealnya O (1) foto (mungkin salin saat menulis) dan akses O (logN). Idealnya itu akan memungkinkan konkurensi tinggi pada bacaan dengan pembagian struktural maksimal antara versi.
Saya sedang melihat CTries , BST bersamaan dan Pohon Rentang bersamaan tapi saya tidak yakin apakah saya benar-benar melihat ke arah yang benar di sini. Struktur di atas memberi banyak perhatian pada kompleksitas sisipan yang tidak saya pedulikan.
Pertanyaannya : apakah ada struktur data yang diketahui yang cocok untuk kasus penggunaan saya di luar kotak?
EDIT : setelah memikirkan beberapa hal lagi, sepertinya pohon BST / Splay yang persisten akan berfungsi. Penulis akan memperbarui salinan 'master' dan pertanyaan akan mendapatkan pohon pada awal eksekusi dan membuangnya setelah selesai. Namun, saya masih tertarik jika ada solusi yang lebih baik.