Spec-Zone.ru › RethinkDB ruby

Команда ReQL: rebalance

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

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

Описание

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

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

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

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

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

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

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

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

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

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

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/ruby/rebalance/

Spec-Zone.ru

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