Tôi đang thiết kế một cơ sở dữ liệu đối tượng trong bộ nhớ cho trường hợp sử dụng rất cụ thể. Nó là nhà văn duy nhất, nhưng phải hỗ trợ đọc đồng thời hiệu quả. Đọc phải được cách ly. Không có ngôn ngữ truy vấn, cơ sở dữ liệu chỉ hỗ trợ:
- lấy đối tượng / -s theo thuộc tính / bộ thuộc tính (có thể có hỗ trợ cho biểu thức, ví dụ
x.count < 5
) - lấy thuộc tính của đối tượng
Một truy vấn là một tập lệnh bắt buộc bao gồm một số lượng tùy ý của các hoạt động trên. Kích thước dữ liệu sẽ là << bộ nhớ, vì vậy tất cả các đối tượng và chỉ mục trên hầu hết các thuộc tính phải vừa vặn thoải mái mà không cần trao đổi.
Cái tôi cần là một cấu trúc dữ liệu cho chỉ mục thuộc tính của đối tượng, có thể là O (n) khi ghi, không hỗ trợ ghi đồng thời, nhưng nên hỗ trợ các ảnh chụp nhanh O (1) lý tưởng (có thể sao chép trên ghi) và truy cập O (logN). Lý tưởng nhất là nó sẽ cho phép đọc đồng thời cao với việc chia sẻ cấu trúc tối đa giữa các phiên bản.
Tôi đã xem xét CTries , BST đồng thời và Cây Splay đồng thời nhưng tôi không chắc liệu tôi có thực sự nhìn đúng hướng ở đây không. Các cấu trúc trên chú ý rất nhiều đến sự phức tạp của các hạt dao mà tôi không quan tâm.
Câu hỏi : có cấu trúc dữ liệu đã biết nào phù hợp với trường hợp sử dụng của tôi không?
EDIT : sau khi suy nghĩ thêm, có vẻ như một cây BST / Splay bền bỉ sẽ hoạt động. Người viết sẽ cập nhật bản sao của 'chủ nhân' và các truy vấn sẽ lấy cây khi bắt đầu thực hiện và vứt nó đi sau khi chúng được thực hiện. Tuy nhiên, tôi vẫn quan tâm nếu có một giải pháp tốt hơn.