CN113849119A - 存储方法、存储装置和计算机可读存储介质 - Google Patents

存储方法、存储装置和计算机可读存储介质 Download PDF

Info

Publication number
CN113849119A
CN113849119A CN202010885820.9A CN202010885820A CN113849119A CN 113849119 A CN113849119 A CN 113849119A CN 202010885820 A CN202010885820 A CN 202010885820A CN 113849119 A CN113849119 A CN 113849119A
Authority
CN
China
Prior art keywords
written
key
value
stored
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010885820.9A
Other languages
English (en)
Other versions
CN113849119B (zh
Inventor
韩晓飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jingdong Technology Holding Co Ltd
Original Assignee
Jingdong Technology Holding Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jingdong Technology Holding Co Ltd filed Critical Jingdong Technology Holding Co Ltd
Priority to CN202010885820.9A priority Critical patent/CN113849119B/zh
Priority claimed from CN202010885820.9A external-priority patent/CN113849119B/zh
Publication of CN113849119A publication Critical patent/CN113849119A/zh
Application granted granted Critical
Publication of CN113849119B publication Critical patent/CN113849119B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0674Disk device
    • G06F3/0676Magnetic disk device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开涉及一种存储方法、存储装置和计算机可读存储介质,涉及计算机技术领域。本公开的方法包括:响应于缓存容器的写入方法的调用,获取待写入的键Key和对应的待写入的值Value;读取缓存容器中上下文对象的配置信息,配置信息包括:本地磁盘对应的已有Key集合和数据处理方法;确定待写入的Key是否存在于本地磁盘对应的已有Key集合;在待写入的Key不存在于本地磁盘对应的已有Key集合的情况下,根据数据处理方法,对待写入的Key和对应的待写入的Value进行处理;将处理后的待写入的Key和对应的待写入的Value写入本地磁盘的持久化文件中。

Description

存储方法、存储装置和计算机可读存储介质
技术领域
本公开涉及计算机技术领域,特别涉及一种存储方法、存储装置 和计算机可读存储介质。
背景技术
HDFS(Hadoop Distributed File System,Hadoop分布式文件系 统)和AWS(Amazon Web Services,亚马逊云计算服务)是目前常 用的分布式文件存储系统。利用分布式存储系统的过程包括:(1) 构建文件服务集群;(2)通过集群web视窗为用户分配账号及权限;
(3)通过相应的编程语言客户端连接集群;(4)认证账号及权限取 的操作权;(5)创建Bucket(桶)并制定其权限;(6)通过客户 端上传文件到指定的Bucket或从指定Bucket取数据。
发明内容
发明人发现:现有的分布式存储系统,不适合轻量级业务系统接 入,会增加系统的复杂度,并且对数据进行存取时,需要远程上传下 载对网络带宽、稳定性的要求较高,对于静态资源等小文件的存取效 率不高。业务系统工作过程产生的小文件数据需要实时自动的进行缓 存和读取,存取效率影响业务系统的运行效率,因此,分布式存储系 统不太适合这类数据的存储。
本公开所要解决的一个技术问题是:如何提高小文件等类型的数据 的存取效率。
根据本公开的一些实施例,提供的一种存储方法,包括:响应于缓 存容器的写入方法的调用,获取待写入的键Key和对应的待写入的值 Value;读取缓存容器中上下文对象的配置信息,配置信息包括:本地 磁盘对应的已有Key集合和数据处理方法;确定待写入的Key是否存 在于本地磁盘对应的已有Key集合;在待写入的Key不存在于本地磁 盘对应的已有Key集合的情况下,根据数据处理方法,对待写入的 Key和对应的待写入的Value进行处理;将处理后的待写入的Key和 对应的待写入的Value写入本地磁盘的持久化文件中。
在一些实施例中,该方法还包括:获取预设时间内本地磁盘和数据 库已存储数据的读取信息,其中,已存储的数据包括对应的Key和 Value;根据已存储数据的读取信息确定已存储数据的热度值;根据已 存储数据的热度值确定已存储数据的缓存级别,其中,缓存级别包括: 第一级别为虚拟机内存、本地磁盘和数据库同时缓存,第二级别缓存 为本地磁盘和数据库同时缓存,第二级别为数据库缓存,随着已存储 数据的热度值降低,对应的缓存级别分别为第一级别、第二级别和第 三级别;根据已存储数据的缓存级别,调整已存储数据的存储区域。
在一些实施例中,获取预设时间内本地磁盘和数据库已存储数据 的读取信息包括:按照第一预设频率获取第一预设时间内已存储数据 的第一读取信息,第一读取信息包括读取次数;根据已存储数据的读 取信息确定已存储数据的热度值包括:将已存储数据在第一预设时间 内的读取次数确定为已存储数据的短期热度值。
在一些实施例中,根据已存储数据的热度值确定已存储数据的缓 存级别包括:将已存储数据的短期热度值分别与各个缓存级别对应的 第一短期热度阈值、第二短期热度阈值和第三短期热度阈值进行比对; 根据比对结果确定已存储数据的缓存级别。
在一些实施例中,获取预设时间内本地磁盘和数据库已存储数据 的读取信息包括:按照第二预设频率获取第二预设时间内已存储的第 二读取信息,第二读取信息包括连续读取的天数;根据已存储数据的 读取信息确定已存储数据的热度值包括:根据已存储数据在第二预设 时间内的连续读取的天数和已存储数据已存储的天数确定已存储数据 的长期热度值,其中,连续读取的天数越多,已存储的天数越少则长 期热度值越大。
在一些实施例中,根据已存储数据在第二预设时间内的连续读取 的天数和已存储数据已存储的天数确定已存储数据的长期热度值包括: 根据已存储数据在第二预设时间内的连续读取的天数、已存储数据已 存储的天数,衰减系数和外部影响系数确定数据的长期热度值,其中, 衰减系数越大,已存储数据的长期热度值越大,外部影响系数根据数据对应的业务需求设置,外部影响系数越大,数据的长期热度值越大。
在一些实施例中,长期热度值采用以下公式确定:
Figure BDA0002655536920000031
其中,t为数据在第二预设时间内的连续读取的天数,N为数据已 存储的天数,G为衰减系数且小于1,X为外部影响系数。
在一些实施例中,该方法还包括:在待写入的Key存在于本地磁 盘对应的已有Key集合的情况下,根据数据处理方法,对待写入的 Value进行处理;确定处理后待写入的Value与待写入的Key对应的 已存储的Value的数据长度是否发生变化;在未发生变化的情况下, 将处理后待写入的Value覆盖待写入的Key对应的已存储的Value; 在发生变化的情况下,将处理后待写入的Value写入新的位置,并修 改已存储的待写入的Key指向新的位置,并保留已存储的Value对应 位置的空间。
在一些实施例中,将处理后待写入的Value覆盖待写入的Key对 应的已存储的Value或者写入新的位置包括:当前线程确定已存储的 待写入的Key和待写入的Key对应的已存储的Value是否被其他并发 线程锁定;在未被锁定的情况下,当前线程将已存储的待写入的Key 和待写入的Key对应的已存储的Value利用分片锁进行锁定;当前线 程在将处理后待写入的Value覆盖待写入的Key对应的已存储的 Value或者写入新的位置后,释放分片锁。
在一些实施例中,当前线程将已存储的待写入的Key和待写入的 Key对应的已存储的Value利用分片锁进行锁定包括:根据第三预设 时间内待写入的Key对应的读取耗费的时间,确定加锁策略;在加锁 策略为第一策略的情况下,当前线程和其他并发线程,按照先进先操 作的方式确定进行锁定的线程,在当前线程为最先进入的线程的情况 下,当前线程将待写入的Key对应的已存储的Value利用一级分片锁 进行锁定,其中,一级分片锁锁定的内容在锁定期间不允许其他并发 线程读写;在加锁策略为第二策略的情况下,当前线程和其他并发线 程进入锁队列,在当前线程为第四预设时间内最后进入锁队列的线程 的情况下,当前线程将待写入的Key对应的已存储的Value利用二级 分片锁进行锁定,其中,二级分片锁锁定的内容在锁定期间不允许其 他并发线程;在加锁策略为第三策略的情况下,当前线程将待写入的 Key对应的已存储的Value利用三级分片锁进行锁定,其中,三级分 片锁锁定的内容在锁定期间不允许其他并发线程写入。
在一些实施例中,将处理后的待写入的Key和对应的待写入的 Value写入本地磁盘的持久化文件包括:将处理后的待写入的Value 写入磁盘的持久化文件中的内容部分,将处理后待写入的Key,待写 入的Value在持久化文件中存储的起止位置写入持久化文件的文件头 中,并将待写入的Key和待写入的Value存储的起止位置加载至缓存 容器的上下文对象中。
在一些实施例中,将处理后的待写入的Key和对应的待写入的 Value写入本地磁盘的持久化文件还包括:在持久化文件的内容或文 件头空间不足的情况下,根据持久化文件中已存储数据在第五预设时 间内的读取次数,选取冷数据进行删除释放存储空间。
在一些实施例中,响应于缓存容器的写入方法的调用,获取待写 入的键Key和对应的待写入的值Value包括:响应于本地业务系统调 用缓存容器的写入方法,获取业务系统的待写入的Key和对应的待写 入的Value;或者,监听其他业务系统对应的内存或磁盘或数据库中 变动的数据,调用缓存容器的写入方法,获取变动的数据对应的Key 和Value作为待写入的Key和对应的待写入的Value。
在一些实施例中,该方法还包括:响应于读取方法的调用,从待读 取的Key存在于配置信息中本地磁盘对应的已有Key集合查找待读取 的Key,在查找到的情况下,根据待读取的Key指向的位置,从本地 磁盘中读取待读取的Key对应的Value。
在一些实施例中,该方法还包括:响应于读取方法的调用,确定待 读取的Key是否存在于配置信息中虚拟机内存对应的已有Key集合中; 如果待读取的Key存在于虚拟机内存对应的已有Key集合中,则从虚 拟机内存中读取待读取的Key对应的Value;如果待读取的Key不存 在于虚拟机内存对应的已有Key集合中,确定待读取的Key是否存在 于配置信息中本地磁盘对应的已有Key集合中;如果待读取的Key存 在于配置信息中本地磁盘对应的已有Key集合中,则从本地磁盘中读 取待读取的Key对应的Value;如果待读取的Key不存在于配置信息 中本地磁盘对应的已有Key集合中,则从数据库中读取待读取的Key 对应的Value。
在一些实施例中,该方法还包括:通过拦截器拦截读取方法的调用, 并记录待读取的Key对应的读取次数。
在一些实施例中,该方法还包括:接收配置信息,将配置信息作为 元数据存储到本地磁盘的持久化文件中,并加载到缓存容器的上下文 对象中;其中,配置信息还包括:Key的类型、Value的类型、Value 的近似大小、Value的总大小、Value的初始起止位置、虚拟机内存对 应的已有Key集合,数据库对应的已有Key集合中至少一项,数据处 理方法包括:Key和Value分别对应的序列化方法和压缩方法中至少 一项。
在一些实施例中,该方法还包括:在系统发生异常的情况下,启动 恢复程序,扫描磁盘中文件,在扫描到带有预设标识的文件的情况下, 确定文件为持久化文件,并根据持久化文件中的元数据进行恢复。
根据本公开的另一些实施例,提供的一种存储装置,包括:获取单 元,用于响应于缓存容器的写入方法的调用,获取待写入的键Key和 对应的待写入的值Value;配置信息读取单元,用于读取缓存容器中 上下文对象的配置信息,配置信息包括:本地磁盘对应的已有Key集 合和数据处理方法;确定单元,用于确定待写入的Key是否存在于本 地磁盘对应的已有Key集合;处理单元,用于在待写入的Key不存在 于本地磁盘对应的已有Key集合的情况下,根据数据处理方法,对待 写入的Key和对应的待写入的Value进行处理;存储单元,用于将处 理后的待写入的Key和对应的待写入的Value写入本地磁盘的持久化 文件中。
根据本公开的又一些实施例,提供的一种存储装置,包括:处理器; 以及耦接至处理器的存储器,用于存储指令,指令被处理器执行时, 使处理器执行如前述任意实施例的存储方法。
根据本公开的再一些实施例,提供一种非瞬时性计算机可读存储介 质,其上存储有计算机程序,其中,该程序被处理器执行时实现前述 任意实施例的存储方法。
本公开中当业务系统工作过程产生数据需要存储时,可以调用缓存 容器的写入方法,缓存容器中上下文对象中存放配置信息,上下文对 象是基于内存的对象,属于全局对象,可以实时进行访问。待写入的 数据以Key-Value的形式进行存储。通过读取配置信息可以确定待写 入的Key是否已存在本地磁盘对应的已有Key集合,若不存在,则根 据配置信息中的数据处理方法,对待写入的Key和对应的待写入的 Value进行处理;将处理后的待写入的Key和对应的待写入的Value 写入本地磁盘的持久化文件中。基于上述过程,可以实现数据的本地 磁盘的实时自动的存储,将数据写入本地磁盘中统一的持久化文件中。 由于数据写入本地磁盘,不需要远程进行存取,解决文件存储服务依 赖远程过程调用部分占用的网络开销,提高数据存取效率,适用于业 务系统的小文件等类型的数据的存储,提高业务系统的运行效率。
通过以下参照附图对本公开的示例性实施例的详细描述,本公开 的其它特征及其优点将会变得清楚。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将 对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见 地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技 术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得 其他的附图。
图1示出本公开的一些实施例的存储方法的流程示意图。
图2示出本公开的另一些实施例的存储方法的流程示意图。
图3示出本公开的又一些实施例的存储方法的流程示意图。
图4示出本公开的再一些实施例的存储方法的流程示意图。
图5示出本公开的又一些实施例的存储方法的流程示意图。
图6示出本公开的一些实施例的存储装置的结构示意图。
图7示出本公开的另一些实施例的存储装置的结构示意图。
图8示出本公开的又一些实施例的存储装置的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案 进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实 施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实 际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。 基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开提供一种存储方法和装置,可以通过软件方式实现存储方法 和存储装置。在进行数据的存取之前,可以首先进行存储装置的初始化, 为了使后续数据存取过程的实施例更加清楚,首先结合图1描述初始化 的过程以及存储装置各部分的基本功能。
图1为本公开存储方法一些实施例的流程图。如图1所示,该实施 例的方法包括:步骤S102~S110。
在步骤S102中,启动缓存装置的初始化组件,读取用户的配置信息。
本公开的存储装置可以包括初始化组件、缓存组件、模式适配器、 拦截器、数据热度评估器以及恢复组件。初始化组件例如为启动类用于 读取用户配置信息。缓存组件例如根据用户配置初始化本地磁盘缓存容 器。模式适配器可以根据用户配置执行相应的数据刷新模式、监听模式。 拦截器可以向业务系统DAO层织入Filter(过滤器)用于前置取数拦截。数据热度评估器可以对已存储的数据的热度值进行评估。恢复组件 可以在系统发生异常时启动对应的恢复程序进行恢复。后续将会针对各 个部分进行描述。
存储装置的初始化入口可以由业务系统通过组件依赖的方式添加 到系统中,初始化组件可以在main(主要)方法中通过执行start(开 始)方法进行启动。针对Web(网络)项目可以配置servlet.xml(小服 务程序或服务连接器XML文件)通过ServletContextListener(小服务 程序或服务连接器上下文监听)接口来指定初始化方法。在启动初始化 组件前可以配置cache.properties(缓存属性)文件进行配置信息的设置,指定待存档的数据对应的Key(键)的类型、Value(值)的类型、 长度、Value的序列化方式、Value的压缩方式、工作模式中至少一项, 可以根据实际需求进行配置。
长度可以为近似值,不要求完全精确,用于预占磁盘空间,工作模 式可以包括:正常模式(Normal)、哨兵模式(Sentinel)中至少一项。 如果工作模式为Normal模式则缓存的操作权限完全交给业务系统,存 储装置进入被动操作模式,存储装置的增、删、改、查等完全由业务系 统发出指令来操作。如果工作模式为Sentinel模式,可以在HostType (主机类型)选项指定缓存装置的接口,例如,dataOpListener(数据 操作监听器)的类全路径。存储装置将会在业务系统指定的数据发生变 更时进行主动的数据存储、更新等操作。
在步骤S104中,初始化组件读取配置信息,运行缓存容器构建持 久化文件。
在启动初始化组件之后,可以利用初始化组件读取配置信息(如上 述实施例中的配置信息),运行缓存容器构建持久化文件(例如,持久 化Map)。可以首先根据配置信息初始化缓存容器(Map存储容器)。 缓存容器底层可以基于Java IO(Java输入输出)、NIO(JavaNEW IO, Java新输入输出)、CurrentHashMap(并发哈希映射)实现数据的存 储。缓存容器暴露写入(Put)、读取(Get)、删除(Delete)、销毁(Destroy)、 释放(Release)等方法。
在缓存容器初始化时会生成一个持久化文件存储于本地磁盘,持久 化文件中可以记录根据配置信息生成的元数据,例如包括:时间戳、系 统的IP地址、Key的类型、Value的类型、Value的近似大小、Value 的总大小、Value的初始起止位置[Start,End]、虚拟机内存对应的已 有Key集合、本地磁盘对应的已有Key集合、数据库对应的已有Key 集合、数据处理方法、以及各个Key对应的读取次数(初始时可以设 置为0)中至少一项,数据处理方法包括:Key和Value分别对应的 序列化方法和压缩方法中至少一项。持久化文件可以用于系统重启或 异常时进行数据的恢复。
元数据写入持久化文件后,可以加载到缓存容器的上下文(Context) 对象中。上下文(Context)对象是基于Java虚拟机(JVM)内存的对 象,可以用来快速访问缓存配置信息。持久化文件可以分为文件头和内 容两部分,文件头部分用来存储元数据,内容部分用来缓存实质的缓存 内容。可以预先配置文件头和内容部分的大小,例如,文件头部分为metadata=keySize*a+fix_lenth_1024,keySize为Key的大小,a为调整 系数,例如为3,fix_lenth_1024为固定1024bit的长度。内容部分为 valueSize*b,valueSize为Value的大小,b为调整系数,例如为3,数据 大小描述可以均以bit为准。
在步骤S106中,初始化组件读取配置信息,调用模式器初始化哨 兵模块。
哨兵模块可以是随业务系统实例运行的独立模块。配置信息例如为 工作模式,在工作模式包括哨兵模式(Sentinel)的情况下,初始化哨 兵模块。配置信息还可以包括:哨兵模块的运行模式,哨兵模块的运行 模式包括:全局模式和单机模式。全局模式主要用于多个业务系统之间 的数据同步。在哨兵模块开启并且运行模式为全局模式时,可以为多个业务系统的实例分别配置对应的哨兵模块,各个实例间的哨兵模块可以 基于RPC(RomoteProcedure Call,远程过程调用)协议通信,用于 保持各个实例上缓存数据的一致性,数据同步可以基于CRDT(无冲突 的复制数据类型)标准实现。在哨兵模块开启并且运行模式为单机模式 时,则哨兵模块只会监控本机数据的存储情况。
业务系统启动哨兵模式实现dataOpListener接口,该接口是一个 定时触发接口。配置信息还可以包括:哨兵模块的调用频率、预设接口 实例、预设方法等,可以根据配置信息设置该dataOpListener接口的 调用频率,哨兵模块会按照配置频率去检查预设接口实例的预设方法的 返回值,若侦察到数据有变更操作则对存储装置发出数据刷新的指令。具体操作数据刷新的规则用户可以自己定义设置在配置信息中,根据业 务对数据一致性的要求,可以基于数据库数据变更、磁盘数据变更甚至 内存数据变更来触发。
哨兵模块与数据热度评估器可以配合应用。数据热度评估器用于计 算已存储的数据的热度值,哨兵模块按照预设频率获取数据的热度值。 业务系统可以通过存储装置的评分任务接口自修正相关参数。
在步骤S108中,初始化组件读取配置信息,调用拦截器注入DAO 层。
初始化组件读取配置信息,可以在预设切入点通过开源组件 Javassist注入监听方法,也可通过spring等常用组件进行配置化拦截 器。当读取方法被调用时拦截器会拦截请求,并根据待读取的Key判 断是否在存储装置中存在对应的数据,若存在则直接返回对应的数据。 拦截器还可以用于对读取次数进行计数。
在步骤S110,初始化组件读取配置信息,装载恢复组件。
初始化组件读取配置信息,若用户设置存储装置为自动恢复模式, 存储装置在初始化方法中放置hook程序,在系统发生异常的情况下启 动对应的恢复组件,对存储装置进行恢复。
上述实施例描述了存储装置中各模块的基本功能,下面结合图2描 述本公开的存储方法。
图2为本公开存储方法一些实施例的流程图。如图2所示,该实施 例的方法包括:步骤S202~S210。
在步骤S202中,响应于缓存容器的写入方法的调用,获取待写入 的Key和对应的待写入的Value。
在步骤S202之前还可以包括:接收配置信息,将配置信息作为元 数据存储到本地磁盘的持久化文件中,并加载到缓存容器的上下文对 象中。前述实施例描述了缓存容器暴露写入、读取等方法,可以基于不 同情况调用写入方法进行数据的写入。例如,本地业务系统的调用写入 方法,或者基于哨兵模块监听到其他业务系统(或服务器)对应的数据 发生变动,自动调用写入方法等情况。在一些实施例中,响应于本地业 务系统调用缓存容器的写入方法,获取业务系统的待写入的Key和对 应的待写入的Value;或者,监听其他业务系统对应的内存或磁盘或 数据库中变动的数据,调用缓存容器的写入方法,获取变动的数据对 应的Key和Value作为待写入的Key和对应的待写入的Value。
上述数据可以是预先指定的部分数据,监听其他业务系统中变动 的数据,可以通过哨兵模块按照预设侦查频率检查其他业务系统对应 的预设接口的预设方法的返回值,响应于获取到返回值则调用缓存容 器的写入方法,进行数据的写入和刷新。通过哨兵模块可以保持多个 业务系统数据的一致性。
在步骤S204中,读取缓存容器中上下文对象的配置信息,配置信 息包括:本地磁盘对应的已有Key集合和数据处理方法。
写入方法被执行时,缓存容器首先从Context对象中读取已知Set 结构本地磁盘对应的已有Key集合,该已有Key集合中包含已存储在 本地磁盘中的数据对应的Key。
在步骤S206中,确定待写入的Key是否存在于本地磁盘对应的已 有Key集合。
前述实施例中描述了配置信息还可以包括Key的类型、Value的 类型等信息,可以首先根据Key的类型、Value的类型对待写入的Key 和对应的待写入的Value进行校验,如果符合配置信息中配置的Key 的类型、Value的类型,再根据待写入的Key与本地磁盘对应的已有 Key集合的匹配结果,确定待写入的Key是否存在于本地磁盘对应的 已有Key集合。
在步骤S208中,在待写入的Key不存在于本地磁盘对应的已有 Key集合的情况下,根据数据处理方法,对待写入的Key和对应的待 写入的Value进行处理。
数据处理方法包括:Key和Value分别对应的序列化方法和压缩 方法中至少一项。若待写入的Key不存在于本地磁盘对应的已有Key 集合,则按照预设的序列化方法、压缩方法处理数据。
在步骤S210中,将处理后的待写入的Key和对应的待写入的 Value写入本地磁盘的持久化文件中。
例如,使用Java IO包中的RandomAccessFile(随机接入文件)将 内容写到本地磁盘的持久化文件中。例如,将处理后的待写入的Value 写入磁盘的持久化文件中的内容部分,将处理后待写入的Key,待写 入的Value在持久化文件中存储的起止位置写入持久化文件的文件头 中,并将待写入的Key和待写入的Value存储的起止位置加载至缓存 容器的上下文对象中。Key也可以不进行序列化存入持久化文件,加 载至缓存容器的上下文对象中的Key可以是没有序列化的。待写入的 Key和待写入的Value存储的起止位置是对应存储的。
在一些实施例中,在持久化文件的内容或文件头空间不足的情况 下,根据持久化文件中已存储数据在第五预设时间内的读取次数,选 取冷数据进行删除释放存储空间,然后将待写入的Key和待写入的 Value写入。在持久化文件的内容或文件头空间不足的情况下可以进 行报错,在开启哨兵模式的情况下,可以通过上述方法驱逐冷数据写 入待写入的数据。可以按照读取次数由低到高对各条数据进行排序, 选取排序在预设位置之前的数据作为冷数据。或者,将读取次数低于 阈值的数据作为冷数据。上述方法也可以用于将数据写入内存的情况, 如果内存空间不足,根据内存中已存储数据在第五预设时间内的读取次数,选取冷数据进行删除释放存储空间。后续实施例将描述将数据 写入内存的过程。上述根据数据的读取次数确定冷数据,进行灵活的 动态驱逐,有效保证热数据的本地磁盘和内存的存储,提高热数据的 存取效率。
已存储数据的读取次数可以通过拦截器获取,后续将进行描述。 待写入的数据包括待写入的Key和待写入的Value,在写入本地磁盘 的持久化文件后,可以将待写入的数据同步至数据库进行存储。
上述实施例中当业务系统工作过程产生数据需要存储时,可以调用 缓存容器的写入方法,缓存容器中上下文对象中存放配置信息,上下 文对象是基于内存的对象,属于全局对象,可以实时进行访问。待写 入的数据以Key-Value的形式进行存储。通过读取配置信息可以确定 待写入的Key是否已存在本地磁盘对应的已有Key集合,若不存在, 则根据配置信息中的数据处理方法,对待写入的Key和对应的待写入 的Value进行处理;将处理后的待写入的Key和对应的待写入的Value 写入本地磁盘的持久化文件中。基于上述过程,可以实现数据的本地 磁盘的实时自动的存储,将数据写入本地磁盘中统一的持久化文件中。由于数据写入本地磁盘,不需要远程进行存取,解决文件存储服务依 赖远程过程调用部分占用的网络开销,提高数据存取效率,适用于业 务系统的小文件等类型的数据的存储,提高业务系统的运行效率。
下面结合图3描述本公开存储方法的另一些实施例。
图3为本公开存储方法另一些实施例的流程图。如图3所示,该实 施例的方法包括:步骤S302~S308。
在步骤S302中,在待写入的Key存在于本地磁盘对应的已有Key 集合的情况下,根据数据处理方法,对待写入的Value进行处理。
若待写入的Key存在于本地磁盘对应的已有Key集合中,可以 首先返回待写入的Key对应的已存储的Value给调用方。若预先配 置了待写入的Key存在于本地磁盘对应的已有Key集合中的情况下 则进行更新的条件,则执行后续步骤。例如,根据Value对应的序列化方法和压缩方法对Value进行处理。
在步骤S304中,确定处理后待写入的Value与待写入的Key对 应的已存储的Value的数据长度是否发生变化。
可以根据持久化文件的文件头部分存储的Value的长度或起止 位置与处理后待写入的Value的长度进行对比,确定是否发生变化。
在步骤S306中,在未发生变化的情况下,将处理后待写入的 Value覆盖待写入的Key对应的已存储的Value。
将已存储的Value删除在原位置写入待写入的Value,进行数据 更新。
在步骤S308中,在发生变化的情况下,将处理后待写入的Value 写入新的位置,并修改已存储的待写入的Key指向新的位置,并保 留已存储的Value对应位置的空间。
待写入的Value相对于已存储的Value大小发生变动,则将待写 入的Value作为新数据写入,修改已存储的待写入的Key指向新的位 置,并保留已存储的Value的数据大小、位置不变。将处理后待写入 的Value写入新的位置参考前述实施例,待写入的Value在持久化文 件中存储的起止位置写入持久化文件的文件头中,并加载至context 对象,在持久化文件的内容或文件头空间不足的情况下可以通过驱逐 冷数据写入待写入的数据。
写入数据可以基于Java NIO工具包提供写入组件进行文件写入。写 入时可以对持久化文件进行锁定,锁可以为分片锁,只锁定需要变更或 更新的数据,操作完释放锁。在一些实施例中,当前线程确定已存储的 待写入的Key和待写入的Key对应的已存储的Value是否被其他并发 线程锁定;在未被锁定的情况下,当前线程将已存储的待写入的Key 和待写入的Key对应的已存储的Value利用分片锁进行锁定;当前线 程在将处理后待写入的Value覆盖待写入的Key对应的已存储的 Value或者写入新的位置后,释放分片锁。当前线程即当前执行写入 方法的线程。
可能会并发多个线程对同样的数据进行处理,因此,可能出现锁竞 争。本方案提出一种分级锁定方法。在一些实施例中,根据第三预设时 间内待写入的Key对应的读取耗费的时间,确定加锁策略;在加锁策 略为第一策略的情况下,当前线程和其他并发线程,按照先进先操作 的方式确定进行锁定的线程,在当前线程为最先进入的线程的情况下, 当前线程将待写入的Key对应的已存储的Value利用一级分片锁进行 锁定,其中,一级分片锁锁定的内容在锁定期间不允许其他并发线程 读写;在加锁策略为第二策略的情况下,当前线程和其他并发线程进 入锁队列,在当前线程为第四预设时间内最后进入锁队列的线程的情 况下,当前线程将待写入的Key对应的已存储的Value利用二级分片 锁进行锁定,其中,二级分片锁锁定的内容在锁定期间不允许其他并 发线程;在加锁策略为第三策略的情况下,当前线程将待写入的Key 对应的已存储的Value利用三级分片锁进行锁定,其中,三级分片锁 锁定的内容在锁定期间不允许其他并发线程写入。
锁可以分为3个等级,执行第一策略时,利用一级分片锁锁定时该 分片数据不可读写,各个线程按照FCFO(先到先操作)严格执行。执 行第二策略时,启动锁队列,按照第四预设时间内最后进入锁队列参 与锁竞争的线程所给出的值更新数据,并清空锁队列,利用二级分片锁 锁定时该分片数据不可读写。执行第三策略时,利用二级分片锁关闭该 分片数据的写入权限,只允许读。用户可以通过执行release-M mapName-K key来释放锁定,恢复写入。执行何种加锁策略根据key 对应的读取耗费的时间进行判断,不同的读取耗时阈值对应不同的加 锁策略,将该key对应的读取耗费的时间与不同的读取耗时阈值进行 对比,确定加锁策略。第一策略、第二策略和第三策略对应读取耗时阈 值依次增大。
上述步骤S302~S308与步骤S208~S210并列执行,也可以应用于哨 兵模式。通过哨兵模块按照预设侦查频率检查其他业务系统对应的预 设接口的预设方法的返回值,响应于获取到返回值则调用缓存容器的 写入方法执行上述步骤S302~S308,进行数据的刷新。通过哨兵模块 可以保持多个业务系统数据的一致性。
上述实施例的方法,提供了一种键值数据结构针对key冲突的解决 方案,在待写入的Key已经存在的情况下,根据待写入的Value和已存 储的Value的长度确定写入的方式为覆盖或者作为新数据写入,避免由 于长度改变造成写入失败。上述实施例还提供了基于文件操作的一种分 片锁的实现方法,通过不同的锁策略的设置,解决并发线程之间的锁竞争,并且根据读取耗费时间确定锁策略,提高数据的读取效率。
前述实施例中描述了本公开的存储装置还包括数据热度评估器, 下面结合图4描述根据数据热度如何对数据进行灵活存储的方法。
图4为本公开存储方法又一些实施例的流程图。如图4所示,该实 施例的方法包括:步骤S402~S408。
在步骤S402中,获取预设时间内本地磁盘和数据库已存储数据 的读取信息,已存储的数据包括对应的Key和Value。
已存储数据可以是用户配置的部分已存储数据,也可以是全部已 存储数据。在一些实施例中,利用哨兵模块获取预设时间内本地磁盘 和数据库已存储数据的读取信息。读取信息例如为读取次数,哨兵模 块可以与拦截器配合应用,通过拦截器拦截读取方法的调用,并记录 待读取的Key对应的读取次数。哨兵模块则可以获取已存储的数据 的读取次数。例如,按照第一预设频率获取第一预设时间内已存储数 据的第一读取信息,第一读取信息包括读取次数。
在一些实施例中,读取信息为连续读取的天数,哨兵模块可以从 业务系统获取已存储数据的连续读取的天数。例如,按照第二预设频 率获取第二预设时间内已存储的第二读取信息,第二读取信息包括连 续读取的天数。
在步骤S404中,根据已存储数据的读取信息确定已存储数据的热 度值。
例如,将已存储数据在第一预设时间内的读取次数确定为已存储 数据的短期热度值。
例如,根据已存储数据在第二预设时间内的连续读取的天数和已 存储数据已存储的天数确定已存储数据的长期热度值,其中,连续读 取的天数越多,已存储的天数越少则长期热度值越大。
进一步,可以根据已存储数据在第二预设时间内的连续读取的天 数、已存储数据已存储的天数,衰减系数和外部影响系数确定数据的 长期热度值,其中,衰减系数越大,已存储数据的长期热度值越大, 外部影响系数根据数据对应的业务需求设置,外部影响系数越大,数 据的长期热度值越大。外部影响系数可以根据用户的设置进行调整。
例如,可以根据以下公式确定已存储数据的长期热度值。
Figure BDA0002655536920000171
t为数据在第二预设时间内的连续读取的天数,N为数据已存储的 天数,G为衰减系数且小于1,X为外部影响系数。G可以根据记录 自修正,初始值为配置。X为外部影响系数,用户在发布文件时可以 根据推广需求设置该系数用于提高评分。使用数据热度评估器时,业 务系统可以实现存储装置的评分任务接口用于自修正相关参数。
在步骤S406中,根据已存储数据的热度值确定已存储数据的缓存 级别。
可以划分三个缓存级别,缓存级别包括:第一级别为虚拟机内存、 本地磁盘和数据库同时缓存,第二级别缓存为本地磁盘和数据库同时 缓存,第二级别为数据库缓存,随着已存储数据的热度值降低,对应 的缓存级别分别为第一级别、第二级别和第三级别。
在一些实施例中,将已存储数据的短期热度值分别与各个缓存级 别对应的第一短期热度阈值、第二短期热度阈值和第三短期热度阈值 进行比对;根据比对结果确定已存储数据的缓存级别。
在另一些实施例中,将已存储数据的长期热度值分别与各个缓存 级别对应的第一长期热度阈值、第二长期热度阈值和第三长期热度阈 值进行比对;根据比对结果确定已存储数据的缓存级别。
在步骤S408中,根据已存储数据的缓存级别,调整已存储数据的 存储区域。
在短期内,根据已存储数据的读取次数确定缓存级别,将读取次 数多的已存储数据优先存储到虚拟机内存或本地磁盘中。长期内,则 根据的长期热度值,将长期热度值高的已存储数据优先存储到虚拟机 内存或、本地磁盘中,可以实现热点数据的快速存取。
根据已存储数据的热度值对各个存储区域的数据进行刷新,进行 分级缓存时。利用哨兵模块侦察指定数据的热度值,将热度值很高的 数据加载到JVM内存中,实现本地磁盘到内存的映射,即实现共享 内存。数据存储到JVM内存中属于off-head架构,不占用堆内存、 不拉高GC(Garbage Collector,垃圾收集器)频率和时间。进程间 基于内存共享通讯不造成线程上下文(ThreadContext)切换造成的延 迟。多级缓存支持,热点数据支持内存级缓存,降低查询数据库频率, 提高访问速度,提高数据的存取效率。
在一些实施例中,响应于读取方法的调用,从待读取的Key存在 于配置信息中本地磁盘对应的已有Key集合查找待读取的Key,在查 找到的情况下,根据待读取的Key指向的位置,从本地磁盘中读取待 读取的Key对应的Value。下面结合图5描述多级缓存的情况下数据 读取的方法。
图5为本公开存储方法再一些实施例的流程图。如图5所示,该实 施例的方法包括:步骤S502~S510。
在步骤S502中,响应于读取方法的调用,确定待读取的Key是 否存在于配置信息中虚拟机内存对应的已有Key集合中。如果待读取 的Key存在于虚拟机内存对应的已有Key集合中,则执行步骤S504, 否则执行步骤S506。
缓存容器暴露Get方法,Get方法被执行时,首先从Context对 象虚拟机内存对应的已有Key集合索引待读取的Key是否存在,若 Context对象未赋值说明系统中断过或异常过。此时可以从持久化文 件中读取元数据恢复Context对象,然后从Context对象虚拟机内存 对应的已有Key集合索引待读取的Key。若不存在待读取的Key则返 回空,若存在待读取的Key则返回对应Value的起止位置。可以根据 起止位置通过Java IO工具包提供的RandomAccessFile类读取该起止 位置的数据并返回。若持久化文件内容被损坏则可以从Context恢复 持久化文件,若持久化文件与Context皆不可用则重新执行初始化。
在步骤S504中,从虚拟机内存中读取待读取的Key对应的Value。
在步骤S506中,确定待读取的Key是否存在于配置信息中本地 磁盘对应的已有Key集合中,如果待读取的Key存在于配置信息中本 地磁盘对应的已有Key集合中,则执行步骤S508,否则执行步骤S510。
在步骤S508中,从本地磁盘中读取待读取的Key对应的Value。
在步骤S510中,从数据库中读取待读取的Key对应的Value。
可以通过拦截器拦截读取请求,并根据待读取的Key判断是否在 虚拟机内存或本地磁盘中存在待读取的Key对应的Value,若存在则 直接返回数据,并对待读取key进行读取次数的计数,作为多级缓存 刷新依据,若不存在则继续查询数据库(DB)。
在一些实施例中,在系统发生异常的情况下,启动恢复程序,扫 描磁盘中文件,在扫描到带有预设标识的文件的情况下,确定文件为 持久化文件,并根据持久化文件中的元数据进行恢复。恢复组件可以 在初始化方法中会放置hook程序,若系统发生异常则启动对应的恢 复程序,恢复程序会到指定位置扫描文件,若存在带有预设标识的的 文件时则去解析该文件读取元数据恢复存储装置。若不存在则通过执 行JDK指令调用存储装置的初始化程序,重新启动装置。
本公开的存储方法,通过虚拟机内存和本地磁盘的存储,解决文 件存储服务依赖RPC部分占用的网络开销。共享内存的off-head架 构,不占用堆内存、不拉高GC频率和时间。进程间基于内存共享通 讯不造成ThreadContext切换造成的延迟。通过配置信息可以实现多 数据类型支持,支持任意数据类型。通过对数据的读取次数的记录, 灵活的动态驱逐策略,支持实时一致性读写,方便数据的增改删操作。 通过数据热度的评估,实现多级缓存支持,热点数据支持内存级缓存, 降低查库频率提高访问速度。设置监听哨兵模式,支持文件、数据库 等外挂监听,可以托管到哨兵根据变更自动修正热点。
本公开还提供一种存储装置,下面结合图6进行描述
图6为本公开存储装置的一些实施例的结构图。如图6所示,该实 施例的装置60包括:获取单元602,配置信息读取单元604,确定单 元606,处理单元608,存储单元610。
获取单602用于响应于缓存容器的写入方法的调用,获取待写入 的键Key和对应的待写入的值Value。
在一些实施例中,获取单602用于响应于本地业务系统调用缓存 容器的写入方法,获取业务系统的待写入的Key和对应的待写入的 Value;或者,监听其他业务系统对应的内存或磁盘或数据库中变动的 数据,调用缓存容器的写入方法,获取变动的数据对应的Key和Value 作为待写入的Key和对应的待写入的Value。
配置信息读取单元604用于读取缓存容器中上下文对象的配置信 息,配置信息包括:本地磁盘对应的已有Key集合和数据处理方法。
确定单元606用于确定待写入的Key是否存在于本地磁盘对应的 已有Key集合。
处理单元608用于在待写入的Key不存在于本地磁盘对应的已有 Key集合的情况下,根据数据处理方法,对待写入的Key和对应的待 写入的Value进行处理。
在一些实施例中,处理单元608用于在待写入的Key存在于本地 磁盘对应的已有Key集合的情况下,根据数据处理方法,对待写入的 Value进行处理。
存储单元610用于将处理后的待写入的Key和对应的待写入的 Value写入本地磁盘的持久化文件中。
在一些实施例中,存储单元610用于确定处理后待写入的Value 与待写入的Key对应的已存储的Value的数据长度是否发生变化;在 未发生变化的情况下,将处理后待写入的Value覆盖待写入的Key对 应的已存储的Value;在发生变化的情况下,将处理后待写入的Value 写入新的位置,并修改已存储的待写入的Key指向新的位置,并保留 已存储的Value对应位置的空间。
在一些实施例中,存储单元610用于当前线程确定已存储的待写 入的Key和待写入的Key对应的已存储的Value是否被其他并发线程 锁定;在未被锁定的情况下,当前线程将已存储的待写入的Key和待 写入的Key对应的已存储的Value利用分片锁进行锁定;当前线程在 将处理后待写入的Value覆盖待写入的Key对应的已存储的Value或 者写入新的位置后,释放分片锁。
在一些实施例中,存储单元610用于根据第三预设时间内待写入 的Key对应的读取耗费的时间,确定加锁策略;在加锁策略为第一策 略的情况下,当前线程和其他并发线程,按照先进先操作的方式确定 进行锁定的线程,在当前线程为最先进入的线程的情况下,当前线程 将待写入的Key对应的已存储的Value利用一级分片锁进行锁定,其 中,一级分片锁锁定的内容在锁定期间不允许其他并发线程读写;在 加锁策略为第二策略的情况下,当前线程和其他并发线程进入锁队列, 在当前线程为第四预设时间内最后进入锁队列的线程的情况下,当前 线程将待写入的Key对应的已存储的Value利用二级分片锁进行锁定, 其中,二级分片锁锁定的内容在锁定期间不允许其他并发线程;在加 锁策略为第三策略的情况下,当前线程将待写入的Key对应的已存储 的Value利用三级分片锁进行锁定,其中,三级分片锁锁定的内容在 锁定期间不允许其他并发线程写入。
在一些实施例中,存储单元610用于将处理后的待写入的Value 写入磁盘的持久化文件中的内容部分,将处理后待写入的Key,待写 入的Value在持久化文件中存储的起止位置写入持久化文件的文件头 中,并将待写入的Key和待写入的Value存储的起止位置加载至缓存 容器的上下文对象中。
在一些实施例中,存储单元610用于在持久化文件的内容或文件 头空间不足的情况下,根据持久化文件中已存储数据在第五预设时间 内的读取次数,选取冷数据进行删除释放存储空间。
在一些实施例中,该装置还包括:调整单元612,用于获取预设时 间内本地磁盘和数据库已存储数据的读取信息;根据已存储数据的读 取信息确定已存储数据的热度值;根据已存储数据的热度值确定已存 储数据的缓存级别,根据已存储数据的缓存级别,调整已存储数据的 存储区域。缓存级别包括:第一级别为虚拟机内存、本地磁盘和数据 库同时缓存,第二级别缓存为本地磁盘和数据库同时缓存,第二级别 为数据库缓存,随着已存储数据的热度值降低,对应的缓存级别分别 为第一级别、第二级别和第三级别,已存储的数据包括对应的Key 和Value。
在一些实施例中,调整单元612用于按照第一预设频率获取第一 预设时间内已存储数据的第一读取信息,第一读取信息包括读取次数, 将已存储数据在第一预设时间内的读取次数确定为已存储数据的短 期热度值。
在一些实施例中,调整单元612用于将已存储数据的短期热度值 分别与各个缓存级别对应的第一短期热度阈值、第二短期热度阈值和 第三短期热度阈值进行比对;根据比对结果确定已存储数据的缓存级 别。
在一些实施例中,调整单元612用于将按照第二预设频率获取第 二预设时间内已存储的第二读取信息,第二读取信息包括连续读取的 天数;根据已存储数据在第二预设时间内的连续读取的天数和已存储 数据已存储的天数确定已存储数据的长期热度值,其中,连续读取的 天数越多,已存储的天数越少则长期热度值越大。
在一些实施例中,调整单元612用于根据已存储数据在第二预设时 间内的连续读取的天数和已存储数据已存储的天数确定已存储数据的 长期热度值包括:根据已存储数据在第二预设时间内的连续读取的天 数、已存储数据已存储的天数,衰减系数和外部影响系数确定数据的 长期热度值,其中,衰减系数越大,已存储数据的长期热度值越大, 外部影响系数根据数据对应的业务需求设置,外部影响系数越大,数 据的长期热度值越大。
在一些实施例中,长期热度值采用以下公式确定:
Figure BDA0002655536920000221
其中,t为数据在第二预设时间内的连续读取的天数,N为数据已 存储的天数,G为衰减系数且小于1,X为外部影响系数。
在一些实施例中,该装置还包括:读取单元614,用于响应于读取 方法的调用,从待读取的Key存在于配置信息中本地磁盘对应的已 有Key集合查找待读取的Key,在查找到的情况下,根据待读取的 Key指向的位置,从本地磁盘中读取待读取的Key对应的Value。
在一些实施例中,读取单元614用于响应于读取方法的调用,确定 待读取的Key是否存在于配置信息中虚拟机内存对应的已有Key集合 中;如果待读取的Key存在于虚拟机内存对应的已有Key集合中,则 从虚拟机内存中读取待读取的Key对应的Value;如果待读取的Key 不存在于虚拟机内存对应的已有Key集合中,确定待读取的Key是否 存在于配置信息中本地磁盘对应的已有Key集合中;如果待读取的 Key存在于配置信息中本地磁盘对应的已有Key集合中,则从本地磁 盘中读取待读取的Key对应的Value;如果待读取的Key不存在于配 置信息中本地磁盘对应的已有Key集合中,则从数据库中读取待读取 的Key对应的Value。
在一些实施例中,该装置还包括:拦截单元616,用于通过拦截器 拦截读取方法的调用,并记录待读取的Key对应的读取次数。
在一些实施例中,该装置还包括:配置单元618,用于接收配置信 息,将配置信息作为元数据存储到本地磁盘的持久化文件中,并加载 到缓存容器的上下文对象中;其中,配置信息还包括:Key的类型、 Value的类型、Value的近似大小、Value的总大小、Value的初始起 止位置、虚拟机内存对应的已有Key集合,数据库对应的已有Key集 合中至少一项,数据处理方法包括:Key和Value分别对应的序列化 方法和压缩方法中至少一项。
在一些实施例中,该装置还包括:恢复单元620,用于在系统发生 异常的情况下,启动恢复程序,扫描磁盘中文件,在扫描到带有预设 标识的文件的情况下,确定文件为持久化文件,并根据持久化文件中 的元数据进行恢复。
本公开的实施例中的存储装置可各由各种计算设备或计算机系统 来实现,下面结合图7以及图8进行描述。
图7为本公开存储装置的一些实施例的结构图。如图7所示,该实 施例的装置70包括:存储器710以及耦接至该存储器710的处理器720, 处理器720被配置为基于存储在存储器710中的指令,执行本公开中 任意一些实施例中的存储方法。
其中,存储器710例如可以包括系统存储器、固定非易失性存储 介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序 (Boot Loader)、数据库以及其他程序等。
图8为本公开存储装置的另一些实施例的结构图。如图8所示, 该实施例的装置80包括:存储器810以及处理器820,分别与存储器 710以及处理器720类似。还可以包括输入输出接口830、网络接口 840、存储接口850等。这些接口830,840,850以及存储器810和处理器820之间例如可以通过总线860连接。其中,输入输出接口830 为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络 接口840为各种联网设备提供连接接口,例如可以连接到数据库服务 器或者云端存储服务器等。存储接口850为SD卡、U盘等外置存储 设备提供连接接口。
本领域内的技术人员应当明白,本公开的实施例可提供为方法、 系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完 全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公 开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用 非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储 器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(系统)、和计算 机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程 序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程 图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序 指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处 理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据 处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个 流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据 处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算 机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现 在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指 定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理 设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产 生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令 提供用于实现在流程图一个流程或多个流程和/或方框图一个方框 或多个方框中指定的功能的步骤。
以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本 公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包 含在本公开的保护范围之内。

Claims (21)

1.一种存储方法,包括:
响应于缓存容器的写入方法的调用,获取待写入的键Key和对应的待写入的值Value;
读取所述缓存容器中上下文对象的配置信息,所述配置信息包括:本地磁盘对应的已有Key集合和数据处理方法;
确定所述待写入的Key是否存在于本地磁盘对应的已有Key集合;
在所述待写入的Key不存在于本地磁盘对应的已有Key集合的情况下,根据所述数据处理方法,对所述待写入的Key和对应的待写入的Value进行处理;
将处理后的所述待写入的Key和对应的待写入的Value写入本地磁盘的持久化文件中。
2.根据权利要求1所述的存储方法,还包括:
获取预设时间内本地磁盘和数据库已存储数据的读取信息,其中,已存储的数据包括对应的Key和Value;
根据所述已存储数据的读取信息确定所述已存储数据的热度值;
根据所述已存储数据的热度值确定所述已存储数据的缓存级别,其中,所述缓存级别包括:第一级别为虚拟机内存、本地磁盘和数据库同时缓存,第二级别缓存为本地磁盘和数据库同时缓存,第二级别为数据库缓存,随着所述已存储数据的热度值降低,对应的缓存级别分别为第一级别、第二级别和第三级别;
根据所述已存储数据的缓存级别,调整所述已存储数据的存储区域。
3.根据权利要求2所述的存储方法,其中,所述获取预设时间内本地磁盘和数据库已存储数据的读取信息包括:
按照第一预设频率获取第一预设时间内所述已存储数据的第一读取信息,所述第一读取信息包括读取次数;
所述根据所述已存储数据的读取信息确定所述已存储数据的热度值包括:
将所述已存储数据在第一预设时间内的读取次数确定为所述已存储数据的短期热度值。
4.根据权利要求3所述的存储方法,其中,所述根据所述已存储数据的热度值确定所述已存储数据的缓存级别包括:
将所述已存储数据的短期热度值分别与各个缓存级别对应的第一短期热度阈值、第二短期热度阈值和第三短期热度阈值进行比对;
根据比对结果确定所述已存储数据的缓存级别。
5.根据权利要求2所述的存储方法,其中,所述获取预设时间内本地磁盘和数据库已存储数据的读取信息包括:
按照第二预设频率获取第二预设时间内所述已存储的第二读取信息,所述第二读取信息包括连续读取的天数;
所述根据所述已存储数据的读取信息确定所述已存储数据的热度值包括:
根据所述已存储数据在第二预设时间内的连续读取的天数和所述已存储数据已存储的天数确定所述已存储数据的长期热度值,其中,所述连续读取的天数越多,已存储的天数越少则长期热度值越大。
6.根据权利要求5所述的存储方法,其中,所述根据所述已存储数据在第二预设时间内的连续读取的天数和所述已存储数据已存储的天数确定所述已存储数据的长期热度值包括:
根据所述已存储数据在第二预设时间内的连续读取的天数、所述已存储数据已存储的天数,衰减系数和外部影响系数确定所述数据的长期热度值,其中,所述衰减系数越大,所述已存储数据的长期热度值越大,所述外部影响系数根据数据对应的业务需求设置,所述外部影响系数越大,所述数据的长期热度值越大。
7.根据权利要求6所述的存储方法,其中,所述长期热度值采用以下公式确定:
Figure FDA0002655536910000031
其中,t为数据在第二预设时间内的连续读取的天数,N为所述数据已存储的天数,G为衰减系数且小于1,X为外部影响系数。
8.根据权利要求1所述的存储方法,还包括:
在所述待写入的Key存在于本地磁盘对应的已有Key集合的情况下,根据所述数据处理方法,对所述待写入的Value进行处理;
确定处理后所述待写入的Value与所述待写入的Key对应的已存储的Value的数据长度是否发生变化;
在未发生变化的情况下,将处理后所述待写入的Value覆盖所述待写入的Key对应的已存储的Value;
在发生变化的情况下,将处理后所述待写入的Value写入新的位置,并修改已存储的所述待写入的Key指向所述新的位置,并保留已存储的Value对应位置的空间。
9.根据权利要求8所述的存储方法,其中,所述将处理后所述待写入的Value覆盖所述待写入的Key对应的已存储的Value或者写入新的位置包括:
当前线程确定已存储的所述待写入的Key和所述待写入的Key对应的已存储的Value是否被其他并发线程锁定;
在未被锁定的情况下,当前线程将已存储的所述待写入的Key和所述待写入的Key对应的已存储的Value利用分片锁进行锁定;
当前线程在将处理后所述待写入的Value覆盖所述待写入的Key对应的已存储的Value或者写入新的位置后,释放所述分片锁。
10.根据权利要求9所述的存储方法,其中,所述当前线程将已存储的所述待写入的Key和所述待写入的Key对应的已存储的Value利用分片锁进行锁定包括:
根据第三预设时间内所述待写入的Key对应的读取耗费的时间,确定加锁策略;
在所述加锁策略为第一策略的情况下,所述当前线程和其他并发线程,按照先进先操作的方式确定进行锁定的线程,在所述当前线程为最先进入的线程的情况下,所述当前线程将所述待写入的Key对应的已存储的Value利用一级分片锁进行锁定,其中,所述一级分片锁锁定的内容在锁定期间不允许其他并发线程读写;
在所述加锁策略为第二策略的情况下,所述当前线程和其他并发线程进入锁队列,在所述当前线程为第四预设时间内最后进入所述锁队列的线程的情况下,所述当前线程将所述待写入的Key对应的已存储的Value利用二级分片锁进行锁定,其中,所述二级分片锁锁定的内容在锁定期间不允许其他并发线程;
在所述加锁策略为第三策略的情况下,所述当前线程将所述待写入的Key对应的已存储的Value利用三级分片锁进行锁定,其中,所述三级分片锁锁定的内容在锁定期间不允许其他并发线程写入。
11.根据权利要求1所述的存储方法,其中,所述将处理后的所述待写入的Key和对应的待写入的Value写入本地磁盘的持久化文件包括:
将处理后的所述待写入的Value写入磁盘的持久化文件中的内容部分,将处理后所述待写入的Key,所述待写入的Value在持久化文件中存储的起止位置写入所述持久化文件的文件头中,并将所述待写入的Key和所述待写入的Value存储的起止位置加载至所述缓存容器的上下文对象中。
12.根据权利要求11所述的存储方法,其中,所述将处理后的所述待写入的Key和对应的待写入的Value写入本地磁盘的持久化文件还包括:
在所述持久化文件的内容或文件头空间不足的情况下,根据所述持久化文件中已存储数据在第五预设时间内的读取次数,选取冷数据进行删除释放存储空间。
13.根据权利要求1所述的存储方法,其中,所述响应于缓存容器的写入方法的调用,获取待写入的键Key和对应的待写入的值Value包括:
响应于本地业务系统调用所述缓存容器的写入方法,获取业务系统的待写入的Key和对应的待写入的Value;
或者,监听其他业务系统对应的内存或磁盘或数据库中变动的数据,调用缓存容器的写入方法,获取变动的数据对应的Key和Value作为待写入的Key和对应的待写入的Value。
14.根据权利要求1所述的存储方法,还包括:
响应于读取方法的调用,从待读取的Key存在于所述配置信息中本地磁盘对应的已有Key集合查找待读取的Key,在查找到的情况下,根据所述待读取的Key指向的位置,从所述本地磁盘中读取所述待读取的Key对应的Value。
15.根据权利要求2所述的存储方法,还包括:
响应于读取方法的调用,确定待读取的Key是否存在于所述配置信息中虚拟机内存对应的已有Key集合中;
如果所述待读取的Key存在于虚拟机内存对应的已有Key集合中,则从所述虚拟机内存中读取所述待读取的Key对应的Value;
如果所述待读取的Key不存在于虚拟机内存对应的已有Key集合中,确定所述待读取的Key是否存在于所述配置信息中本地磁盘对应的已有Key集合中;
如果所述待读取的Key存在于所述配置信息中本地磁盘对应的已有Key集合中,则从所述本地磁盘中读取所述待读取的Key对应的Value;
如果所述待读取的Key不存在于所述配置信息中本地磁盘对应的已有Key集合中,则从数据库中读取所述待读取的Key对应的Value。
16.根据权利要求15所述的存储方法,还包括:
通过拦截器拦截所述读取方法的调用,并记录所述待读取的Key对应的读取次数。
17.根据权利要求1所述的存储方法,还包括:
接收配置信息,将所述配置信息作为元数据存储到本地磁盘的持久化文件中,并加载到所述缓存容器的上下文对象中;
其中,所述配置信息还包括:Key的类型、Value的类型、Value的近似大小、Value的总大小、Value的初始起止位置、虚拟机内存对应的已有Key集合,数据库对应的已有Key集合中至少一项,所述数据处理方法包括:Key和Value分别对应的序列化方法和压缩方法中至少一项。
18.根据权利要求17所述的存储方法,还包括:
在系统发生异常的情况下,启动恢复程序,扫描磁盘中文件,在扫描到带有预设标识的文件的情况下,确定所述文件为所述持久化文件,并根据所述持久化文件中的元数据进行恢复。
19.一种存储装置,包括:
获取单元,用于响应于缓存容器的写入方法的调用,获取待写入的键Key和对应的待写入的值Value;
配置信息读取单元,用于读取所述缓存容器中上下文对象的配置信息,所述配置信息包括:本地磁盘对应的已有Key集合和数据处理方法;
确定单元,用于确定所述待写入的Key是否存在于本地磁盘对应的已有Key集合;
处理单元,用于在所述待写入的Key不存在于本地磁盘对应的已有Key集合的情况下,根据所述数据处理方法,对所述待写入的Key和对应的待写入的Value进行处理;
存储单元,用于将处理后的所述待写入的Key和对应的待写入的Value写入本地磁盘的持久化文件中。
20.一种存储装置,包括:
处理器;以及
耦接至所述处理器的存储器,用于存储指令,所述指令被所述处理器执行时,使所述处理器执行如权利要求1-18任一项所述的存储方法。
21.一种非瞬时性计算机可读存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现权利要求1-18任一项所述方法的步骤。
CN202010885820.9A 2020-08-28 存储方法、存储装置和计算机可读存储介质 Active CN113849119B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010885820.9A CN113849119B (zh) 2020-08-28 存储方法、存储装置和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010885820.9A CN113849119B (zh) 2020-08-28 存储方法、存储装置和计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN113849119A true CN113849119A (zh) 2021-12-28
CN113849119B CN113849119B (zh) 2024-07-16

Family

ID=

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115237609A (zh) * 2022-09-22 2022-10-25 深圳市优网科技有限公司 一种用户信息快速关联回填的方法、装置及存储介质
CN115858249A (zh) * 2022-12-30 2023-03-28 北京迪艾尔软件技术有限公司 一种海量非结构化数据文件的备份方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104317800A (zh) * 2014-09-19 2015-01-28 山东大学 一种海量智能用电数据混合存储系统及方法
CN104917788A (zh) * 2014-03-11 2015-09-16 中国移动通信集团公司 一种数据存储方法及装置
US20160378653A1 (en) * 2015-06-25 2016-12-29 Vmware, Inc. Log-structured b-tree for handling random writes
CN106339398A (zh) * 2015-07-09 2017-01-18 广州市动景计算机科技有限公司 一种网页页面的预读取方法、装置及智能终端设备
CN106843770A (zh) * 2017-01-23 2017-06-13 北京思特奇信息技术股份有限公司 一种分布式文件系统中小文件数据存储、读取方法及装置
US20180121366A1 (en) * 2016-11-01 2018-05-03 Alibaba Group Holding Limited Read/write request processing method and apparatus
US10146694B1 (en) * 2017-04-28 2018-12-04 EMC IP Holding Company LLC Persistent cache layer in a distributed file system

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104917788A (zh) * 2014-03-11 2015-09-16 中国移动通信集团公司 一种数据存储方法及装置
CN104317800A (zh) * 2014-09-19 2015-01-28 山东大学 一种海量智能用电数据混合存储系统及方法
US20160378653A1 (en) * 2015-06-25 2016-12-29 Vmware, Inc. Log-structured b-tree for handling random writes
CN106339398A (zh) * 2015-07-09 2017-01-18 广州市动景计算机科技有限公司 一种网页页面的预读取方法、装置及智能终端设备
US20180121366A1 (en) * 2016-11-01 2018-05-03 Alibaba Group Holding Limited Read/write request processing method and apparatus
CN106843770A (zh) * 2017-01-23 2017-06-13 北京思特奇信息技术股份有限公司 一种分布式文件系统中小文件数据存储、读取方法及装置
US10146694B1 (en) * 2017-04-28 2018-12-04 EMC IP Holding Company LLC Persistent cache layer in a distributed file system

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115237609A (zh) * 2022-09-22 2022-10-25 深圳市优网科技有限公司 一种用户信息快速关联回填的方法、装置及存储介质
CN115858249A (zh) * 2022-12-30 2023-03-28 北京迪艾尔软件技术有限公司 一种海量非结构化数据文件的备份方法

Similar Documents

Publication Publication Date Title
US20210056074A1 (en) File System Data Access Method and File System
US7254578B2 (en) Concurrency classes for shared file systems
US7711916B2 (en) Storing information on storage devices having different performance capabilities with a storage system
US20110225373A1 (en) Computer system and method of data cache management
US20160267132A1 (en) Abstraction layer between a database query engine and a distributed file system
US8260816B1 (en) Providing limited access to a file system on shared storage
US11245774B2 (en) Cache storage for streaming data
US10013312B2 (en) Method and system for a safe archiving of data
US11886298B2 (en) Using a storage log to generate an incremental backup
US9075722B2 (en) Clustered and highly-available wide-area write-through file system cache
CN113420052B (zh) 一种多级分布式缓存系统及方法
CN112307119A (zh) 数据同步方法、装置、设备及存储介质
US20190324676A1 (en) Paging and disk storage for document store
CN111796767B (zh) 一种分布式文件系统及数据管理方法
CN112235396B (zh) 内容处理链路调整方法、装置、计算机设备和存储介质
CN114528255A (zh) 元数据管理方法、电子设备及计算机程序产品
US20200342008A1 (en) System for lightweight objects
CN113031864A (zh) 一种数据处理方法、装置、电子设备及存储介质
CN109165078B (zh) 一种虚拟分布式服务器及其访问方法
CN116954680A (zh) 存储系统的插件更新方法、装置、设备、介质及程序产品
US10872073B1 (en) Lock-free updates to a data retention index
CN108271420A (zh) 管理文件的方法、文件系统和服务器系统
CN115794819A (zh) 一种数据写入方法及电子设备
CN113849119A (zh) 存储方法、存储装置和计算机可读存储介质
CN113849119B (zh) 存储方法、存储装置和计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant