跳至主要內容

虚拟存储组

...大约 2 分钟

虚拟存储组

背景

存储组由用户显示指定,使用语句"SET STORAGE GROUP TO"来指定存储组,每一个存储组有一个对应的 StorageGroupProcessor

为了确保最终一致性,每一个存储组有一个数据插入锁(排它锁)来同步每一次插入操作。
所以服务端数据写入的并行度为存储组的数量。

问题

从背景中可知,IoTDB数据写入的并行度为 max(客户端数量,服务端数据写入的并行度),也就是max(客户端数量,存储组数量)

在生产实践中,存储组的概念往往与特定真实世界实体相关(例如工厂,地点,国家等)。
因此存储组的数量可能会比较小,这会导致IoTDB写入并行度不足。即使我们开再多的客户端写入线程,也无法走出这种困境。

解决方案

我们的方案是将一个存储组下的设备分为若干个设备组(称为虚拟存储组),将同步粒度从存储组级别改为虚拟存储组粒度。

更具体的,我们使用哈希将设备分到不同的虚拟存储组下,例如:
对于一个名为"root.sg.d"的设备(假设其存储组为"root.sgopen in new window"),它属于的虚拟存储组为"root.sgopen in new window.[hash("root.sg.d") mod num_of_virtual_storage_group]"

使用方法

通过改变如下配置来设置每一个存储组下虚拟存储组的数量:

virtual_storage_group_num

推荐值为[virtual storage group number] = [CPU core number] / [user-defined storage group number]

参考配置手册以获取更多信息。

Copyright © 2024 The Apache Software Foundation.
Apache and the Apache feather logo are trademarks of The Apache Software Foundation

Have a question? Connect with us on QQ, WeChat, or Slack. Join the community now.