Spec-Zone.ru › RethinkDB java

Команда ReQL: reconfigure

Синтаксис команды

table.reconfigure() → object
database.reconfigure() → object

Описание

Переконфигурировать фрагментацию и репликацию таблицы. Используйте следующие опции с помощью optArg:

  • shards: количество фрагментов, целое число от 1 до 64. Обязательно.
  • replicas: целое число или объект отображения. Обязательно.
    • Если replicas является целым числом, оно определяет количество реплик на фрагмент. Указание большего количества реплик, чем серверов, вернёт ошибку.
    • Если replicas является объектом, он определяет пары ключ-значение тегов сервера и количество реплик, которые нужно назначить этим серверам: {tag1: 2, tag2: 4, tag3: 2, ...}. Для получения дополнительной информации о тегах сервера, ознакомьтесь со статьёй Инструменты администрирования.
  • primary_replica_tag: первичный сервер, заданный его тегом сервера. Требуется, если replicas является объектом; тег должен присутствовать в объекте. Это не должно быть указано, если replicas является целым числом.
  • dry_run: если true сгенерированная конфигурация не будет применена к таблице, а только возвращена.
  • nonvoting_replica_tags: реплики с этими тегами сервера будут добавлены в список nonvoting_replicas результирующей конфигурации. (Подробности о не голосующих репликах см. в failover).

  • emergency_repair: используется для режима аварийного ремонта. См. отдельный раздел ниже.

Значение возврата reconfigure — объект с тремя полями:

  • reconfigured: количество переконфигурированных таблиц. Будет равно 0 если dry_run равно true.
  • config_changes: список новых и старых значений конфигурации таблицы. Каждый элемент списка будет объектом с двумя полями:
    • old_val: значение конфигурации таблицы config до выполнения reconfigure.
    • new_val: значение конфигурации таблицы config после выполнения reconfigure.
  • status_changes: список новых и старых значений состояния таблицы. Каждый элемент списка будет объектом с двумя полями:
    • old_val: значение состояния таблицы status до выполнения reconfigure.
    • new_val: значение состояния таблицы status после выполнения reconfigure.

Для config_changes и status_changes, см. команды config и status для объяснения объектов, возвращаемых в полях old_val и new_val.

Таблица временно потеряет доступность после вызова reconfigure; используйте команду wait, чтобы дождаться, пока таблица снова станет доступной, или status, чтобы проверить, доступна ли таблица для записи.

Примечание: Всякий раз, когда вы вызываете reconfigure, устойчивость записи будет установлена в hard, а подтверждения записи будут установлены в majority; их можно изменить, используя команду config для таблицы.

Если reconfigure вызывается для базы данных, конфигурации всех таблиц в базе данных будут затронуты. Значение возврата будет массивом объектов, описанных выше, по одной таблице.

Ознакомьтесь со статьёй Фрагментация и репликация для полного обсуждения темы, включая расширенные темы.

Пример: Переконфигурировать таблицу.

r.table("superheroes").reconfigure().optArg("shards", 2).optArg("replicas", 1).run(conn);

Результат:

{
  "reconfigured": 1,
  "config_changes": [
    {
      "new_val": {
        "id": "31c92680-f70c-4a4b-a49e-b238eb12c023",
        "name": "superheroes",
        "db": "superstuff",
        "primary_key": "id",
        "shards": [
          {
            "primary_replica": "jeeves",
            "replicas": ["jeeves", "alfred"],
            "nonvoting_replicas": []
          },
          {
            "primary_replica": "alfred",
            "replicas": ["jeeves", "alfred"],
            "nonvoting_replicas": []
          }
        ],
        "indexes": [],
        "write_acks": "majority",
        "durability": "hard"
      },
      "old_val": {
        "id": "31c92680-f70c-4a4b-a49e-b238eb12c023",
        "name": "superheroes",
        "db": "superstuff",
        "primary_key": "id",
        "shards": [
            "primary_replica": "alfred",
            "replicas": ["jeeves", "alfred"],
            "nonvoting_replicas": []
        ],
        "indexes": [],
        "write_acks": "majority",
        "durability": "hard"
      }
    }
  ],
  "status_changes": [
    {
      "new_val": (status object),
      "old_val": (status object)
    }
  ]
}

