我需要一种方法来在磁盘上只存储一个大文本,而不将其全部加载到内存中。哪种方法可以持续检索文本跨度的字符串?
我的查询采用文本跨度的形式,例如:给我位置x和位置x + n之间的所有文本,不多也不少。我没有经常更改文字。
可能我需要像“持久”B树。
它还需要一些DBMS特性,如:
- 客户机/服务器体系结构
- 缓存系统
感谢
我需要一种方法来在磁盘上只存储一个大文本,而不将其全部加载到内存中。哪种方法可以持续检索文本跨度的字符串?
我的查询采用文本跨度的形式,例如:给我位置x和位置x + n之间的所有文本,不多也不少。我没有经常更改文字。
可能我需要像“持久”B树。
它还需要一些DBMS特性,如:
感谢
它还需要一些DBMS的功能如:...
那么,你为什么不使用DBMS? 甚至是一个具有查询功能的NoSQL解决方案,比如OrientDB?
我想你可以做这样的事情。
现在你可以写你的查询来获取位置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))
显然,您还应该照顾“边缘情况”(结果只有一行或两行,请求跨度超出范围。 ..)。
但我认为这种方法应该可以解决您的问题,而不需要太多的努力。
希望它有帮助。
再见,
拉夫
这是一个好主意,改变文本的情况下,我应该更新整个表,但在我的情况下这不是一个大问题。对于我来说,使用这么复杂的软件来处理这个简单的查询看起来有点奇怪。 – 2013-02-16 17:30:30
是的,查询很简单,但你说你还想查询功能,客户端/服务器体系结构,缓存...... – Raf 2013-02-16 18:12:41
看起来像一个不错的任务mmap()的(如果你碰巧住在unixland) – wildplasser 2013-02-16 18:42:04