-1

我们的项目是做一个类似堆栈溢出网站的论坛。但它是python中的命令行应用程序。我们只能使用1 GB空间的文本文件来存储所有信息(我不想使用外部依赖项)。我们的论坛包含 6 个类别。所以我有一个想法,如果我将文件分成块,那么我可以将每个类别数据存储在每个块中。如果我这样存储如何访问它。如果我出错了,请引导我以正确的方式并快速.

4

1 回答 1

1

我建议再创建一个索引文件 - 以便快速访问特定帖子。索引条目应具有以字节为单位的恒定长度,并且应对条目进行排序以便快速查找。对于索引文件中的每个条目,您需要:唯一标识符、偏移量(简单地对数据文件执行良好的旧 fseek)和帖子长度。因为不会对数据文件执行复杂的搜索,只需 fseek X 字节并读取 Y 字节,您可以安全地将每个帖子压缩(例如使用 gzip)在数据文件中。

您必须考虑的另一件事 - 帖子可能会更改还是发布后它们是不可变的?如果可以更改/编辑/删除它们,则必须对数据文件进行碎片整理和重新索引,因为:

  1. 特定帖子的长度可能会增加,需要移动其后存储的所有帖子。
  2. 特定帖子的长度可能会减少,在数据文件中留下很小的差距。
  3. 帖子可能会被删除,在数据文件中留下很大的空白。

由您选择策略:

  1. 增长的帖子可能会留在原地,触发存储在它之后的帖子的立即移动,并至少部分重新索引,或者它可能会移动到文件的末尾,暂时在它之前的位置留下一个空白。
  2. 可以通过立即进行碎片整理和重新索引来消除差距,或者可以定期安排此任务。

您论坛的大约 6 个类别:类别可以通过前 3 位(最多可以区分 8 个类别)或更安全的 4 位(最多 16 个类别)来区分。数据文件中块的恒定长度不是一个好主意,因为类别可能包含非常不同数量的内容。此外,它在查找方面并没有太大帮助。

于 2013-06-20T09:32:10.120 回答