2017-10-20 43 views
0

要求:可预测地拆分数据结构的算法,无论它构建的顺序

我正在给构建Solr索引的程序添加一个特性。系统是多线程的,所以搜索条目每次都会随机创建。 Solr索引也需要拆分为多个文件,因为如果用户试图上传一个大文件,服务器可能会耗尽内存。

问题:

为了保持系统可靠,使事情变得更容易整体,产生的Solr的索引文件必须是相同的,无论他们是在处理什么样的顺序该指数需要平衡。跨文件(或足够接近平衡),并有最大数量的条目。如果文件超出了最大条目数量,则需要将其分割。这些文件也将在运行中更新,因此将添加,删除和更改条目。

只需要什么:

我在寻找一个可以为这些要求采用的算法。我想我需要某种B树,但我不知道任何适合这个特定要求的B树变体。

有没有可以帮助满足这些要求的算法或数据结构?

+0

“Solr索引文件需要相同”是什么意思?你的意思是说,不管他们处理的顺序如何,这些文件必须是相同的?或者,文件的内容一旦被读取和处理后,必须创建相同的结果? –

+0

默认的Lucene索引文件只能追加,所以如果你以不同的顺序添加东西,你会得到不同的文件(内部docid也会不同)。您可以创建自己的编解码器来自己序列化和反序列化内容。如果你有这些要求,你可以扩展吗?您是否在Solr之外建立了Lucene索引,并且您如何构建它?你可以在磁盘和内存中创建一个结构,然后按顺序将该结构序列化为Lucene?在这种情况下,每个线程中都有一个二叉树,然后将其合并到磁盘。 – MatsLindh

+0

通过“索尔索引文件需要是相同的”,我的意思是文件本身必须是相同的。这些要求是为了证明程序的可靠性和完整性。我不知道Solr索引是如何创建的,因为我们没有进行规划。不过,我可以说这些文件将采用JSON格式。只要结果文件一致,我们就可以在磁盘和内存中创建结构。 – user489481

回答