我们有我们的内部 noSQL 数据库,它基本上将所有内容存储在一个紧凑的二进制文件中。现在,我需要一个类似于键值存储或 B+Tree 的数据结构。在我的情况下,问题是“价值”可以是不同的类型,并且大小非常不稳定,可能从 1Kb 到 1-2Gb。通常,键是字符串,值是数据流,可以是 int、string 或自定义类型的流。
我正在考虑实现 B+ 树,但这并不容易,因为 B+ 树需要“值”的类型相同,并且“值”的大小应该足够小,可以存储在相对较小的块中。可能有一个变体,但我没有找到关于如何实现 B+ 树的教程,其中包含显示如何存储在磁盘上的示例。我看到的大部分教程都只是内存中的 B+ 树。
然后我有了使用文件夹/文件名作为键的想法。然后该值可以是文件中的任何内容。然后值可以是任意大小,这就是我想要的。所以我的问题在这里,在极端情况下,
- 不同日期的数据存储在单独的文件夹中
- 我可以有 1M-50M 密钥(实际上是文件/文件夹)在磁盘上存储一天
- 对文件的数据操作通常是“只读”的,白天是“附加到”的。历史数据永远不会被修改。
我已经看到我可以在现代操作系统上拥有约 40 亿个文件,因此我对这种在单台机器上存储约 2 年的方法感到满意。我只是担心这种实现键值存储的方式是否非常糟糕?为什么?处理文件系统时我会遇到什么问题?(例如,Windows 上的框架磁盘?)
所有都在 Windows/Linux 中用 C++ 实现。