매우 구체적인 사용 사례를 위해 메모리 내 객체 데이터베이스를 설계하고 있습니다. 단일 작성자이지만 효율적인 동시 읽기를 지원해야합니다. 판독 값은 분리해야합니다. 쿼리 언어가 없으며 데이터베이스는 다음을 지원합니다.
- 속성 / 속성 집합별로 객체를 가져옵니다 (예 : 식을 지원할 수 있음
x.count < 5
) - 객체의 속성을 얻는다
쿼리는 위의 여러 작업으로 구성된 명령형 스크립트입니다. 데이터 크기는 << 메모리이므로 대부분의 속성에있는 모든 객체와 인덱스는 스와핑하지 않고 편안하게 맞아야합니다.
필요한 것은 쓰기의 O (n) 일 수 있으며 쓰기 동시성을 지원하지 않지만 이상적으로 O (1) 스냅 샷 (쓰기시 복사 가능) 및 O (logN) 액세스를 지원 해야하는 객체의 속성 색인에 대한 데이터 구조입니다. 이상적으로는 버전간에 최대한의 구조적 공유를 통해 읽기에서 높은 동시성을 허용합니다.
나는보고 있었다 CTries , 동시 BST를 하고 동시 스플레이 나무 하지만 난 정말 여기에 올바른 방향으로 찾고 있는지 확실하지 않습니다. 위의 구조는 내가 신경 쓰지 않는 인서트의 복잡성에 많은 관심을 기울입니다.
질문 : 사용 사례에 적합한 알려진 데이터 구조가 있습니까?
편집 : 좀 더 생각하면 지속적인 BST / Splay 트리가 작동하는 것 같습니다. 라이터는 '마스터'복사본을 업데이트하고 쿼리는 실행 시작시 트리를 가져 와서 완료된 후에 버립니다. 그러나 더 나은 솔루션이 있는지 여전히 관심이 있습니다.