具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在各个行业中,随着技术的发展,数据的重要性越来越受人们重视,而且需要存储和记录的数据也越来越多,对存储技术在容量上的需求也越来越高,传统的存储技术已难以满足对存储的需求,因此,越来越多的产品通过外接其他的存储设备来提高存储数据的容量。例如,在智能汽车行业中,随着汽车域控制器等技术的发展,域控制器的架构会导致汽车中的MCU(Micro Controller Uni,微控制单元)的功能和数据量爆炸式地增长,以至于传统地EEPROM(Electrically Erasable Programmable read only memory,带电可擦可编程只读存储器)在容量上已经不能解决如存储大量运行时地log日志(例如行车记录仪所记录的数据)、存储可配置的参数等一般性问题,因此,多数域控制器架构都会通过外部添加EMMC(Embedded Multi Media Card,嵌入式多媒体控制器)来记录大量数据以支持后期进行的数据分析等目的。
然而,即使增加了存储设备的容量,工作过程中不断产生的数据也可能会迅速地填满新的存储空间,存储空间不足的困扰将频繁地出现并影响存储数据等工作,例如存储数据时由于存储空间已满而导致需要记录的数据存储失败,进而丢失数据。在MCU等控制芯片或系统中,数据一般是以文件的格式进行存储的,而且可以通过各种文件系统来实现对数据或文件的读写,以存储和取出数据。一般来说,文件系统基本都会提供基于文件句柄等操作方式的通用性API,以使用户可以基于这些通用性API实现包括删除文件在内的多种对文件的操作。因此,当存储空间已经存满数据的情况下,用户可以通过删除旧的数据来增加可以存储数据的空间。然而,删除数据等操作需要用户主动操作,而且在删除一些数据后腾出的新的储存空间也可能很快被新的数据填满,即用户可能需要频繁的主动删除数据,对用户十分不便。而且,用户在主动删除数据时可能由于人为的失误删除错误的数据文件,使得后期对记录的数据的维护工作更加困难。
对此,本申请提出一种数据写入方法、装置、存储介质和计算机设备,可以使用户在指定的容量有限的存储空间中存储数据,且能够在用户存满数据后主动删除最旧的数据,以保证新的数据能够及时存储,提高了存储空间利用率,而且不需要用户主动去删除旧文件,给用户提供便利。
接下来对本申请实施例进行详细说明。
如图1所示,图1是本申请根据一示例性实施例示出的一种数据写入方法的流程图,包括以下步骤:
步骤S102:在执行目标数据的写入事件时,在指定的文件集中查找第一文件,第一文件为具有剩余存储容量的文件,文件集中的文件的存储容量不超过第一预设值;
步骤S104:在文件集中未查找到第一文件,且文件集中的文件数量到达第二预设值的情况下,删除文件集中修改时间最早的文件,并在文件集中新创建第一文件;
步骤S106:将目标数据写入第一文件。
在本申请中,目标数据是指需要写入文件进行存储的一类数据,例如,目标数据可以是行车记录仪所记录的数据。目标数据可以通过文件系统写入指定的文件中进行存储,而在需要时则可以通过文件系统读取文件以获取目标数据。在一些实施例中,目标数据的数据格式可以是字符类型,例如文字或数字形式表达的数据,字符类型的目标数据可以直接写在文件中。在一些实施例中,目标数据也可以是非字符类型的数据,例如图片数据或音视频数据,非字符类型的目标数据可以通过编解码等方式转换成可以进行读写的数据,再将转换后的数据写入文件中,本申请对此不做限制。
在本申请中,指定的文件集是针对目标数据所创建的一系列文件的集合,使得在存储目标数据时,目标数据均写入该文件集中的文件中进行存储,而在需要读取目标数据时,也可以通过在该文件集中查找读取数据,方便数据存储和管理。在本申请中,该指定的文件集中的文件的存储容量被设置为不能超过第一预设值,即最大文件值,从而限制文件集中每个文件的大小。并且,在本申请中,该指定的文件集中的文件的数量也被设置为不能超过第二预设值,即最大文件数量,从而限制文件集中的文件数量。通过设置第一预设值和第二预设值,本申请限制了该指定的文件集所能存储的最大容量,即第一预设值和第二预设值的乘积,使得目标数据的存储量不会超过该指定文件集的最大容量,保证了目标数据在有限的存储空间中进行存储,避免了现有的存储设备的存储空间不足时还需要添加新的存储设备等麻烦。例如,若假设指定的文件集1中的第一预设值为1024bytes,而第二预设值为5,则该指定的文件集中最多可以包括5个文件,而且每个文件的大小最多为1024bytes,则该指定的文件集的最大容量为5120bytes,即目标数据的存储空间最多为5120bytes,因此,只要存储设备中能够保留出5120bytes的空间,即可以使用本申请所述方法实现对目标数据的存储。
在一些实施例中,上述第一预设值可以根据目标数据的常规大小进行设计。例如,目标数据为log日志数据,而每次存储的数据量大约在512bytes到1024bytes之间,则可以将第一预设值设计为1024bytes,使得每次写入目标数据时所涉及的文件数量尽可能的少。
在一些实施例中,上述第二预设值则可以根据可以分配给目标数据进行存储的存储空间以及第一预设值进行设计。例如,在一个存储设备中,可以分配2G的空间给目标数据进行存储,而且每个文件所能存储数据的最大值,即第一预设值的大小为40M时,则第二预设值则可以设计为50,即该指定的文件集中所能包括的文件的数量不会超过50个。
在一些实施例中,上述分配给目标数据的存储空间可以根据需要保留的目标数据的常规数据量进行设计,例如,目标数据为行车记录仪记录的一些数据,该数据被设置为至少保留7天,而1天中可能产生的数据量大约为1G,则分配给该目标数据的存储空间可以设计为7G。
在一些实施例中,在存储设备存储容量充足的情况下,上述第一预设值、第二预设值以及分配给目标数据的存储空间还可以设计得更高一些,以预留一些缓冲空间,避免部分意外情况下出现大量需要存储的目标数据,而影响对目标数据的存储规划。例如,在上述三个例子中,分别可以将第一预设值设计为2048bytes,将第二预设值设计为60,以及将分配给目标数据的存储空间设计为8G。
在一些实施例中,上述指定的文件集可以是在同一个指定的文件夹中的文件,使得存储目标数据的所有文件可以存储在同一个文件夹中,以方便用户读取目标数据。而且在一些实施例中,上述指定的文件夹的名称可以与目标数据的含义具有一定的相关性,例如目标数据为行车记录仪所记录的一些数据时,该指定的文件夹的名称可以是“/Monitor”,以便于用户快速定位目标数据所存储的文件所在的位置和确认该文件夹所存储的数据所表示的含义。在一些实施例中,文件系统中的文件还可能分区进行存储,则在指定文件集中的文件所在的文件夹时,还可以指定该文件夹所在的分区,以便于用户准确定位目标数据所存储的位置。
在一些实施例中,上述指定的文件集中的文件可以满足设定的命名规则,例如,在一些实施例中,上述指定的文件集可以是指定的文件夹中满足指定文件命名规则的所有文件,其中,设定的命名规则可以包括文件的文件名中包括指定字符串,或文件的文件名符合指定的正则表达式等。而在一些实施例中,上述指定字符串和指定的正则表达式可以根据目标数据的含义进行设置,以便于用户快速定位目标数据所存储的文件所在的位置和确认该文件所存储的数据所表示的含义。例如,在一些实施例中,目标数据为行车记录仪所记录的一些数据,则上述指定字符串可以是“trace”,或者上述指定的正则表达式可以是“trace^[0-9]*”,其分别可以对应于文件名中包含“trace”的文件以及文件名为“trace”后加一个任意数字的文件,例如“trace0”、“trace1”等。在其他的实施例中,上述指定的文件集中各个文件的文件名还可以根据其他方式进行设置,本申请对此不做限制。值得注意的是,在指定的文件夹中,还可以保存有非指定的文件集中的文件的其他文件,该指定的文件夹中的文件是否属于指定的文件集中的文件可以根据文件名或其他方式进行区分,例如,还可以根据文件的扩展名即文件的格式类型进行区分,本申请对此不做限制。
在步骤S102和S104中,当对目标数据的写入事件触发时,需要先找出可以写入目标数据的第一文件。首先,可以在指定的文件集中查找具有剩余存储容量的第一文件。具体地,可以分别对比各个文件的文件大小和第一预设值,若该文件的大小小于第一预设值,则可以认为该文件具有剩余存储容量,即可以将数据写入该文件中而使得该文件的大小不会超过第一预设值。在一些实施例中,可以遍历文件集中的文件,直到查找到第一个具有剩余存储容量的文件,即可以将该文件作为第一文件并停止查找,第一文件即为可以写入目标数据的文件。具体地,可以获取该文件的文件句柄,以使得文件系统可以基于该文件句柄对该文件进行操作,例如写入数据等。
在一些实施例中,具有剩余存储容量的第一文件往往是修改时间最晚的文件,因此,在查找具有剩余存储容量的第一文件时,还可以是查找指定的文件集中修改时间最晚的文件,再将该文件的大小与第一预设值进行对比,从而判断该文件是否有具有剩余存储容量的第一文件,而且,若该文件的大小以达到了第一预设值,即修改时间最晚的文件也不是具有剩余存储容量的第一文件时,也可以认为该文件集中不存在具有剩余存储容量的第一文件。
当在文件集中未查找到具有剩余存储容量的第一文件时,则说明文件集当前没有可以写入数据的文件,则可以在文件集中创建新的文件,将该文件作为第一文件,以供目标数据写入。值得注意的是,由于本申请的文件集规定了文件的数量不能超过第二预设值,因此,在上述新创建第一文件之前,若文件集中的文件数量已达到第二预设值,则需要删除文件集中的文件,以避免文件集中的文件数量超过第二预设值,其中,由于数据存储的时间越早,则该数据的重要性可能就越低,因此,删除的文件可以是文件集中修改时间最早的文件。
在一些实施例中,在文件集中创建第一文件时,第一文件的文件名可以根据该文件集中其他文件的文件名命名规律继续设置。例如,原文件集中所包括的文件的文件名分别为“trace0”、“trace1”以及“trace2”,则新创建的第一文件的文件名则可以设置为“trace3”,使得文件集中的各个文件之间的关系更加直观。
在一些实施例中,在文件集中创建第一文件前,若由于文件集中文件数量达到第二预设值而删除了文件集中修改时间最早的文件,则新创建的第一文件的文件名还可以是沿用该删除了的修改时间最早的文件的文件名,即新创建的第一文件的文件名可以与所删除的修改时间最早的文件的文件名相同。例如,原文件集中所包括的文件的文件名分别为“trace0”、“trace1”以及“trace2”,且该文件集的第二预设值为3,则在创建新的文件之前,需要删除其中修改时间最早的文件,假设该文件为“trace0”,则新创建的文件的文件名可以重新设置为“trace0”,使得最终文件集中的文件的文件名保持不变,方便用户快速确认是否为文件集中的文件。
在一些实施例中,在指定的文件集中查找第一文件之前,还可以先判断指定的文件集是否为空集,若文件集为空集,则可以先在文件集中创建第一文件,避免没有文件可以写入目标数据的情况发生。在一些实施例中,在文件集中创建的第一文件的文件名可以根据预先设定的命名规则进行设置,例如,在目标数据为行车记录仪所记录的数据的例子中,若文件集中不存在任何文件,则在执行目标数据的写入事件前,可以在文件集中创建一个名为“trace0”的文件,且该文件将作为第一文件。
在步骤S106中,在找到可以写入目标数据的第一文件后,则可以将目标数据写入到第一文件中,以对目标数据进行存储。
在一些实施例中,需要存储的目标数据可能具有较大的数据量,而由于文件集中规定文件的存储空间不能超过第一预设值,若需要进行存储的目标数据超过了第一文件的剩余存储容量,则第一文件中只能写入目标数据中的一部分,其写入的数据量为目标数据的数据量和第一文件的剩余存储容量的差值,使得第一文件中存储的数据不会超过第一预设值。而在目标数据不能全部写入第一文件的情况下,则可以对目标数据写入第一文件后剩余的未写入第一文件的数据重新执行一次数据写入事件,即重新查找可以写入数据的第一文件,并将剩余的数据写入新的第一文件中。同样地,若剩余的数据无法全部的写入新的第一文件中,则进一步查找新的第一文件以及继续写入新的第一文件中,重复循环此过程,直到所有目标数据均已写入文件集的文件中,完成对目标数据的写入事件。
通过上述方法,本申请保证了文件集中一定存在可以写入数据的第一文件以供新来的目标数据存储,避免出现数据存储失败而丢失数据等情况。而且,通过在文件数量可能超出第二预设值之间将修改时间最早的文件删除,可以保证文件集中的文件数量不会超过第二预设值,则存储目标数据所占用的空间也不会超过预先设计的分配给目标数据进行存储的空间,而且该存储空间中存储的目标数据都是最新的,即重要性最高的一批数据,最终可以实现循环利用有限的存储空间存储目标数据,提高了存储空间利用率,而且不需要用户去主动的删除文件以腾出存储空间,用户只需要触发目标数据的写入事件即可,为用户带来了便利。
与前述方法的实施例相对应,本申请还提供了一种数据写入装置。
如图2所示,图2是本申请根据一示例性实施例示出的一种数据写入装置的框图,所述装置包括:
查找模块210,用于在执行目标数据的写入事件时,在指定的文件集中查找第一文件,第一文件为具有剩余存储容量的文件,文件集中的文件的存储容量不超过第一预设值;
以及在文件集中未查找到第一文件,且文件集中的文件数量到达第二预设值的情况下,删除文件集中修改时间最早的文件,并在文件集中新创建第一文件;
写入模块220,用于将目标数据写入第一文件。
在一些实施例中,文件集中的文件可以满足设定的命名规则,命名规则至少包括以下一种:文件的文件名包括指定字符串;或文件的文件名符合指定的正则表达式。
在一些实施例中,在指定的文件集中查找第一文件之前,查找模块210还可以用于:判断文件集是否为空集;若文件集为空集,则在文件集中创建所述第一文件。
在一些实施例中,新创建的第一文件的文件名与所删除的修改时间最早的文件的文件名可以相同。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请还提供一种数据写入系统,该系统包括控制芯片和存储设备,其中,该控制芯片用于生成和处理目标数据的写入事件,而存储设备则用于存储目标数据;具体地,该控制芯片上设置有存储设备接口、文件系统、数据写入管理器以及多个应用程序;其中,存储设备接口用于与存储设备通信;文件系统用于以文件形式管理目标数据;数据写入管理器用于使用本申请任意实施例所述的数据写入方法执行目标数据的写入事件;应用程序则用于生成目标数据的写入事件。
如图3所示,图3是本申请根据一示例性实施例示出的一种本申请所述数据写入系统的结构示意图。其中,控制芯片100上设置有存储设备接口110、文件系统120、数据写入管理器130以及多个应用程序140,而且该控制芯片100通过存储设备接口110与系统外部的一个存储设备相连,其中,本申请上述数据写入方法由数据写入管理器130执行,而且数据写入管理器130提供了唯一的数据写入事件触发接口给各个应用程序140,各个应用程序140可以通过该数据写入事件触发接口触发数据写入管理器130执行本申请上述数据写入方法,通过文件系统120所提供的各个API接口对文件进行操作,而文件系统120中的文件数据通过存储设备接口110与外部的存储设备进行读写以及存储。
在一些实施例中,上述控制芯片100可以是各个组件和模块集成在一起的一个芯片,例如该控制芯片100可以是MCU或者SOC(System On Chip,系统级芯片);在一些实施例中,上述控制芯片100的各个组件和模块也可以分属在不同的多个芯片上,本申请对此不做限制。
在一些实施例中,上述文件系统120可以是FAT、NTFS、EXT、HFS等文件系统120中的一种,也可以是其他的文件系统120,本申请对此不做限制。
在一些实施例中,上述存储设备可以是EMMC、EEPROM、DRR等存储设备中的一种,也可以是其他的存储设备,本申请对此不做限制。
本申请还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述任一实施例所述的方法。
图4示出了本申请所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器401、存储器402、输入/输出接口403、通信接口404和总线405。其中处理器401、存储器402、输入/输出接口403和通信接口404通过总线405实现彼此之间在设备内部的通信连接。
处理器401可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请所提供的技术方案。处理器401还可以包括显卡,所述显卡可以是Nvidia titan X显卡或者1080Ti显卡等。
存储器402可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器402可以存储操作系统和其他应用程序140,在通过软件或者固件来实现本申请所提供的技术方案时,相关的程序代码保存在存储器402中,并由处理器401来调用执行。
输入/输出接口403用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口404用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线405包括一通路,在设备的各个组件(例如处理器401、存储器402、输入/输出接口403和通信接口404)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器401、存储器402、输入/输出接口403、通信接口404以及总线405,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本申请方案所必需的组件,而不必包含图中所示的全部组件。
本申请还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一实施例所述的方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。