数据结构-这是保持字符串以检索文本跨度的最有效方法



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

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

也许我需要一个"持久"的B树。

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

  • 客户端/服务器体系结构
  • 高速缓存系统

感谢

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

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

我想你可以做这样的事。

  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

最后,你只需要提取你的文本,比如:
-从第一行开始:子字符串(TEXT,(x-BEGIN))
-从"内部"行:所有TEXT
-从最后一行开始:子字符串(TEXT,0,(x+n-BEGIN))

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

希望能有所帮助
再见,
Raf

最新更新