Text 哪种保存字符串以检索文本跨度的最有效方法?

Text 哪种保存字符串以检索文本跨度的最有效方法?,text,data-structures,nosql,bigdata,storage-engines,Text,Data Structures,Nosql,Bigdata,Storage Engines,我需要一种在磁盘上只存储一个大文本而不将其完全加载到内存中的方法 我的查询是以文本跨度的形式进行的,例如:给我位置x和位置x+n之间的所有文本,不多不少。我没有经常修改文本 也许我需要像“持久”B树这样的东西 它还需要一些DBMS功能,如: 客户机/服务器体系结构 高速缓存系统 谢谢 它还需要一些DBMS功能,如: 那么,为什么不使用DBMS呢? 或者甚至是具有查询功能的NoSQL解决方案,比如OrientDB 我想你可以这样做 将文本分割成块(章节?段落?固定大小?) 将文本保存在包含(至

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

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

也许我需要像“持久”B树这样的东西

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

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

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

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

我想你可以这样做

  • 将文本分割成块(章节?段落?固定大小?)
  • 将文本保存在包含(至少)三个字段的表格中:
    文本(文本块)
    BEGIN(此块与全文开头的偏移量)
    END(此块从全文开头的结束偏移量)
  • 现在,您可以编写查询来提取位置x和位置x+n之间的文本

    SELECT TEXT, BEGIN END  
      FROM TEXT_TABLE  
     WHERE END >= x  
       AND BEGIN <= (x+n)  
    ORDER BY BEGIN
    
    选择文本,开始和结束
    从文本表格
    其中END>=x
    
    首先,这是一个好主意,在更改文本的情况下,我应该更新整个表,但在我的场景中这不是一个大问题。在我看来,使用如此复杂的软件来处理这个简单的查询有点奇怪。是的,查询很简单,但你说你还想要查询功能、客户机/服务器体系结构、缓存……对于mmap()(如果你碰巧住在unixland),这看起来是一个不错的任务