0

我需要一种在磁盘上只存储一个大文本而不将其完全加载到内存中的方法。

我的查询是文本跨度的形式,例如:给我位置 x 和位置 x + n 之间的所有文本,不多也不少。我没有经常更改文本。

可能我需要像“持久” B-Tree 这样的东西。

它还需要一些 DBMS 功能,例如:

  • 客户端/服务器架构
  • 缓存系统

谢谢

4

1 回答 1

0

它还需要一些 DBMS 功能,例如:...

那么,为什么不使用 DBMS 呢?甚至是具有查询功能的 NoSQL 解决方案,例如 OrientDB?

我认为你可以做这样的事情。

  1. 将文本分成块(章节?段落?固定大小?)
  2. 将您的文本保存在包含(至少)三个字段的表中:
    TEXT(文本块)
    BEGIN(该块距全文开头的偏移量)
    END(该块距全文开头的结束偏移量)

现在您可以编写查询来提取位置 x 和位置 x+n 之间的文本。

SELECT TEXT, BEGIN END  
  FROM TEXT_TABLE  
 WHERE END >= x  
   AND BEGIN <= (x+n)  
ORDER BY BEGIN

最后,您只需提取文本,执行以下操作:
- 从第一行:substring(TEXT, (x-BEGIN))
- 从“内部”行:所有 TEXT
- 从最后一行:substring(TEXT, 0, (x+ n-开始))

显然,您还应该注意“边缘情况”(结果只有一两行,请求的跨度超出范围,......)。
但我认为这种方法应该不用太多努力就可以解决你的问题。

希望能帮助到你。
再见,
拉夫

于 2013-02-16T16:59:54.597 回答