Команда 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: Значение состояния таблицы до выполненияrebalance. -
new_val: Значение состояния таблицы после выполнения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/python/rebalance/