2013-02-15 76 views
0

我需要一种方法来在磁盘上只存储一个大文本,而不将其全部加载到内存中。哪种方法可以持续检索文本跨度的字符串?

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

可能我需要像“持久”B树。

它还需要一些DBMS特性,如:

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

感谢

+0

看起来像一个不错的任务mmap()的(如果你碰巧住在unixland) – wildplasser 2013-02-16 18:42:04

回答

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 

Finaly你只提取你的文本做这样的事情:
- 从第一行:子(文字,(X-BEGIN))
- 从 “内部” 行:所有文本
- 从最后一行开始:子字符串(TEXT,0,(x + n-BEGIN))

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

希望它有帮助。
再见,
拉夫

+0

这是一个好主意,改变文本的情况下,我应该更新整个表,但在我的情况下这不是一个大问题。对于我来说,使用这么复杂的软件来处理这个简单的查询看起来有点奇怪。 – 2013-02-16 17:30:30

+0

是的,查询很简单,但你说你还想查询功能,客户端/服务器体系结构,缓存...... – Raf 2013-02-16 18:12:41

相关问题