Cloud databases: development [#METR-19998].

This commit is contained in:
Alexey Milovidov 2016-04-05 18:05:45 +03:00
parent 6e75a1d1c0
commit 57563193e4
2 changed files with 19 additions and 4 deletions

View File

@ -35,10 +35,10 @@ namespace DB
/database_name /database_name
/name_hash_mod -> compressed_table_list /name_hash_mod -> compressed_table_list
- список пар (хэш от имени таблицы, хэш от структуры) в сжатом виде - список пар (хэш от имени таблицы, хэш от структуры) в сжатом виде
/ordered_locality_keys - ключи локальности /locality_keys - сериализованный список ключей локальности в порядке их появления
/key-SEQNO -> key_value - порядковый номер ключа локальности (в порядке того, как они были встречены) -> значение ключа локальности
- ключ локальности - произвольная строка - ключ локальности - произвольная строка
- движок БД определяет серверы для расположения данных таким образом, чтобы, при одинаковом множестве живых серверов, - движок БД определяет серверы для расположения данных таким образом,
чтобы, при одинаковом множестве живых серверов,
одному ключу локальности соответствовала одна группа из N серверов для расположения данных. одному ключу локальности соответствовала одна группа из N серверов для расположения данных.
/nodes - список серверов, на которых зарегистрированы облачные БД с таким путём в ZK /nodes - список серверов, на которых зарегистрированы облачные БД с таким путём в ZK
/hostname - имя хоста /hostname - имя хоста
@ -109,11 +109,21 @@ public:
private: private:
void createZookeeperNodes(); void createZookeeperNodes();
/// Получить имя узла, в котором будет храниться часть списка таблиц. (Список таблиц является двухуровневым.)
String getNameOfNodeWithTables(const String & table_name) const; String getNameOfNodeWithTables(const String & table_name) const;
/// Хэшировать имя таблицы вместе с именем БД.
Hash getTableHash(const String & table_name) const; Hash getTableHash(const String & table_name) const;
/// Определения таблиц хранятся косвенным образом и адресуются своим хэшом. Вычислить хэш.
Hash getHashForTableDefinition(const String & definition) const; Hash getHashForTableDefinition(const String & definition) const;
/// Пойти в ZooKeeper и по хэшу получить определение таблицы.
String getTableDefinitionFromHash(Hash hash) const; String getTableDefinitionFromHash(Hash hash) const;
/// Определить серверы, на которых будут храниться данные таблицы.
std::vector<String> selectHostsForTable(const String & locality_key) const;
}; };
} }

View File

@ -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 + "/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 + "/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 + "/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)); ops.push_back(new zkutil::Op::Create(zookeeper_path + "/nodes", "", acl, zkutil::CreateMode::Persistent));
auto code = zookeeper->tryMulti(ops); auto code = zookeeper->tryMulti(ops);
@ -770,6 +770,11 @@ void DatabaseCloud::shutdown()
} }
std::vector<String> DatabaseCloud::selectHostsForTable(const String & locality_key) const
{
}
void DatabaseCloud::drop() void DatabaseCloud::drop()
{ {