在 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 周期 - 所以如果你能稍微推迟你的问题,那么你可能会解决它。
我正在使用 ArangoDB 安装集群数据库。我需要在集合中使用索引。
我们假设我们有一个名为 myCollection
的集合,它是使用分片键 _key
.
让 myVariable
成为 myCollection
的唯一键,所以我对 myVariable
.
由myCollection
创建,数据在里面。
我不想全部清除,再次创建 myCollection
并使用 myVariable
添加一个新的分片键并恢复 myCollection
,所以我需要动态添加一个新的分片键同时 myCollection
已经创建。
这可能吗?我可以以某种方式添加新的分片键吗?
我的意思是,在 _shardBy
标签中添加键而不重新创建集合。
感谢您的帮助。
不支持,不支持在创建后更改分片键。如果你看一下这会产生的后果,很容易理解为什么:
分片键向协调器标识哪些文档应该在哪个集群节点上结束。反之亦然,因此它可以根据片键预测在何处搜索文档。如果您将该条件更改为任意的新条件,则该假设将失败。因此,不符合条件的文档必须移动到正确的新分片。
如您所见,无论如何您都需要处理所有文档。因此,如果您不想将所有数据下载到客户端,协调器上的某些 javascript(例如 Foxx 服务)可以填补空白:
- 使用正确的分片键创建新集合
- 将所有
_key
提取到内存中 - 发出重复 AQL 查询 select 旧集合中的一个范围并将其插入新集合。
如果您不想为此使用现有设置,则可能需要启动一个额外的协调器。
提示:升级到 ArangoDB 3.0 无论如何都需要一个 dump/restore 周期 - 所以如果你能稍微推迟你的问题,那么你可能会解决它。