便于在MATLAB中进行缓存以进行大数据分析

时间:2014-07-28 15:56:27

标签: matlab caching

我将在MATLAB中同时运行20个函数/过程来分析大数据集。每个函数都访问这个大数据集的一部分。缓存是我的主要组件,我需要证明MATLAB可以使用缓存容量。我想:

  1. 每个函数默认保留缓存空间以保存/修改/删除/查找缓存空间中的一些内容/数据

  2. 每个函数都可以从其他函数保留的其他缓存空间中请求一些所需的内容/数据

  3. 你可以告诉我这是怎么可能的吗?我需要一些提示。

1 个答案:

答案 0 :(得分:1)

检查MatLab(和persistent函数)中mlock变量的文档。它部分涵盖了您的需求。但是,在访问持久变量时会遇到一些问题,并且在更新函数源文件时会清除持久变量。

我建议您使用缓存文件(当然,如果我正确理解您的意思)。 例如,您可以从这种方法开始(我假设每个函数都在单独的* .m文件中)

function CacheFileName = GenerateCacheFileName(Caller)
    CacheFileName = sprintf('%s.cache.mat',Caller);
    % you may use any alogrithm that makes sense for you
    % but keep the MAT extension for the simple syntax of LOAD function
end


function Data = LoadCachedData(Caller)
    % Generate cache file name for current function
    CacheFileName = GenerateCacheFileName(Caller);
    if exist(CacheFileName,'file')==2
        % load cache file if it exists
        RawData = load(CacheFileName);
        Data = RawData.CacheStructure;
    else
        % or initialize the cahce with empty structure
        Data = struct;
    end
end


function DoSomethingUsingCache(arguments)

    % Generate cache file name for current function
    CacheFileName = GenerateCacheFileName(mfilename);

    % Load cached data
    if exist(CacheFileName,'file'==2)
        % load cache file if it exists
        CacheStructure = load(CacheFileName);
    else
        % or initialize the cahce with current datestamp
        CacheStructure.Created = now;
    end

    % do what you need here

    % Save data to cache for later use
    save(CacheFileName,'CacheStructure');
end

如果您需要从其他功能加载一些数据,请执行以下操作:

function DoSomethingUsingCacheOfOtherFunction(arguments)

    % Load chached data of other function
    CacheStructure2 = LoadCachedData('DoSomethingUsingCache');

    % do what you need here

    if isfield(CacheStructure,'Param4')
        CacheStructure.Param4 = CacheStructure.Param4 + 10;
    else
        CacheStructure.Param4 = 0;
    end

    % you may also update the cache for other function if you need
    save(CacheFileName2,'CacheStructure2');
end

显然,这种方法应该设计得恰当,否则MatLab将花费大部分时间来加载/保存您的数据。

原则上,这种方法可以作为MatLab类与set / get方法一起呈现,以便更轻松地编写代码。 可能是如果您在根命名空间中创建了一个对象,则可以将其用作"缓存的数据管理器"。