Lucene可以在索引中存储超过100Gb的原始文档吗?

时间:2013-11-09 11:52:15

标签: lucene.net lucene

我正在编写的应用程序将使用超过 100Gb 文本文档进行操作。每个文件的大小为2Kb-100Kb。

起初我应该使用DBMS (例如MySQL或Firebird)来存储具有存储索引的原始文档在lucene的索引中。这种方法有一些缺点。例如,数据库事务对lucene索引一无所知,反之亦然。所以我需要同步它们。

然后我猜想Lucene可以将整个文档存储在索引中。所以我需要定期创建索引的备份。但它很容易:我可以用索引复制整个目录。我使用某种No SQL存储(即Lucene)。我可能不使用DBMS。

最佳做法是:将原始文档存储在索引中还是不存储?我真的不想将DBMS用于此目的。有可能吗?

1 个答案:

答案 0 :(得分:3)

您不希望将原始文档存储在Lucene索引中,尤其是您正在讨论的大小。我已经做了几个这样的方法,但两者都只存储Lucene索引中的索引字段,并且你有一个指向原始文档的ID /指针。我已经处理了超过1亿条记录的索引,并且它们在单个服务器上运行良好。

这一点很重要的原因是,如果您不需要再存储100 GB的数据,索引的构建时间和索引的可管理性会大幅下降。

基本上,您需要索引搜索/满足搜索查询所需的所有字段。如果用户点击网格中的项目,我假设您要显示原始文本(UI模式是大多数时候您将访问许多Lucene字段,但RARELY需要下拉完整的二进制文本文件)。

我与Lucene一起使用的原始访问权限是:

  • SQL Server FILESTREAM,针对大型二进制文件存储进行了优化。它真的很快。不确定MySQL是否具有此功能(从未使用过它)
  • Azure Table Storage,这是一个键值NoSQL云数据库。那用于存储二进制blob。

持久存储是什么并不重要,只要它针对可以基于密钥快速访问/流传输的较大二进制文件进行优化。只要Lucene具有访问二进制文本文件的ID指针,您就可以使用像Redis这样的内存缓存。