Skip to content

Commit

Permalink
use fingerprinted data for cache
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanmorozov333 committed Sep 11, 2024
1 parent 4fbcd53 commit 995cc57
Showing 1 changed file with 13 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ class TPortionDataSource: public IDataSource {
std::set<ui32> SequentialEntityIds;
std::shared_ptr<TPortionInfo> Portion;
std::shared_ptr<ISnapshotSchema> Schema;
mutable THashMap<ui64, ui64> FingerprintedData;

void NeedFetchColumns(const std::set<ui32>& columnIds, TBlobsAction& blobsAction,
THashMap<TChunkAddress, TPortionInfo::TAssembleBlobInfo>& nullBlocks, const std::shared_ptr<NArrow::TColumnFilter>& filter);
Expand Down Expand Up @@ -307,6 +308,7 @@ class TPortionDataSource: public IDataSource {
return Portion->GetPathId();
}
virtual bool DoAddSequentialEntityIds(const ui32 entityId) override {
FingerprintedData.clear();
return SequentialEntityIds.emplace(entityId).second;
}

Expand Down Expand Up @@ -334,6 +336,13 @@ class TPortionDataSource: public IDataSource {
}

virtual ui64 GetColumnRawBytes(const std::set<ui32>& columnsIds) const override {
AFL_VERIFY(columnsIds.size());
const ui64 fp = CombineHashes(*columnsIds.begin(), *columnsIds.rbegin());
auto it = FingerprintedData.find(fp);
if (it != FingerprintedData.end()) {
return it->second;
}
ui64 result = 0;
if (SequentialEntityIds.size()) {
std::set<ui32> selectedSeq;
std::set<ui32> selectedInMem;
Expand All @@ -344,11 +353,13 @@ class TPortionDataSource: public IDataSource {
selectedInMem.emplace(i);
}
}
return Portion->GetMinMemoryForReadColumns(selectedSeq) + Portion->GetColumnBlobBytes(selectedSeq) +
result = Portion->GetMinMemoryForReadColumns(selectedSeq) + Portion->GetColumnBlobBytes(selectedSeq) +
Portion->GetColumnRawBytes(selectedInMem, false);
} else {
return Portion->GetColumnRawBytes(columnsIds, false);
result = Portion->GetColumnRawBytes(columnsIds, false);
}
FingerprintedData.emplace(fp, result);
return result;
}

virtual ui64 GetColumnBlobBytes(const std::set<ui32>& columnsIds) const override {
Expand Down

0 comments on commit 995cc57

Please sign in to comment.