在 ArangoDB 中动态添加分片键

Adding dynamically a sharding key in ArangoDB

我正在使用 ArangoDB 安装集群数据库。我需要在集合中使用索引。

我们假设我们有一个名为 myCollection 的集合,它是使用分片键 _key.

创建的

myVariable 成为 myCollection 的唯一键,所以我对 myVariable.

有唯一约束

myCollection创建,数据在里面。

我不想全部清除,再次创建 myCollection 并使用 myVariable 添加一个新的分片键并恢复 myCollection,所以我需要动态添加一个新的分片键同时 myCollection 已经创建。

这可能吗?我可以以某种方式添加新的分片键吗?

我的意思是,在 _shardBy 标签中添加键而不重新创建集合。

感谢您的帮助。

不支持,不支持在创建后更改分片键。如果你看一下这会产生的后果,很容易理解为什么:

分片键向协调器标识哪些文档应该在哪个集群节点上结束。反之亦然,因此它可以根据片键预测在何处搜索文档。如果您将该条件更改为任意的新条件,则该假设将失败。因此,不符合条件的文档必须移动到正确的新分片。

如您所见,无论如何您都需要处理所有文档。因此,如果您不想将所有数据下载到客户端,协调器上的某些 javascript(例如 Foxx 服务)可以填补空白:

  • 使用正确的分片键创建新集合
  • 将所有 _key 提取到内存中
  • 发出重复 AQL 查询 select 旧集合中的一个范围并将其插入新集合。

如果您不想为此使用现有设置,则可能需要启动一个额外的协调器。

提示:升级到 ArangoDB 3.0 无论如何都需要一个 dump/restore 周期 - 所以如果你能稍微推迟你的问题,那么你可能会解决它。