2016-03-03 4 views
2

Я устанавливаю кластерный db с ArangoDB. Мне нужно использовать индексы в коллекциях.Добавление динамического ключа в ArangoDB

Предположим, что у нас есть одна коллекция с именем myCollection, которая была создана с помощью клавиш осколка _key.

Позвольте myVariable быть уникальным ключом myCollection, поэтому у меня есть уникальное ограничение на myVariable.

К myCollection создан, а данные находятся внутри.

Я не хочу стереть все, создать myCollection снова и добавить новый ключ осколка с myVariable и восстановить myCollection, так что мне нужно, чтобы добавить новый ключ осколка тем, что динамично myCollection уже создан.

Возможно ли это? Могу ли я добавить новый ключ осколка?

Я имею в виду, добавьте ключ в _shardBy ярлык без воссоздания коллекции.

Спасибо за помощь.

+0

Был ли ответ полностью заполнен вашими потребностями? Если нет, чего не хватает? Если, можете ли вы отметить его принято? – dothebart

ответ

1

Нет, изменение ключа осколка после создания не поддерживается. Если вы посмотрите на последствия, которые это могло бы иметь, то его легко понять:

Ключ осколка указывает координатору, какие документы должны заканчиваться на том узле кластера. И наоборот, он может предсказать, где искать документы на основе ключа осколка. Это предположение не получится, если вы измените это условие на новый арбитариат. Поэтому документы, не соответствующие условию, должны быть перемещены в правильный новый осколок.

Как вы видите, вам все равно нужно работать со всеми документами. Так что, если вы не хотите, чтобы загрузить все данные клиента, некоторые Javascript на координатор как службы Foxx может заполнить этот пробел:

  • создать новую коллекцию с правильной осколок ключа
  • принести все _key s в память
  • выдает повторяющиеся запросы AQL, которые выбирают диапазон из старой коллекции и вставляют ее в новую.

Возможно, вы захотите запустить дополнительный координатор, если вы не хотите использовать существующую настройку для этого.

Подсказка: для обновления до ArangoDB 3.0 в любом случае потребуется цикл дампа/восстановления - так что если вы можете отложить свою проблему немного, вы можете ее решить.

Смежные вопросы