Java 在大内存B+;指数
我目前正在设计一个大内存索引结构(几GB)。索引实际上是一个RTree,其中叶子是Btree(不问)。它支持特殊查询并将其推到逻辑极限 由于这些节点是单独的搜索节点,我问自己如何最好地使其并行 到目前为止,我知道六种解决方案:Java 在大内存B+;指数,java,multithreading,concurrency,b-tree,concurrentmodification,Java,Multithreading,Concurrency,B Tree,Concurrentmodification,我目前正在设计一个大内存索引结构(几GB)。索引实际上是一个RTree,其中叶子是Btree(不问)。它支持特殊查询并将其推到逻辑极限 由于这些节点是单独的搜索节点,我问自己如何最好地使其并行 到目前为止,我知道六种解决方案: 块在计划写入时读取。树被完全阻塞,直到最后一次读取完成,然后执行写入,写入后,树可以再次用于多次读取。(读取不需要锁定) 克隆节点以更改和重用现有节点(包括leaf),并通过再次停止读取切换和完成来在两者之间切换。由于必须更改叶指针,因此叶指针可能会成为它们自己的集合,从
通过对内部节点进行双缓冲(这不难实现,成本也不高)(noone回答说大约),我想总结一下我们(I)终于有了。结构现在被分离了。我们有一个RTree,它的叶子实际上是表。这些表甚至可以是远程的,所以我们有一种分发方式,由于RMI和代理,这种分发方式基本上是透明的 剩下的很简单。RTree可以建议一个表拆分,而这个拆分又是一个表。这个拆分是在一个单独的主机上完成的,如果它必须是远程的,则会转移到另一个主机上。Merge几乎是类似的 对于绑定到不同CPU的线程,此远程也适用,以避免缓存问题 关于内存中的修改,正如我已经建议的,我们复制内部节点和