Я проектую базу даних об'єктів пам'яті для дуже конкретного випадку використання. Це один автор, але повинен підтримувати ефективні паралельні читання. Читання повинні бути ізольовані. Мова запитів відсутня, база даних підтримує лише:
- отримати object / -s за атрибутом / набором атрибутів (може бути підтримка виразів, наприклад
x.count < 5
) - отримати атрибут об'єкта
Запит - це імперативний сценарій, що складається з довільної кількості вищезазначених операцій. Розмір даних буде << пам'яттю, тому всі об'єкти та індекси на більшості атрибутів повинні зручно розміщуватися, не змінюючи місцями.
Мені потрібна структура даних для індексу атрибутів об'єкта, який може бути O (n) при записі, не підтримує одночасність запису, але в ідеалі повинен підтримувати O (1) знімки (можливо, копіювати при запису) та O (logN) доступу. В ідеалі це дозволило б забезпечити високу конкурентоспроможність для читання з максимальним структурним обміном між версіями.
Я дивився на CTries , паралельні BST та паралельні дерева Splay , але я не впевнений, чи справді я дивлюсь у правильному напрямку. Вищезазначені структури приділяють багато уваги складності вставок, які мене не цікавлять.
Питання : чи є відома структура даних, яка найкраще підходить для мого випадку використання?
EDIT : після продумування ще здається, що стійке дерево BST / Splay спрацює. Письменник оновлює "головну" копію, і запити отримають дерево на момент початку виконання та викинуть його після того, як вони будуть виконані. Однак мене все ще цікавить, чи є краще рішення.