mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-11 18:14:03 +00:00
dbms: lazy opening of files [#CONV-2944].
This commit is contained in:
parent
c9f9913ef5
commit
3482ab7686
@ -24,8 +24,6 @@ using Poco::SharedPtr;
|
||||
LogBlockInputStream::LogBlockInputStream(size_t block_size_, const Names & column_names_, StorageLog & storage_, size_t mark_number_, size_t rows_limit_)
|
||||
: block_size(block_size_), column_names(column_names_), storage(storage_), mark_number(mark_number_), rows_limit(rows_limit_), rows_read(0)
|
||||
{
|
||||
for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ++it)
|
||||
streams.insert(std::make_pair(*it, new Stream(storage.files[*it].data_file.path(), storage.files[*it].marks[mark_number].offset)));
|
||||
}
|
||||
|
||||
|
||||
@ -33,6 +31,13 @@ Block LogBlockInputStream::readImpl()
|
||||
{
|
||||
Block res;
|
||||
|
||||
/// Если файлы не открыты, то открываем их.
|
||||
if (streams.empty())
|
||||
for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ++it)
|
||||
streams.insert(std::make_pair(*it, new Stream(
|
||||
storage.files[*it].data_file.path(),
|
||||
storage.files[*it].marks[mark_number].offset)));
|
||||
|
||||
for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ++it)
|
||||
{
|
||||
ColumnWithNameAndType column;
|
||||
@ -47,6 +52,14 @@ Block LogBlockInputStream::readImpl()
|
||||
|
||||
if (res)
|
||||
rows_read += res.getByPosition(0).column->size();
|
||||
else
|
||||
{
|
||||
/** Закрываем файлы (ещё до уничтожения объекта).
|
||||
* Чтобы при создании многих источников, но одновременном чтении только из нескольких,
|
||||
* буферы не висели в памяти.
|
||||
*/
|
||||
streams.clear();
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user