  The storage manager, as a key component of the database system, is
responsible for organizing, reading, and delivering data to the execution
engine for processing. According to the data serving mechanism, existing
storage managers are either pull-based, incurring high latency, or push-based,
leading to a high number of I/O requests when the CPU is busy. To improve these
shortcomings, this thesis proposes a push-based prefetching strategy in a
column-wise storage manager. The proposed strategy implements an efficient
cache layer to store shared data among queries to reduce the number of I/O
requests. The capacity of the cache is maintained by a time access-aware
eviction mechanism. Our strategy enables the storage manager to coordinate
multiple queries by merging their requests and dynamically generate an optimal
read order that maximizes the overall I/O throughput. We evaluated our storage
manager both over a disk-based redundant array of independent disks (RAID) and
an NVM Express (NVMe) solid-state drive (SSD). With the high read performance
of the SSD, we successfully minimized the total read time and number of I/O
accesses.
