OxL Справочник OxL
РусскийEnglish

12.4 Шарды

  • Встроенное хранилище делится на shards виртуальных шардов (задаётся один раз). Шард ключа — xxh3(сериализованный ключ) mod shards.
  • Карта «шард → узлы» хранится в координаторе. При добавлении или отказе узла шарды перемещаются; вызовы на время переезда буферизуются (до REBALANCE_BUFFER) и перенаправляются.

Определяется реализацией. Смена состава Raft-группы (D-8055; DIV-020; D-4379). Стандарт требует репликации Raft на шард, но не задаёт способ смены состава. Эта реализация меняет состав одиночными шагами (по одному узлу за изменение); joint consensus не реализован. Чтения с реплик и leader lease — см. примечание ниже.

Чтение из std.kv по умолчанию линеаризуемо. kv.reading(.Follower) читает с реплики своего узла, оставаясь линеаризуемым (индекс чтения сообщает лидер, реплика дожидается его применения); kv.reading(.Stale, d) читает с реплики без обращения к лидеру, если она слышала лидера не более d назад: результат не старее прочитанного процессом ранее (монотонное чтение), но может не включать записей последних d. Если у узла нет реплики, он сам лидер или реплика не успевает за 2 с, чтение идёт через лидера. Записи, транзакции, watch и ORM всегда идут через лидера (D-8065; D-8220, D-8228).

Определяется реализацией. Границы чтений с реплик (D-8065; DIV-019; D-8220, D-8221). Необязательные возможности, которых эта реализация не содержит: leader lease (линеаризуемость обеспечивает ReadIndex, часы не нужны) и чтение SQL-таблиц builtin:// (ORM) с реплик.

См. также

Исходник: docs/spec/oxl-standard.md