diff --git a/dbms/include/DB/Databases/DatabaseCloud.h b/dbms/include/DB/Databases/DatabaseCloud.h index dff7e94c397..6fb3361295e 100644 --- a/dbms/include/DB/Databases/DatabaseCloud.h +++ b/dbms/include/DB/Databases/DatabaseCloud.h @@ -35,10 +35,10 @@ namespace DB /database_name /name_hash_mod -> compressed_table_list - список пар (хэш от имени таблицы, хэш от структуры) в сжатом виде - /ordered_locality_keys - ключи локальности - /key-SEQNO -> key_value - порядковый номер ключа локальности (в порядке того, как они были встречены) -> значение ключа локальности + /locality_keys - сериализованный список ключей локальности в порядке их появления - ключ локальности - произвольная строка - - движок БД определяет серверы для расположения данных таким образом, чтобы, при одинаковом множестве живых серверов, + - движок БД определяет серверы для расположения данных таким образом, + чтобы, при одинаковом множестве живых серверов, одному ключу локальности соответствовала одна группа из N серверов для расположения данных. /nodes - список серверов, на которых зарегистрированы облачные БД с таким путём в ZK /hostname - имя хоста @@ -109,11 +109,21 @@ public: private: void createZookeeperNodes(); + + /// Получить имя узла, в котором будет храниться часть списка таблиц. (Список таблиц является двухуровневым.) String getNameOfNodeWithTables(const String & table_name) const; + + /// Хэшировать имя таблицы вместе с именем БД. Hash getTableHash(const String & table_name) const; + /// Определения таблиц хранятся косвенным образом и адресуются своим хэшом. Вычислить хэш. Hash getHashForTableDefinition(const String & definition) const; + + /// Пойти в ZooKeeper и по хэшу получить определение таблицы. String getTableDefinitionFromHash(Hash hash) const; + + /// Определить серверы, на которых будут храниться данные таблицы. + std::vector selectHostsForTable(const String & locality_key) const; }; } diff --git a/dbms/src/Databases/DatabaseCloud.cpp b/dbms/src/Databases/DatabaseCloud.cpp index c957d3dc836..afd13214627 100644 --- a/dbms/src/Databases/DatabaseCloud.cpp +++ b/dbms/src/Databases/DatabaseCloud.cpp @@ -46,7 +46,7 @@ void DatabaseCloud::createZookeeperNodes() ops.push_back(new zkutil::Op::Create(zookeeper_path + "/table_definitions", "", acl, zkutil::CreateMode::Persistent)); ops.push_back(new zkutil::Op::Create(zookeeper_path + "/tables", "", acl, zkutil::CreateMode::Persistent)); ops.push_back(new zkutil::Op::Create(zookeeper_path + "/local_tables", "", acl, zkutil::CreateMode::Persistent)); - ops.push_back(new zkutil::Op::Create(zookeeper_path + "/ordered_locality_keys", "", acl, zkutil::CreateMode::Persistent)); + ops.push_back(new zkutil::Op::Create(zookeeper_path + "/locality_keys", "", acl, zkutil::CreateMode::Persistent)); ops.push_back(new zkutil::Op::Create(zookeeper_path + "/nodes", "", acl, zkutil::CreateMode::Persistent)); auto code = zookeeper->tryMulti(ops); @@ -770,6 +770,11 @@ void DatabaseCloud::shutdown() } +std::vector DatabaseCloud::selectHostsForTable(const String & locality_key) const +{ +} + + void DatabaseCloud::drop() {