【发布时间】:2013-03-20 13:18:30
【问题描述】:
我正在开发一个应用程序,我们正在其中编写大量的键值对。在生产环境中,数据库大小将达到数百 TB,甚至数 PB。密钥为 20 字节,值最大为 128 KB,很少小于 4 KB。现在我们正在使用 MongoDB。性能不是很好,因为显然这里有很多开销。 MongoDB 写入文件系统,该文件系统写入 LVM,该 LVM 进一步写入 RAID 6 阵列。
由于我们的要求非常基本,我认为使用通用数据库系统会影响性能。我正在考虑实现一个简单的数据库系统,我们可以将文档(或“值”)直接放入原始驱动器(实际上是 RAID 阵列),并存储密钥(以及指向原始值所在位置的指针)驱动器)在由 SSD 支持的快速内存数据库中。这也将加快读取速度,因为不会有碎片(与使用文件系统相反)。
虽然文档很少被删除,但我们仍然需要在设备上维护一个可用空间池(文件系统会提供)。
我的问题是,这真的会带来任何重大改进吗?此外,是否有任何文档存储系统可以执行此类操作?或者类似的东西,我们可以用作起点?
【问题讨论】:
-
我认为如果没有一些文件系统与您选择的操作系统交互,就不可能以二进制可访问形式存储数据
-
当然,您可以在 Linux 中将驱动器或 RAID 阵列作为“块设备”访问并直接对其进行读/写。
-
一个块设备可以有一个文件系统。我想你会发现它在连接设备之前使用 EXT 或 FAT 或任何文件系统进行了初始化
-
块设备只是被连接设备的类型,并不代表它是否有文件系统
-
块设备不需要有文件系统就可以读取或写入。
标签: mongodb key-value hard-drive document-storage