良好的快照表数据结构可用于内存索引
我正在为一个非常特殊的用例设计内存对象数据库。它是单个编写器,但必须支持有效的并发读取。读取必须隔离。没有查询语言,数据库仅支持: 通过属性/属性集获取对象(例如,可能支持表达式x.count < 5) 获取对象的属性 查询是命令脚本,由任意数量的上述操作组成。数据大小将是<< <<内存,因此大多数属性上的所有对象和索引都应舒适地容纳而无需交换。 我需要的是对象属性索引的数据结构,该数据结构在写入时可以为O(n),不支持写入并发,但理想情况下应支持O(1)快照(可能在写入时进行复制)和O(logN)访问。理想情况下,这将允许读取时具有高并发性,并在版本之间实现最大的结构共享。 我当时在看CTries,并发BST和并发Splay 树,但是我不确定我是否真的在朝正确的方向看。上面的结构非常关注我不关心的插入物的复杂性。 问题:是否有一个现成的数据结构适合我的用例? 编辑:经过更多思考之后,似乎持久的BST / Splay树将起作用。编写者将更新“主”副本,查询将在执行开始时获得该树,并在完成后将其丢弃。但是,我仍然对是否有更好的解决方案感兴趣。