diff --git a/dbms/include/DB/ColumnGroup.h b/dbms/include/DB/ColumnGroup.h index 55e5cce9ba1..a818d5532d2 100644 --- a/dbms/include/DB/ColumnGroup.h +++ b/dbms/include/DB/ColumnGroup.h @@ -7,7 +7,7 @@ #include #include -#include +#include namespace DB @@ -23,8 +23,8 @@ struct ColumnGroup typedef std::vector ColumnNumbers; ColumnNumbers column_numbers; - /// Первичный ключ - Poco::SharedPtr primary_key; + /// Хранилище + Poco::SharedPtr storage; }; } diff --git a/dbms/include/DB/ErrorCodes.h b/dbms/include/DB/ErrorCodes.h index 4eeaefbf63e..ec6ba312922 100644 --- a/dbms/include/DB/ErrorCodes.h +++ b/dbms/include/DB/ErrorCodes.h @@ -16,7 +16,7 @@ namespace ErrorCodes METHOD_NOT_IMPLEMENTED, CANT_READ_INDEX_FILE, TOO_FEW_COLUMNS_FOR_KEY, - PRIMARY_KEY_WAS_NOT_ATTACHED, + STORAGE_WAS_NOT_ATTACHED, CANT_READ_DATA_FILE, TOO_MANY_COLUMNS_FOR_KEY }; diff --git a/dbms/include/DB/PrimaryKey.h b/dbms/include/DB/Storage.h similarity index 83% rename from dbms/include/DB/PrimaryKey.h rename to dbms/include/DB/Storage.h index 67715d9e134..106c79191cf 100644 --- a/dbms/include/DB/PrimaryKey.h +++ b/dbms/include/DB/Storage.h @@ -1,5 +1,5 @@ -#ifndef DBMS_PRIMARY_KEY_H -#define DBMS_PRIMARY_KEY_H +#ifndef DBMS_STORAGE_H +#define DBMS_STORAGE_H #include @@ -14,12 +14,14 @@ class ColumnGroup; class Table; -/** Первичный ключ - самая важная часть БД. +/** Хранилище - самая важная часть БД. * Отвечает за: + * - хранение данных одной кол-группы таблицы * - определение, в каком файле (или не файле) хранятся данные; * - поиск данных и обновление данных; * - структура хранения данных (сжатие, etc.) * - конкуррентный доступ к данным (блокировки, etc.) + * - реализует первичный ключ * * Присутствуют следующие особенности первичного ключа: * - может состоять из нескольких частей. Например, значения первых нескольких столбцов индексируются @@ -28,14 +30,14 @@ class Table; * - может не полностью индексировать столбцы, однозначно идентифицирующие строку в таблице - * для работы с пачками строк. */ -class IPrimaryKey +class IStorage { friend class Table; private: /** Установить указатель на таблицу и кол-группу. * - часть инициализации, которая выполняется при инициализации таблицы. - * (инициализация первичного ключа выполняется в два шага: + * (инициализация хранилища выполняется в два шага: * 1 - конструктор, * 2 - добавление к таблице (выполняется в конструкторе Table)) */ @@ -50,25 +52,25 @@ public: /** Записать пачку данных в таблицу, обновляя существующие данные, если они есть. * @param data - набор данных вида ключ (набор столбцов) -> значение (набор столбцов) * @param mask - битовая маска - какие столбцы входят в кол-группу, - * которую индексирует этот первичный ключ + * которую хранит это хранилище */ virtual void merge(const AggregatedRowSet & data, const ColumnMask & mask) = 0; - virtual ~IPrimaryKey() {} + virtual ~IStorage() {} }; /** Реализует метод addToTable(), * а также содержит члены table, column_group. */ -class PrimaryKeyBase : public IPrimaryKey +class StorageBase : public IStorage { protected: - /// Слабые указатели на таблицу и column_group, которые владеют этим первичным ключём. + /// Слабые указатели на таблицу и column_group, которые владеют этим хранилищем. Table * table; ColumnGroup * column_group; - PrimaryKeyBase() : table(0), column_group(0) {} + StorageBase() : table(0), column_group(0) {} void addToTable(Table * table_, ColumnGroup * column_group_) { diff --git a/dbms/include/DB/PrimaryKeyNone.h b/dbms/include/DB/StorageNoKey.h similarity index 58% rename from dbms/include/DB/PrimaryKeyNone.h rename to dbms/include/DB/StorageNoKey.h index 1102ebbfec8..e4286af60c2 100644 --- a/dbms/include/DB/PrimaryKeyNone.h +++ b/dbms/include/DB/StorageNoKey.h @@ -1,24 +1,24 @@ -#ifndef DBMS_PRIMARY_KEY_NONE_H -#define DBMS_PRIMARY_KEY_NONE_H +#ifndef DBMS_STORAGE_NO_KEY_H +#define DBMS_STORAGE_NO_KEY_H #include #include #include -#include +#include #include namespace DB { -/** Самый простой первичный ключ - ничего не индексирует; +/** Самое простое хранилище - в нём первичный ключ ничего не индексирует; * для чтения или обновления приходится читать файл целиком. * - удобно для логов. */ -class PrimaryKeyNone : public PrimaryKeyBase +class StorageNoKey : public StorageBase { -friend class PrimaryKeyNoneTablePartReader; +friend class StorageNoKeyTablePartReader; private: std::string path; std::string name; @@ -28,7 +28,7 @@ private: public: /** Путь со слешем на конце. */ - PrimaryKeyNone(const std::string & path_, const std::string & name_); + StorageNoKey(const std::string & path_, const std::string & name_); /** Просто дописывает данные в конец. */ void merge(const AggregatedRowSet & data, const ColumnMask & mask); @@ -38,16 +38,16 @@ public: }; -class PrimaryKeyNoneTablePartReader : public ITablePartReader +class StorageNoKeyTablePartReader : public ITablePartReader { -friend class PrimaryKeyNone; +friend class StorageNoKey; private: const Row key; - /// слабый указатель на первичный ключ - PrimaryKeyNone * pk; + /// слабый указатель на хранилище + StorageNoKey * pk; Poco::FileInputStream istr; - PrimaryKeyNoneTablePartReader(const Row & key_, PrimaryKeyNone * pk_); + StorageNoKeyTablePartReader(const Row & key_, StorageNoKey * pk_); public: bool fetch(Row & row); diff --git a/dbms/include/DB/PrimaryKeyPlain.h b/dbms/include/DB/StoragePlain.h similarity index 82% rename from dbms/include/DB/PrimaryKeyPlain.h rename to dbms/include/DB/StoragePlain.h index e1045a209fd..811f9d20b3f 100644 --- a/dbms/include/DB/PrimaryKeyPlain.h +++ b/dbms/include/DB/StoragePlain.h @@ -1,5 +1,5 @@ -#ifndef DBMS_PRIMARY_KEY_PLAIN_H -#define DBMS_PRIMARY_KEY_PLAIN_H +#ifndef DBMS_STORAGE_PLAIN_H +#define DBMS_STORAGE_PLAIN_H #include #include @@ -9,20 +9,20 @@ #include -#include +#include namespace DB { -/** Простой, "плоский" первичный ключ. +/** Простое хранилище с "плоским" первичным ключом. * Хранит список смещений в бинарном файле, список свободных блоков - в другом бинарном файле. * Поиск в этом файле линейный. * При обновлении данных, индексный файл полностью перезаписывается. * Файл с данными не сжатый. * Индекс полностью загружается в память во время работы. */ -class PrimaryKeyPlain : public PrimaryKeyBase +class StoragePlain : public StorageBase { private: std::string path; @@ -52,7 +52,7 @@ private: public: /** Путь со слешем на конце. */ - PrimaryKeyPlain(const std::string & path_, const std::string & name_); + StoragePlain(const std::string & path_, const std::string & name_); void addToTable(Table * table_, ColumnGroup * column_group_); diff --git a/dbms/include/DB/Table.h b/dbms/include/DB/Table.h index 263fb38e87e..4e0b754e387 100644 --- a/dbms/include/DB/Table.h +++ b/dbms/include/DB/Table.h @@ -14,9 +14,9 @@ namespace DB class Table { -friend class PrimaryKeyNone; -friend class PrimaryKeyNoneTablePartReader; -friend class PrimaryKeyPlain; +friend class StorageNoKey; +friend class StorageNoKeyTablePartReader; +friend class StoragePlain; public: typedef std::vector Columns; @@ -48,7 +48,7 @@ public: { /// Пропишем в первичных ключах в кол-группах указатель на таблицу и кол-группу for (ColumnGroups::iterator it = column_groups->begin(); it != column_groups->end(); ++it) - it->primary_key->addToTable(this, &*it); + it->storage->addToTable(this, &*it); } }; diff --git a/dbms/src/PrimaryKeyNone.cpp b/dbms/src/StorageNoKey.cpp similarity index 75% rename from dbms/src/PrimaryKeyNone.cpp rename to dbms/src/StorageNoKey.cpp index e8c5df22d33..4797088cbf9 100644 --- a/dbms/src/PrimaryKeyNone.cpp +++ b/dbms/src/StorageNoKey.cpp @@ -3,13 +3,13 @@ #include #include -#include +#include namespace DB { -PrimaryKeyNone::PrimaryKeyNone(const std::string & path_, const std::string & name_) +StorageNoKey::StorageNoKey(const std::string & path_, const std::string & name_) : path(path_), name(name_), data_file_name(path + name + ".dat"), @@ -20,11 +20,11 @@ PrimaryKeyNone::PrimaryKeyNone(const std::string & path_, const std::string & na } -void PrimaryKeyNone::merge(const AggregatedRowSet & data, const ColumnMask & mask) +void StorageNoKey::merge(const AggregatedRowSet & data, const ColumnMask & mask) { if (!table || !column_group) - throw Exception("Primary key was not attached to table and column group", - ErrorCodes::PRIMARY_KEY_WAS_NOT_ATTACHED); + throw Exception("Storage was not attached to table and column group", + ErrorCodes::STORAGE_WAS_NOT_ATTACHED); /// просто дописываем данные в конец файла Poco::FileOutputStream ostr(data_file_name, std::ios::out | std::ios::binary | std::ios::app); @@ -44,20 +44,20 @@ void PrimaryKeyNone::merge(const AggregatedRowSet & data, const ColumnMask & mas } -Poco::SharedPtr PrimaryKeyNone::read(const Row & key) +Poco::SharedPtr StorageNoKey::read(const Row & key) { - return new PrimaryKeyNoneTablePartReader(key, this); + return new StorageNoKeyTablePartReader(key, this); } -PrimaryKeyNoneTablePartReader::PrimaryKeyNoneTablePartReader( - const Row & key_, PrimaryKeyNone * pk_) +StorageNoKeyTablePartReader::StorageNoKeyTablePartReader( + const Row & key_, StorageNoKey * pk_) : key(key_), pk(pk_), istr(pk->data_file_name) { } -bool PrimaryKeyNoneTablePartReader::fetch(Row & row) +bool StorageNoKeyTablePartReader::fetch(Row & row) { if (key.size() > pk->column_group->column_numbers.size()) throw Exception("Too many columns specified for key", ErrorCodes::TOO_MANY_COLUMNS_FOR_KEY); diff --git a/dbms/src/PrimaryKeyPlain.cpp b/dbms/src/StoragePlain.cpp similarity index 86% rename from dbms/src/PrimaryKeyPlain.cpp rename to dbms/src/StoragePlain.cpp index c0e54380eda..929508368a8 100644 --- a/dbms/src/PrimaryKeyPlain.cpp +++ b/dbms/src/StoragePlain.cpp @@ -2,13 +2,13 @@ #include #include -#include +#include namespace DB { -PrimaryKeyPlain::PrimaryKeyPlain(const std::string & path_, const std::string & name_) +StoragePlain::StoragePlain(const std::string & path_, const std::string & name_) : path(path_), name(name_), data_file_name(path + name + ".dat"), @@ -44,9 +44,9 @@ PrimaryKeyPlain::PrimaryKeyPlain(const std::string & path_, const std::string & } -void PrimaryKeyPlain::addToTable(Table * table_, ColumnGroup * column_group_) +void StoragePlain::addToTable(Table * table_, ColumnGroup * column_group_) { - PrimaryKeyBase::addToTable(table_, column_group_); + StorageBase::addToTable(table_, column_group_); /// прочитаем список смещений Poco::FileInputStream offsets_istr(offsets_file_name); @@ -77,7 +77,7 @@ void PrimaryKeyPlain::addToTable(Table * table_, ColumnGroup * column_group_) } -void PrimaryKeyPlain::merge(const AggregatedRowSet & data, const ColumnMask & mask) +void StoragePlain::merge(const AggregatedRowSet & data, const ColumnMask & mask) { /* std::set keys; diff --git a/dbms/src/tests/primary_key_none.cpp b/dbms/src/tests/storage_no_key.cpp similarity index 96% rename from dbms/src/tests/primary_key_none.cpp rename to dbms/src/tests/storage_no_key.cpp index 161917d0527..5c1841b64d1 100644 --- a/dbms/src/tests/primary_key_none.cpp +++ b/dbms/src/tests/storage_no_key.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include @@ -64,7 +64,7 @@ int main(int argc, char ** argv) for (size_t i = 0; i < columns->size(); ++i) column_group0.column_numbers.push_back(i); - column_group0.primary_key = new DB::PrimaryKeyNone("./", "TestPrimaryKeyNone"); + column_group0.storage = new DB::StorageNoKey("./", "TestStorageNoKey"); Poco::SharedPtr column_groups = new DB::Table::ColumnGroups; column_groups->push_back(column_group0); @@ -136,7 +136,7 @@ int main(int argc, char ** argv) stopwatch.restart(); - column_group0.primary_key->merge(data, mask); + column_group0.storage->merge(data, mask); stopwatch.stop(); std::cout << "Saving data: " << static_cast(stopwatch.elapsed()) / 1000000 << std::endl; @@ -145,7 +145,7 @@ int main(int argc, char ** argv) /// читаем таблицу { DB::Row key; - Poco::SharedPtr reader(column_group0.primary_key->read(key)); + Poco::SharedPtr reader(column_group0.storage->read(key)); stopwatch.restart();