Пример: Переконфигурировать таблицу, указав реплики по тегам серверов.

r.table("superheroes").reconfigure().optArg("shards", 2).optArg("replicas", r.hashMap("wooster", 1).with("wayne", 1)).optArg("primary_replica_tag", "wooster").run(conn)

{
  "reconfigured": 1,
  "config_changes": [
    {
      "new_val": {
        "id": "31c92680-f70c-4a4b-a49e-b238eb12c023",
        "name": "superheroes",
        "db": "superstuff",
        "primary_key": "id",
        "shards": [
          {
            "primary_replica": "jeeves",
            "replicas": ["jeeves", "alfred"],
            "nonvoting_replicas": []
          },
          {
            "primary_replica": "alfred",
            "replicas": ["jeeves", "alfred"],
            "nonvoting_replicas": []
          }
        ],
        "indexes": [],
        "write_acks": "majority",
        "durability": "hard"
      },
      "old_val": {
        "id": "31c92680-f70c-4a4b-a49e-b238eb12c023",
        "name": "superheroes",
        "db": "superstuff",
        "primary_key": "id",
        "shards": [
            "primary_replica": "alfred",
            "replicas": ["jeeves", "alfred"],
            "nonvoting_replicas": []
        ],
        "indexes": [],
        "write_acks": "majority",
        "durability": "hard"
      }
    }
  ],
  "status_changes": [
    {
      "new_val": (status object),
      "old_val": (status object)
    }
  ]
}

Режим аварийного ремонта

RethinkDB поддерживает автоматический сбой, когда более половины голосующих реплик для каждого фрагмента таблицы по-прежнему доступны (см. документацию по сбою для получения более подробной информации). Однако, если половина или более голосующих реплик фрагмента потеряны, автоматический сбой не произойдёт, оставив два варианта:

  • Возвращение достаточно серверов в онлайн-режим, чтобы позволить автоматический сбой.
  • Использование режима аварийного ремонта для переконфигурации таблицы.

Аргумент emergency_repair фактически является другой командой; при его указании разрешены только другие аргументы для reconfigure, кроме dry_run. При его выполнении каждый фрагмент таблицы проверяется и классифицируется в одну из трёх категорий:

  • Здоровый: более половины голосующих реплик фрагмента по-прежнему доступны.
  • Подлежащий ремонту: фрагмент не здоров, но по крайней мере одна реплика, голосующая или нет, доступна.
  • Не поддающийся ремонту: фрагмент не имеет доступных реплик.

Для каждого подлежащего ремонту фрагмента emergency_repair преобразует все недоступные голосующие реплики в не голосующие. Если все голосующие реплики были удалены, произвольно выбранная доступная не голосующая реплика будет преобразована в голосующую. После этой операции все доступные реплики фрагмента будут голосующими репликами.

Укажите emergency_repair с одним из двух строковых вариантов:

  • unsafe_rollback: фрагменты, не поддающиеся ремонту, останутся нетронутыми.
  • unsafe_rollback_or_erase: фрагмент, не поддающийся ремонту, будет уничтожен и пересоздан на доступном сервере, который содержит другой фрагмент для этой таблицы.

Значение возврата reconfigure в режиме аварийного ремонта такое же, как и раньше. Проверьте поле config_changes, чтобы увидеть старые и новые параметры конфигурации таблицы. Как и в обычном режиме, если вы укажете emergency_repair с dry_run: true, таблица фактически не будет переконфигурирована.

Примечание: emergency_repair может быть использован только для отдельных таблиц, а не для баз данных. Он не может быть использован после команды db.

Режим аварийного ремонта чрезвычайно опасен. Он обходит обычные меры предосторожности, предотвращающие потерю данных, и делает недействительными гарантии согласованности, которые обычно предоставляет RethinkDB, и может легко потерять данные в любом режиме—в режиме unsafe_rollback_or_erase он может потерять все данные фрагмента.

Пример: Произвести аварийный ремонт таблицы.

r.table("superheroes").reconfigure().optArg("emergency_repair", "unsafe_rollback").run(conn);

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/reconfigure/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API