class_docstr: Database for `PreprocessingCache` class.
  Includes low-level idea of caching pipeline preprocessor items using relational database.
  
  :param cache_dir: path to the place where cache files should be stored.
class_docstr_tok: ["Database","for","`","PreprocessingCache","`","class",".","Includes","low-level","idea","of","caching","pipeline","preprocessor","items","using","relational","database",".",":","param","cache_dir",":","path","to","the","place","where","cache","files","should","be","stored","."]
code: def __init__(self, cache_dir: Optional[str] = None):
      super().__init__(
          "preprocessors",
          cache_dir,
          False,
          ["preprocessors_hit", "preprocessors_total"],
      )
      self._init_db()
  
file_path: FEDOT/fedot/core/caching/preprocessing_cache_db.py
imports: import pickle
  import sqlite3
  from contextlib import closing
  from typing import Dict, Optional, Tuple
  from fedot.core.caching.base_cache_db import BaseCacheDB
  from fedot.core.operations.evaluation.operation_implementations.data_operations.categorical_encoders import OneHotEncodingImplementation
  from fedot.core.operations.evaluation.operation_implementations.data_operations.sklearn_transformations import ImputationImplementation
  from fedot.preprocessing.preprocessing import DataPreprocessor
label_desc: Use image node_id 1 to create a new PreprocessingCacheDB object from inherited base classes: BaseCacheDB with example: obj = PreprocessingCacheDB(cache_dir)