Spec-Zone.ru › RethinkDB javascript

Команда ReQL: rebalance

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

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

Описание

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

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

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

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

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

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

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

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

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

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

> r.table('superheroes').rebalance().run(conn, callback);

Пример результата:

{
  "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/javascript/rebalance/

Spec-Zone.ru

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