Spec-Zone.ru › RethinkDB java

Команда ReQL: rebalance

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

table.rebalance() → object
database.rebalance() → object

Описание

Перебалансирует фрагменты таблицы. При вызове на базе данных все таблицы в этой базе данных будут перебалансированы.

Команда rebalance работает, измеряя распределение первичных ключей в таблице и выбирая точки разделения, которые предоставят каждому фрагменту примерно одинаковое количество документов. Она не будет менять количество фрагментов в таблице или изменять какие-либо другие параметры конфигурации для таблицы или базы данных.

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

RethinkDB автоматически перебалансирует таблицы при увеличении количества фрагментов, и если ваши документы имеют равномерно распределенные первичные ключи (например, по умолчанию UUID), вряд ли потребуется вызывать rebalance вручную. Случаи, когда может потребоваться вызвать rebalance, включают:

  • Таблицы с неравномерно распределенными первичными ключами, такими как возрастающие целые числа
  • Изменение типа первичного ключа таблицы
  • Увеличение количества фрагментов пустой таблицы, а затем использование не-UUID первичных ключей в этой таблице

Веб-интерфейс web UI (и команда info) может сообщить вам, когда фрагменты таблицы необходимо перебалансировать.

Результат вызова rebalance — объект с двумя полями:

  • rebalanced: количество перебалансированных таблиц.
  • status_changes: список новых и старых значений статуса таблиц. Каждый элемент списка будет объектом с двумя полями:
    • old_val: значение статуса таблицы status до выполнения rebalance.
    • new_val: значение status таблицы после выполнения rebalance. (Это значение почти всегда будет указывать на то, что таблица недоступна.)

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

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

> r.table("superheroes").rebalance().run(conn);

Результат:

{
  "rebalanced": 1,
  "status_changes": [
    {
      "old_val": {
        "db": "database",
        "id": "5cb35225-81b2-4cec-9eef-bfad15481265",
        "name": "superheroes",
        "shards": [
          {
            "primary_replica": "jeeves",
            "replicas": [
              {
                "server": "jeeves",
                "state": "ready"
              }
            ]
          },
          {
            "primary_replica": "jeeves",
            "replicas": [
              {
                "server": "jeeves",
                "state": "ready"
              }
            ]
          }
        ],
        "status": {
          "all_replicas_ready": true,
          "ready_for_outdated_reads": true,
          "ready_for_reads": true,
          "ready_for_writes": true
        }
      },
      "new_val": {
        "db": "database",
        "id": "5cb35225-81b2-4cec-9eef-bfad15481265",
        "name": "superheroes",
        "shards": [
          {
            "primary_replica": "jeeves",
            "replicas": [
              {
                "server": "jeeves",
                "state": "transitioning"
              }
            ]
          },
          {
            "primary_replica": "jeeves",
            "replicas": [
              {
                "server": "jeeves",
                "state": "transitioning"
              }
            ]
          }
        ],
        "status": {
          "all_replicas_ready": false,
          "ready_for_outdated_reads": false,
          "ready_for_reads": false,
          "ready_for_writes": false
        }
      }

    }
  ]
}

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

Spec-Zone.ru

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