我们有一个表,其中包含超过 5000 个不同客户的数据。我们决定改用 5k 个表,每个客户一个,因为我们很少查询来自多个客户的数据,因为我们认为这应该提高性能,并且会让事情变得更干净。
虽然我们看到查询响应时间更好,但我们注意到内存和磁盘存储的开销。我们预计会有一些开销,但在我们的监控中差异很明显。
我们已经看到了许多可以调整的配置选项,但不确定其中任何一个是否对我的用例有帮助。你有什么建议吗?
QuestDB 使用一些内存来处理无序插入,这可能解释了内存的增加。您可以使用
cairo.o3.column.memory.size
设置来控制它,该设置默认为每列和表 256K(实际上它使用该大小的 2 倍)。我们可以尝试使用 128K,看看它的表现如何,并根据需要继续调整。
QuestDB 还为列和索引分配块磁盘空间。当我们有一个大表时,分配更大的块是有意义的,但是对于多个较小的表,我们可以更积极地分配。下面的四个配置值应该会显着减少磁盘存储空间。
cairo.system.writer.data.append.page.size=128K
cairo.writer.data.append.page.size=128K
cairo.writer.data.index.key.append.page.size=128K
cairo.writer.data.index.value.append.page.size=128K
如果磁盘是一个问题,我们总是可以使用 ZFS 进行压缩。