2016-03-03 61 views
2

我正在安装与ArangoDB的集群分区。我需要在集合中使用索引。在ArangoDB中动态添加分片密钥

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

myVariablemyCollection的唯一密钥,所以我对myVariable有一个唯一的约束。

myCollection创建,数据在里面。

我不想删除所有,再创myCollection并添加新的片键与myVariable和恢复myCollection,所以我需要添加一个新片段关键dinamically同时该myCollection已创建。

这可能吗?不知何故,我可以添加新的分片键吗?

我的意思是,在没有重新创建收藏的情况下在_shardBy标签中添加标签。

感谢您的帮助。

+0

答案是否满足您的需求?如果没有,缺少什么?如果,你能否接受它? – dothebart

回答

1

不,创建后更改分片键不受支持。如果你看看这会带来的后果,它会很容易理解为什么:

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

如您所见,您需要处理所有文档。所以,如果你不想将所有数据下载到客户端,就如福克斯服务协调一些JavaScript可能会填补这一空白:

  • 创建新的集合与合适的片键
  • 获取所有_key s到内存中
  • 发出重复AQL查询,从旧集合中选择一个范围并将其插入到新集合中。

如果您不想为此使用现有设置,则可能需要启动其他协调器。

提示:升级到ArangoDB 3.0无论如何都需要一个转储/恢复周期 - 所以如果你可以推迟你的问题一点,你可以解决它。