替换大文件中的字符串

时间:2012-09-28 12:35:29

标签: c++ io

我有一个服务器客户端应用程序,客户端可以编辑存储在服务器端的文件中的数据。问题是文件太大,无法将其加载到内存中(8gb +)。连接的客户端每秒可能会有大约50个字符串替换。因此,复制整个文件并用新的替换指定的字符串是不可能的。

我正在考虑在服务器端保存缓存中的所有更改,并在达到一定数量的数据后执行所有替换。达到该数据量后,我将通过以小块复制文件并替换指定的部分来执行更新。

这是我提出的唯一想法,但我想知道是否可能有其他方式或我可能遇到的问题。

2 个答案:

答案 0 :(得分:2)

如果同时由多个用户编辑的数据超过8GB,则远远超出了使用flatfile处理的数据。

您真的需要将此数据移动到数据库中。关于你的评论“文件内容不适合数据库”:抱歉,但我不相信你。特别是关于“很多人可以编辑它”的说法 - 这是使用数据库的另一个原因。在文件系统上,一次只有一个用户可以对文件具有写访问权。但是数据库允许多个用户进行并发写访问。

当您打开一个新问题时,我们可以帮助您提出数据库架构,告诉我们您的数据是如何准确构建的,以及您的用例是什么。

答案 1 :(得分:1)

你可以对你的数据使用某种形式的索引(在一个单独的文件中),以便快速访问这个巨大文件的相关部分(我们已经成功地使用大文件(~200-400gb),但是正如Phillipp所说,你应该将数据移动到数据库中,特别是对于读/写访问。一些框架(如OSG)已经附带了3d地形数据的数据库后端,所以你可以看一下,如何他们这样做。