Class CachePagedDataBase<S extends CachePagedState<M,​D>,​M extends UsedPagesInfo,​D extends DirtyPagedDataBase<M,​? extends DirtyPagedState>>

    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected S state  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected int allocCachePage()
      Выделение свободной страницы
      protected int cache2persist​(int cachePage)
      Возвращает индекс постоянной страницы для кешированной страницы
      protected int cache2persist_mut​(int cachePage)  
      xyz.cofe.fn.Tuple2<Long,​Long> cacheHitMiss()  
      protected xyz.cofe.fn.Tuple2<List<Integer>,​List<Integer>> cleanDirtyPages()
      Получение списка чистых/грязных страниц
      protected boolean dirty​(int cachePage)
      Проверка, что страница является "грязной"
      protected boolean dirty_mut​(int cachePage)  
      xyz.cofe.fn.Tuple2<UsedPagesInfo,​UsedPagesInfo> extendPages​(int pages)
      Расширение кол-ва используемых страниц
      void flush()
      Принудительная запись накопившийся изменений на диск/носитель информации
      protected int flush​(int cachePage)
      Сохранение страницы кеша
      protected int flush_mut​(int cachePage)  
      protected int flush0​(int cachePage, boolean check_range, boolean check_dirty)
      Этим методом пользоваться аккуратно, его булевыми параметрами, сомневаетесь - тогда true
      protected boolean isClosed()  
      protected byte[] map​(int cachePage, int persistPage)
      Проецирование страницы из постоянной памяти на кеш
      M memoryInfo()
      Получение информации о памяти
      protected int persist2cache​(int persistPage)
      Возвращает индекс кешированной страницы для постоянной страницы
      byte[] readPage​(int page)
      Чтение страницы.
      protected byte[] readPage_alloc​(int page)  
      protected byte[] readPage_mapped​(int cidx, int page)  
      xyz.cofe.fn.Tuple2<UsedPagesInfo,​UsedPagesInfo> reducePages​(int pages)
      Уменьшение кол-ва используемых страниц
      xyz.cofe.fn.Tuple2<UsedPagesInfo,​UsedPagesInfo> resizeCachePages​(int pages)
      Изменение размера кеша.
      protected int unmap​(int cachePage)
      выгрузка страницы
      protected int unmapCandidate​(List<Integer> pages, boolean clean)
      Выбор кандидата (страница кеша) на выгрузку
      void writePage​(int page, byte[] data)
      Запись страницы
      protected void writePage_alloc​(int page, byte[] data)  
      protected void writePage_mapped​(int cidx, int page, byte[] data)  
    • Constructor Detail

      • CachePagedDataBase

        protected CachePagedDataBase​(S state)
        Конструктор
        Parameters:
        state - внутреннее состояние
      • CachePagedDataBase

        protected CachePagedDataBase​(D cachePages,
                                     ResizablePages<M> persistentPages,
                                     S state)
        Конструктор
        Parameters:
        cachePages - Кеш память (быстрая)
        persistentPages - Постоянная (медленная)
      • CachePagedDataBase

        public CachePagedDataBase​(D cachePages,
                                  ResizablePages<M> persistentPages)
        Конструктор
        Parameters:
        cachePages - Кеш память (быстрая)
        persistentPages - Постоянная (медленная)
    • Method Detail

      • cacheHitMiss

        public xyz.cofe.fn.Tuple2<Long,​Long> cacheHitMiss()
      • isClosed

        protected boolean isClosed()
      • memoryInfo

        public M memoryInfo()
        Description copied from interface: PagedData
        Получение информации о памяти
        Specified by:
        memoryInfo in interface PagedData<S extends CachePagedState<M,​D>>
        Returns:
        Получение информации о памяти
      • persist2cache

        protected int persist2cache​(int persistPage)
        Возвращает индекс кешированной страницы для постоянной страницы
        Parameters:
        persistPage - постоянная страница, допустимые значения: от 0 и более
        Returns:
        значение: от 0 и более - целевая страница кеша, или -1 (и меньше) - страница не спроецирована
      • cache2persist

        protected int cache2persist​(int cachePage)
        Возвращает индекс постоянной страницы для кешированной страницы
        Parameters:
        cachePage - кешированная страница, допустимые значения: от 0 и более
        Returns:
        значение: от 0 и более - постоянная страница (индекс), или -1 (и меньше) - страница не спроецирована (свободная ячейка кеша)
      • cache2persist_mut

        protected int cache2persist_mut​(int cachePage)
      • dirty

        protected boolean dirty​(int cachePage)
        Проверка, что страница является "грязной"
        Parameters:
        cachePage - индекс страницы кеша
        Returns:
        true - содержит не сохраненные изменения
      • dirty_mut

        protected boolean dirty_mut​(int cachePage)
      • flush

        protected int flush​(int cachePage)
        Сохранение страницы кеша
        Parameters:
        cachePage - индекс страницы кеша
        Returns:
        индекс persistentPage или значение меньше 0
      • flush_mut

        protected int flush_mut​(int cachePage)
      • flush0

        protected int flush0​(int cachePage,
                             boolean check_range,
                             boolean check_dirty)
        Этим методом пользоваться аккуратно, его булевыми параметрами, сомневаетесь - тогда true
        Parameters:
        cachePage - номер страницы
        check_range - проверка, что номер страницы указан в допустимом диапазоне
        check_dirty - проверка, что страница грязная
        Returns:
        номер страницы в большой памяти
      • flush

        public void flush()
        Description copied from interface: Flushable
        Принудительная запись накопившийся изменений на диск/носитель информации
        Specified by:
        flush in interface Flushable
      • unmap

        protected int unmap​(int cachePage)
        выгрузка страницы
        Parameters:
        cachePage - страница
        Returns:
        индекс persistentPage или значение меньше 0
      • cleanDirtyPages

        protected xyz.cofe.fn.Tuple2<List<Integer>,​List<Integer>> cleanDirtyPages()
        Получение списка чистых/грязных страниц
        Returns:
        чистые/грязные страницы (cachePage)
      • unmapCandidate

        protected int unmapCandidate​(List<Integer> pages,
                                     boolean clean)
        Выбор кандидата (страница кеша) на выгрузку
        Parameters:
        pages - список страниц из которых выбор
        clean - true - это список чистых страниц,
        false - это список грязных страниц
        Returns:
        страница или -1 (и меньше),
      • allocCachePage

        protected int allocCachePage()
        Выделение свободной страницы

        Возможные сценарии

        • В кеше есть еще не размеченная область cache2prst[x] < 0
        • В кеше есть чистые страницы которые можно занять
        • В кеше нет чистых страниц, необходимо выгружать страницу

        Используется в readPage_alloc(int), writePage_alloc(int, byte[])

        Returns:
        индекс страницы
      • map

        protected byte[] map​(int cachePage,
                             int persistPage)
        Проецирование страницы из постоянной памяти на кеш
        Parameters:
        cachePage - страница кеш-памяти
        persistPage - страница постоянной памяти
        Returns:
        содержание спроецированной страницы
      • readPage

        public byte[] readPage​(int page)
        Чтение страницы.

        Варианты

        • Страница спроецирована
        • Страница не спроецирована
          • необходимо - выделить свободную страницу в кеше
          • если не достигнут предел по кешу
            • тогда занять свободную страницу
            • иначе выгрузить редко используемую страницу и занять ее
        Specified by:
        readPage in interface PagedData<S extends CachePagedState<M,​D>>
        Parameters:
        page - индекс страницы, от 0 и более
        Returns:
        массив байтов, по размеру равный UsedPagesInfo.pageSize() или меньше, если последняя страница
      • readPage_mapped

        protected byte[] readPage_mapped​(int cidx,
                                         int page)
      • readPage_alloc

        protected byte[] readPage_alloc​(int page)
      • writePage

        public void writePage​(int page,
                              byte[] data)
        Запись страницы

        Возможные варианты

        Страница спроецирована (writePage_mapped(int, int, byte[]))

        • изменить страницу в кеше
        • отметить страницу как dirty (auto)

        Страница не спроецирована (writePage_alloc(int, byte[]))

        • необходимо - выделить свободную страницу в кеше
          • если не достигнут предел по кешу
            • тогда занять свободную страницу
            • иначе выгрузить редко используемую страницу и занять ее
        • если data меньше pageSize
          • считать страницу из persist в cache
        • изменить страницу в кеше
        • отметить страницу как dirty (auto)
        Specified by:
        writePage in interface PagedData<S extends CachePagedState<M,​D>>
        Parameters:
        page - индекс страницы, от 0 и более
        data - массив байтов, размер не должен превышать UsedPagesInfo.pageSize()
      • writePage_mapped

        protected void writePage_mapped​(int cidx,
                                        int page,
                                        byte[] data)
      • writePage_alloc

        protected void writePage_alloc​(int page,
                                       byte[] data)
      • extendPages

        public xyz.cofe.fn.Tuple2<UsedPagesInfo,​UsedPagesInfo> extendPages​(int pages)
        Description copied from interface: ExtendablePages
        Расширение кол-ва используемых страниц
        Specified by:
        extendPages in interface ExtendablePages<S extends CachePagedState<M,​D>>
        Parameters:
        pages - сколько страниц нужно добавить
        Returns:
        Сколько было и сколько стало памяти
      • reducePages

        public xyz.cofe.fn.Tuple2<UsedPagesInfo,​UsedPagesInfo> reducePages​(int pages)
        Description copied from interface: ReduciblePages
        Уменьшение кол-ва используемых страниц
        Specified by:
        reducePages in interface ReduciblePages<S extends CachePagedState<M,​D>>
        Parameters:
        pages - сколько страниц нужно убрать
        Returns:
        Сколько было и сколько стало памяти
      • resizeCachePages

        public xyz.cofe.fn.Tuple2<UsedPagesInfo,​UsedPagesInfo> resizeCachePages​(int pages)
        Изменение размера кеша.
        Parameters:
        pages - сколько страниц отвести под кеш
        Returns:
        Сколько было и сколько стало памяти