我需要一种方法,只在磁盘上存储一个大文本,而不将其完全加载到内存中。
我的查询是以文本跨度的形式出现的,例如:给我位置x和位置x+n之间的所有文本,不多不少。我不经常更改文本。
也许我需要一个"持久"的B树。
它还需要一些DBMS功能,如:
- 客户端/服务器体系结构
- 高速缓存系统
感谢
它还需要一些DBMS功能,如:。。。
那么,为什么不使用DBMS呢?甚至是像OrientDB这样具有查询功能的NoSQL解决方案?
我想你可以做这样的事。
- 将文本分成块(章节?段落?固定大小?)
- 将文本保存在包含(至少)三个字段的表中:
TEXT(文本块)
BEGIN(此区块距全文开头的偏移量)
END(此区块距全文开头的结束偏移量)
现在,您可以编写查询来提取位置x和位置x+n之间的文本。
SELECT TEXT, BEGIN END
FROM TEXT_TABLE
WHERE END >= x
AND BEGIN <= (x+n)
ORDER BY BEGIN
最后,你只需要提取你的文本,比如:
-从第一行开始:子字符串(TEXT,(x-BEGIN))
-从"内部"行:所有TEXT
-从最后一行开始:子字符串(TEXT,0,(x+n-BEGIN))
显然,您还应该注意"边缘情况"(结果只有一两行,请求的跨度超出范围,…)。
但我认为这种方法应该不用太多努力就能解决你的问题。
希望能有所帮助
再见,
Raf