一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

文档系统的操作方法和装置与流程

2022-10-13 06:23:07 来源:中国专利 TAG:


1.本发明涉及协同办公技术领域,尤其涉及一种文档系统的操作方法和装置。


背景技术:

2.在目前的在线协同文档系统中,同一根目录下用户可以执行创建文档、修改目录等创建类操作,也可以执行删除文件、移动目录等删除类操作,这两类操作容易相互影响导致出错,例如,用户a正在修改某文档而用户b在不知情的情况下删除了该文档或该文档所在的目录,导致用户a的工作量清零。实际应用中,可以采用分布式锁解决以上问题,但是目前采用的分布式锁一般针对待操作的文档或目录来设置,由于加锁的粒度太小,实际操作中往往需要处处加锁,需要遍历整棵目录树判断是否存在锁,导致效率较低,不易维护,甚至出现死锁。另外,在针对更新类操作的更新锁机制中,一般在更新锁数据结构中维护一个加锁次数字段,当创建一个更新锁时,将加锁次数加1;释放一个更新锁时,将加锁次数减1,这种机制的管理维护成本较高,在高并发和某些异常情况下加锁次数容易出错导致发生故障。


技术实现要素:

3.有鉴于此,本发明实施例提供一种文档系统的操作方法和装置,能够通过根目录锁机制保证文档系统的更新类操作与删除类操作互不影响,并能够提高文档系统操作效率。
4.为实现上述目的,根据本发明的一个方面,提供了一种文档系统的操作方法。
5.本发明实施例的文档系统的操作方法包括:响应于用户发起的、携带有待操作对象的标识的目标操作,依据所述待操作对象的标识确定所述待操作对象的根目录;在预设的锁组件中判断不存在作用于所述根目录的、所述目标操作对应的第一锁的情况下,在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目标锁,执行所述目标操作;其中,所述待操作对象包括所述文档系统中的文档或目录。
6.可选地,所述目标操作包括更新类操作;所述更新类操作对应的第一锁为删除锁;所述更新类操作对应的目标锁为更新锁。
7.可选地,所述目标操作包括删除类操作;所述删除类操作对应的第一锁为删除锁和更新锁;所述删除类操作对应的目标锁为删除锁。
8.可选地,所述依据所述待操作对象的标识确定所述待操作对象的根目录,包括:在所述待操作对象为所述文档系统中的文档时,从预设数据库中查询到所述待操作对象的标识对应的文档信息,在所述文档信息中获取所述待操作对象的父目录的标识,确定所述父目录的标识对应的全路径信息,从所述全路径信息中提取所述待操作对象的根目录的标识;在所述待操作对象为所述文档系统中的目录时,在所述数据库中查询到所述待操作对象的标识对应的全路径信息,从所述全路径信息中提取所述待操作对象的根目录的标识。
9.可选地,所述在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目
标锁,包括:在所述目标操作为删除类操作的情况下,在所述锁组件中插入包括索引数据的删除锁数据,以形成作用于所述根目录的删除锁;其中,所述索引数据基于所述根目录的标识生成,作为所述删除锁的标识。
10.可选地,所述判断不存在作用于所述根目录的、所述目标操作对应的第一锁,包括:基于所述根目录的标识生成删除锁标识,在所述锁组件中不存在该删除锁标识对应的删除锁数据时,判断不存在作用于所述根目录的删除锁。
11.可选地,所述基于所述根目录的标识生成删除锁标识,包括:将预设的删除锁前缀与所述根目录的标识结合,得到所述删除锁标识。
12.可选地,作用于所述根目录的更新锁包括:存储在所述锁组件的第一存储空间的第一更新锁数据和存储在所述锁组件的第二存储空间的第二更新锁数据;其中,第一更新锁数据和第二更新锁数据中含有索引数据;第一更新锁数据中的索引数据基于所述根目录的标识生成,作为所述更新锁的标识;第二更新锁数据中的索引数据包括所述更新锁的标识、以及基于所述待操作对象的标识生成的操作域数据。
13.可选地,第一更新锁数据中进一步包括过期时间;以及,所述在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目标锁,包括:在所述目标操作为更新类操作的情况下,基于所述根目录的标识生成更新锁标识,查询第一存储空间是否存在该更新锁标识对应的第一更新锁数据:如果存在,重置查询到的第一更新锁数据中的过期时间,在第二存储空间插入以该更新锁标识和基于所述待操作对象的标识生成的操作域数据为索引数据的第二更新锁数据;如果不存在,在第一存储空间插入以该更新锁标识为索引数据的第一更新锁数据,在第二存储空间插入以该更新锁标识和基于所述待操作对象的标识生成的操作域数据为索引数据的第二更新锁数据。
14.可选地,判断不存在作用于所述根目录的、所述目标操作对应的第一锁,包括:在所述目标操作为删除类操作的情况下,基于所述根目录的标识生成更新锁标识,在第一存储空间不存在该更新锁标识对应的第一更新锁数据、或者第二存储空间不存在该更新锁标识对应的第二更新锁数据时,判断不存在作用于所述根目录的更新锁。
15.可选地,所述基于所述根目录的标识生成更新锁标识,包括:将预设的更新锁前缀与所述根目录的标识结合,得到所述更新锁标识;所述操作域数据由所述待操作对象的标识与所述用户的标识相结合而得到。
16.可选地,所述方法进一步包括:在所述锁组件中创建作用于所述根目录的更新锁之后,生成针对所述待操作对象的更新凭证;在所述锁组件中创建作用于所述根目录的删除锁之后,生成针对所述待操作对象的删除凭证;以及,执行所述更新类操作,包括:响应于获得所述更新凭证,执行所述更新类操作;执行所述删除类操作,包括:响应于获得所述删除凭证,执行所述删除类操作。
17.可选地,所述方法进一步包括:在执行所述更新类操作完毕之后,释放所述更新凭证,将第二存储空间中所述更新锁的第二更新锁数据删除以释放所述更新锁;在执行所述删除类操作完毕之后,释放所述删除凭证,将所述锁组件中所述删除锁的删除锁数据删除以释放所述删除锁。
18.可选地,所述方法进一步包括:在所述锁组件中判断存在作用于所述根目录的删除锁的情况下,拒绝执行所述更新类操作;在所述锁组件中判断存在作用于所述根目录的
删除锁或者更新锁的情况下,拒绝执行所述删除类操作;所述更新类操作包括以下至少一种:创建文档、修改文档、创建目录、修改目录、创建文档的快捷方式、创建目录的快捷访问、创建文档副本、已删除文档恢复、已删除目录恢复;所述删除类操作包括以下至少一种:删除文档、删除目录、移动文档、移动目录;所述更新锁和所述删除锁为分布式锁,所述锁组件包括:数据库、缓存单元或者zookeeper。
19.为实现上述目的,根据本发明的另一方面,提供了一种文档系统的操作装置。
20.本发明实施例的文档系统的操作装置可以包括:根目录确定单元,用于:响应于用户发起的、携带有待操作对象的标识的目标操作,依据所述待操作对象的标识确定所述待操作对象的根目录;锁处理单元,用于:在预设的锁组件中判断不存在作用于所述根目录的、所述目标操作对应的第一锁的情况下,在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目标锁,执行所述目标操作;其中,所述待操作对象包括所述文档系统中的文档或目录。
21.为实现上述目的,根据本发明的又一方面,提供了一种电子设备。
22.本发明的一种电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的文档系统的操作方法。
23.为实现上述目的,根据本发明的再一方面,提供了一种计算机可读存储介质。
24.本发明的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明所提供的文档系统的操作方法。
25.根据本发明的技术方案,上述发明中的实施例具有如下优点或有益效果:
26.基于文档系统的文档、目录等待操作对象的根目录标识生成更新锁和删除锁的标识,从而实现作用在根目录的根目录锁机制,当用户需要执行更新类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁即可决定是否执行操作,当用户需要执行删除类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁和更新锁即可决定是否执行操作,由此避免现有分布式锁机制中需要处处加锁、遍历整棵目录树来查询锁的问题,在保证更新类操作与删除类操作不会相互影响的前提下提高文档系统操作效率,易于维护,减小出错概率。进一步地,本发明实施例在锁组件中开辟两个存储空间(第一存储空间和第二存储空间)对更新锁进行管理,第一存储空间存储包括更新锁标识的第一更新锁数据以便从整体上指示根目录的更新锁,第二存储空间存储包括更新锁标识和操作域数据的第二更新锁数据以便具体指示对应于不同待操作对象的更新锁,只有同时存在这两种更新锁数据才能够被认定为作用在根目录的更新锁,当释放更新锁时只需删除第二存储空间的数据而不需改动第一存储空间中的数据,由此在确保更新锁有效管理的同时避免多个更新类操作在一个存储空间内反复修改加锁次数,从而降低更新锁维护成本,避免出错。
27.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
28.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
29.图1是本发明实施例中文档系统的操作方法的主要步骤示意图;
30.图2是本发明实施例中文档系统的操作方法的整体流程示意图;
31.图3是本发明实施例中更新类操作的执行流程示意图;
32.图4是本发明实施例中删除类操作的执行流程示意图;
33.图5是本发明实施例中文档系统的操作装置的组成部分示意图;
34.图6是根据本发明实施例可以应用于其中的示例性系统架构图;
35.图7是用来实现本发明实施例中文档系统的操作方法的电子设备结构示意图。
具体实施方式
36.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
37.以下首先说明本发明的技术构思。本发明的目的在于优化文档系统的协同机制以提高操作效率,降低出错概率,以上文档系统能够支持多人在线协同编辑文档,其具有至少一棵目录树,每一目录树具有根目录和从属于根目录的下级目录,每一目录下可以存储一个或多个文档。现有技术中,针对文档系统的更新类操作与删除类操作之间容易相互影响,例如一个用户正在修改的文档可能被另一用户删除,因此需要通过锁机制隔离更新类操作与删除类操作之间的影响。实际应用中,更新类操作可以包括:创建文档、修改文档、创建目录、修改目录、创建文档的快捷方式、创建目录的快捷访问、创建文档副本、已删除文档恢复、已删除目录恢复,删除类操作可以包括:删除文档、删除目录、移动文档、移动目录。
38.进一步地,为了避免现有技术中在文档或目录粒度加锁导致的操作效率低下、不易维护、容易出现死锁等缺陷,本发明考虑在根目录级别加锁,即,如果当前存在作用于根目录的更新锁(即根目录下的任一目录或文档正在执行更新类操作),则拒绝此根目录下任何文档和目录的删除类操作,但是可以同时执行更新类操作;如果当前存在作用于根目录的删除锁(即根目录下的任一目录或文档正在执行删除类操作),则拒绝此根目录下的任何文档和目录的更新类操作以及删除类操作,从而在保证更新类操作与删除类操作不会相互影响的前提下提高操作执行效率,提高文档系统可用性。较佳地,以上更新锁和删除锁可以是分布式锁。
39.为了实现以上机制,可以基于数据库(如mysql)、缓存单元(可以是内存缓存单元如redis)、zookeeper等锁组件(锁组件指用于提供或实现锁机制的系统)进行以下设计。首先,将作用于任一根目录的更新锁以及删除锁(二者可统称为根目录锁)与该根目录关联以实现根目录锁机制,可选地,可以在创建根目录锁时利用根目录的标识来生成根目录锁的标识,并将包括根目录锁标识的根目录锁数据(包括后续将要说明的删除锁数据、第一更新锁数据和第二更新锁数据)存储在锁组件,后续在锁组件中使用根目录锁标识来查询从而判断当前是否存在作用在根目录的根目录锁。在创建更新锁之前,首先需要确定当前不存在作用于同一根目录的删除锁;在创建删除锁之前,首先需要确定当前不存在作用于同一根目录的删除锁和更新锁。在创建更新锁之后,可以执行更新类操作,执行完毕之后,需要删除更新锁的相应数据以释放更新锁,从而避免影响后续操作。在创建删除锁之后,可以执行删除类操作,执行完毕之后,需要将删除更新锁的相应数据删除以释放删除锁,从而避免
影响后续操作。
40.进一步地,对于删除锁,由于多个用户无法针对同一根目录并行执行删除类操作,因此锁组件中只会针对同一根目录维护最多一条删除锁数据,即,在执行删除类操作之前,在锁组件中插入相应的删除锁数据以创建删除锁,执行完毕之后删除该删除锁数据以释放删除锁。
41.对于更新锁,由于多个用户可以针对同一根目录并行执行更新类操作,因此锁组件中可以针对同一根目录维护多个更新锁的相关数据,现有技术中,一般在统一的更新锁数据结构中维护一个加锁次数字段,当创建一个更新锁时,将加锁次数加1,释放一个更新锁时,将加锁次数减1,这种机制的管理维护成本较高,在高并发和某些异常情况下加锁次数容易出错导致发生故障。
42.为了解决以上问题,本发明实施例在锁组件中开辟两个存储空间(第一存储空间和第二存储空间)对更新锁进行管理,第一存储空间存储包括更新锁标识的第一更新锁数据以便从整体上指示根目录的更新锁,第二存储空间存储包括更新锁标识和操作域数据的第二更新锁数据以便具体指示对应于不同待操作对象的更新锁,只有同时存在这两种更新锁数据才能够被认定为作用在根目录的更新锁。此外,在第一更新锁数据中,更新锁标识作为其索引数据,在第二更新锁数据中,更新锁标识和操作域数据(基于待操作对象的标识生成)都作为其索引数据。这样,对于作用于同一根目录的多个更新锁,这些更新锁具有第一存储空间的一条共同的第一更新锁数据,这条数据在更新锁创建时如果存在则不需再次插入,在更新锁释放时不需删除(可以基于过期时间自动删除),第一存储空间中不存在现有技术中的加锁次数字段。每一更新锁还具有第二存储空间的一条独立的第二更新锁数据,更新锁创建时插入第二更新锁数据,更新锁释放时删除第二更新锁数据,从而实现各更新锁的独立管理,避免集中管理所导致的相互影响和高错误率,保证文档系统在高并发情况下的高可用。
43.以下说明本发明的具体技术方案。需要指出的是,在不冲突的情况下,本发明的实施例以及实施例中的技术特征可以相互结合。
44.图1是根据本发明实施例中文档系统的操作方法的主要步骤示意图。
45.如图1所示,本发明实施例的文档系统的操作方法可以由文档系统服务器执行,具体步骤如下:
46.步骤s101:响应于用户发起的、携带有待操作对象的标识的目标操作,依据所述待操作对象的标识确定所述待操作对象的根目录。步骤s102:在预设的锁组件中判断不存在作用于所述根目录的、所述目标操作对应的第一锁的情况下,在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目标锁,执行所述目标操作。特别地,以上目标操作可以是更新类操作,更新类操作对应的第一锁为删除锁,更新类操作对应的目标锁为更新锁;目标操作还可以是删除类操作,删除类操作对应的第一锁为删除锁和更新锁,删除类操作对应的目标锁为删除锁。以下分别针对更新类操作和删除类操作进行说明。
47.更新类操作的执行步骤如下:响应于用户发起的、携带有待操作对象的标识的更新类操作,依据待操作对象的标识确定待操作对象的根目录;在预设的锁组件中判断不存在作用于根目录的删除锁时,在锁组件中创建作用于根目录的更新锁,执行更新类操作。本步骤是关于更新类操作的步骤,具体流程参见图2中的左侧图。
48.在本步骤中,用户可以在web端或者app、电脑端程序等客户端向文档系统服务器发起更新类操作,其中携带待操作对象的标识。待操作对象可以是文档系统中的任一文档或任一目录,一般地,更新类操作的待操作对象与更新类操作的具体类型有关。具体地,如果更新类操作为创建文档,则待操作对象为待创建文档的父目录(即待创建文档所在目录);如果更新类操作为创建目录,则待操作对象为待创建目录的父目录(即待创建目录所在的目录);如果更新类操作为修改文档、修改目录、创建文档的快捷方式、创建目录的快捷访问、创建文档副本、已删除文档恢复、已删除目录恢复,则待操作对象为操作针对的文档或目录。
49.文档系统服务器在接收到更新类操作之后,可以首先根据待操作对象的标识确定待操作对象的根目录。示例性地,在基于数据库的架构中,文档系统服务器可以通过查询数据库确定待操作对象的根目录,具体地,如果待操作对象为文档系统中的文档,文档系统服务器可以首先从数据库中查询到待操作对象的标识对应的文档信息,接着在文档信息中获取待操作对象的父目录的标识,之后在数据库的目录表中查询到父目录的标识对应的全路径信息(全路径指的是从文档或者目录所在的根目录开始直到其父目录的层级关系),最后从全路径信息中提取待操作对象的根目录的标识。如果待操作对象为文档系统中的目录,文档系统服务器首先在数据库的目录表中查询到待操作对象的标识对应的全路径信息,再从全路径信息中提取待操作对象的根目录的标识。
50.在获得根目录的标识之后,文档系统服务器在预设的锁组件中判断是否存在作用于同一根目录的删除锁。具体地,文档系统服务器首先根据固定规则基于根目录的标识生成删除锁标识,例如,将预设的删除锁前缀与根目录的标识结合来得到删除锁标识,此后在锁组件中利用删除锁标识进行查询,如果确定不存在该删除锁标识对应的删除锁数据,说明当前不存在作用于同一根目录的删除锁,则可以在锁组件中创建作用于根目录的更新锁之后执行更新类操作。
51.特别地,在本发明实施例中,如前述,作用于根目录的更新锁包括存储在锁组件的第一存储空间的第一更新锁数据和存储在锁组件的第二存储空间的第二更新锁数据。其中,第一更新锁数据和第二更新锁数据中含有索引数据;第一更新锁数据中的索引数据基于根目录的标识而生成,作为更新锁的标识;第二更新锁数据中的索引数据包括更新锁的标识以及基于待操作对象的标识生成的操作域数据。也就是说,第一更新锁数据可以根据更新锁的标识进行查询,第二更新锁数据可以结合更新锁的标识以及操作域数据进行查询,第二更新锁数据也可以使用更新锁的标识单独查询。进一步地,第一更新锁数据和第二更新锁数据中还可以包括过期时间,该过期时间会自动减小并当过期时间减小到零时系统自动删除相应数据,过期时间重置后会恢复到预设最大值,例如3分钟。
52.相应地,在创建作用于根目录的更新锁时,需要同时具有以上第一更新锁数据和第二更新锁数据才说明创建更新锁成功。具体的创建步骤如下:文档系统服务器首先基于根目录的标识生成更新锁标识,例如,按照固定规则将预设的更新锁前缀与根目录的标识结合,得到更新锁标识。此后,文档系统服务器查询第一存储空间是否存在该更新锁标识对应的第一更新锁数据:如果存在,则重置查询到的第一更新锁数据中的过期时间,在第二存储空间插入以该更新锁标识和基于待操作对象的标识生成的操作域数据为索引数据的第二更新锁数据。实际应用中,以上操作域数据可以由待操作对象的标识与用户的标识相结
合而得到。
53.如果文档系统服务器判断第一存储空间不存在该更新锁标识对应的第一更新锁数据,则在第一存储空间插入以该更新锁标识为索引数据的第一更新锁数据,在第二存储空间插入以该更新锁标识和基于待操作对象的标识生成的操作域数据为索引数据的第二更新锁数据。这样,即可创建作用于根目录的更新锁。
54.以锁组件是redis作为示例,第二存储空间是一张哈希表,第一存储空间是redis中不同于第二存储空间的空间。在以上过程中,文档系统服务器首先将固定的更新锁前缀与根目录的标识结合生成更新锁标识,此后以更新锁标识为key查询第一存储空间,如果返回第一更新锁数据,则重置该数据的过期时间,并在哈希表插入第二更新锁数据,即,将更新锁标识作为key,将用户标识结合待操作对象的标识形成的操作域数据作为field,设置相关数值作为value进行存储。如果以更新锁标识为key查询第一存储空间时没有返回第一更新锁数据,则以更新锁标识为key,设置相关数值为value生成第一更新锁数据插入第一存储空间,此时其中的过期时间为最大值,并以类似方式在哈希表插入第二更新锁数据。
55.作为一个优选方案,文档系统服务器在创建以上更新锁完毕之后,可以生成针对待操作对象的更新凭证作为更新类操作的依据,即只有在得到更新凭证之后才能够执行更新类操作,其原理在于,由于以上文档系统服务器中可能包含多个节点(节点可以是物理服务器或者服务程序),创建更新锁和执行更新类操作的可能不是同一节点,执行更新类操作的节点在执行更新类操作之前需要获得更新锁创建成功的消息,这就需要创建更新锁的节点通过某种方式向其发送这一消息,以上更新凭证即用于实现这一目的。可以理解,不使用更新凭证而仅使用以上更新锁机制也能够解决这一问题。较佳地,更新凭证中可以含有待操作对象的标识用以与待操作对象关联,可以含有用户标识、根目录的标识用于后续的更新锁释放,还可以含有状态参数(例如true或false)和过期时间。
56.在执行更新类操作完毕之后,文档系统服务器可以释放更新凭证,并将第二存储空间中更新锁的第二更新锁数据删除以释放更新锁,从而避免影响后续操作。在此过程中,可以通过更新凭证中的根目录的标识、用户标识以及待操作对象的标识定位相应的第二更新锁数据。值得注意的是,释放更新锁时不需要删除更新锁的第一更新锁数据,第一更新锁数据可以通过过期时间的下降自动执行删除。
57.在更新类操作的执行步骤中,如果文档系统服务器确定锁组件中存在删除锁标识对应的删除锁数据,则说明当前存在作用于同一根目录的删除锁,则不会获得更新凭证,并拒绝执行更新类操作。此后,文档系统服务器可以周期性地执行更新类操作的执行步骤中的判断并执行相应步骤。
58.删除类操作的执行步骤如下:响应于用户发起的、携带有待操作对象的标识的删除类操作,依据待操作对象的标识确定待操作对象的根目录,在预设的锁组件中判断不存在作用于根目录的删除锁和更新锁时,在锁组件中创建作用于根目录的删除锁,执行删除类操作。本步骤是关于删除类操作的步骤,具体流程参见图2中的右侧图。需要说明的是,更新类操作的执行步骤与删除类操作的执行步骤可以择一执行,也可以全部执行,全部执行时二步骤可以任一先后顺序执行。
59.以上删除类操作可以包括:删除文档、删除目录、移动文档、移动目录,待操作对象是操作针对的文档或目录。在本步骤中,文档系统服务器在接收到删除类操作之后,首先使
用类似更新类操作的执行步骤中的方法通过待操作对象的标识确定待操作对象的根目录的标识,此后在锁组件中判断是否存在作用于根目录的删除锁和更新锁,如果存在以上删除锁和更新锁中的任一,则不会创建删除锁并拒绝执行删除类操作,只有在既不存在以上删除锁也不存在以上更新锁时才会创建作用于根目录的删除锁并执行删除类操作。需要说明的是,针对是否存在删除锁的判断和针对是否存在更新锁的判断可以任一先后顺序执行。
60.在本发明实施例中,针对是否存在删除锁的判断逻辑如下:文档系统服务器基于根目录的标识生成删除锁标识(例如,将删除锁前缀与根目录的标识结合,得到删除锁标识),在锁组件中利用删除锁标识进行查询:如果查询到相应的删除锁数据,则说明存在作用于同一根目录的删除锁;如果未查询到相应的删除锁数据,则说明不存在作用于同一根目录的删除锁。
61.实际应用中,针对是否存在更新锁的判断逻辑如下:文档系统服务器基于根目录的标识生成更新锁标识(例如,将更新锁前缀与根目录的标识结合,得到更新锁标识),在第一存储空间不存在该更新锁标识对应的第一更新锁数据、或者第二存储空间不存在该更新锁标识对应的第二更新锁数据时,判断不存在作用于同一根目录的更新锁;在第一存储空间存在该更新锁标识对应的第一更新锁数据、并且第二存储空间存在该更新锁标识对应的第二更新锁数据时,判断存在作用于同一根目录的更新锁。
62.当文档系统服务器判断既不存在作用在同一根目录的删除锁也不存在作用在同一根目录的更新锁时,可以通过以下方式创建作用于根目录的删除锁:文档系统服务器在锁组件中插入包括索引数据的删除锁数据,以形成作用于根目录的删除锁。其中,以上索引数据基于根目录的标识生成(例如,将删除锁前缀与根目录的标识结合,得到该索引数据),作为删除锁的标识。
63.以锁组件是redis作为示例,可以在前述第二存储空间以外的存储空间存储删除锁数据。在以上过程中,文档系统服务器首先将固定的删除锁前缀与根目录的标识结合生成删除锁标识,此后以删除锁标识为key,设置相关数值为value形成删除锁数据并将其存储在redis。
64.作为一个优选方案,文档系统服务器在创建以上删除锁完毕之后,可以生成针对待操作对象的删除凭证作为删除类操作的依据,即只有在得到删除凭证之后才能够执行删除类操作,其原理与前述更新凭证类似,由于以上文档系统服务器中可能包含多个节点(节点可以是物理服务器或者服务程序),创建删除锁和执行删除类操作的可能不是同一节点,执行删除类操作的节点在执行删除类操作之前需要获得删除锁创建成功的消息,这就需要创建删除锁的节点通过某种方式向其发送这一消息,以上删除凭证即用于实现这一目的。可以理解,不使用删除凭证而仅使用以上删除锁机制也能够解决这一问题。较佳地,删除凭证中可以含有待操作对象的标识用以与待操作对象关联,还可以含有用户标识、根目录的标识、状态参数(例如true或false)和过期时间。
65.在执行删除类操作完毕之后,文档系统服务器可以释放删除凭证,并将锁组件中删除锁的删除锁数据删除以释放删除锁,从而避免影响后续操作。在此过程中,可以通过删除凭证中的根目录标识来定位相应的删除锁数据。
66.在删除类操作的执行步骤中,如果文档系统服务器确定存在作用于根目录的删除
锁和更新锁中的任一,则不会获得删除凭证,并拒绝执行删除类操作。此后,文档系统服务器可以周期性地执行步骤s102中的判断并执行相应步骤。
67.以下说明本发明的一个具体实施例,参见图3和图4。图3是本发明实施例中更新类操作的执行流程示意图,图4是本发明实施例中删除类操作的执行流程示意图。在本实施例中,文档系统服务器中包括网关(如facade网关)、文档服务、资源服务等节点,其中,文档服务可以执行更新类操作,资源服务可以执行删除类操作并与锁组件和数据库交互实现根目录锁机制和凭证机制。
68.如图3所示,用户在web端或客户端发起更新类操作,网关首先对接口入参进行校验,通过后调用文档服务的rpc(remote procedure call,远程过程调用)接口,文档服务调用资源服务提供的获取更新凭证接口,资源服务根据待操作对象标识从数据库中查询到父目录的全路径信息,进而得到根目录标识。此后,资源服务根据根目录标识生成删除锁标识,并以删除锁标识为key在锁组件(如redis)中查询,如果存在删除锁,则向文档服务返回获取更新凭证失败的消息,文档服务向网关返回暂时无法执行的消息。如果不存在删除锁,资源服务根据根目录标识生成更新锁标识,并以更新锁标识为key在锁组件的第一存储空间中查询,如果查询到第一更新锁数据,则重置其过期时间,并以更新锁标识为key、将用户标识结合待操作对象标识生成操作域数据作为field、以相关数值(如1)为value生成第二更新锁数据存储在锁组件的哈希表。如果未查询到第一更新锁数据,则以类似方式在第一存储空间插入第一更新锁数据,在哈希表插入第二更新锁数据。此后,资源服务生成更新凭证向文档服务返回,文档服务在接收到更新凭证之后执行更新类操作。执行完毕之后,文档服务释放更新凭证,资源服务将哈希表中的第二更新锁数据删除从而释放更新锁,此后,资源服务、文档服务、网关依次返回执行结果,最终,网关向用户返回更新类操作的执行结果。
69.如图4所示,用户发起删除类操作之后,网关首先进行入参的合法性校验,通过之后,调用资源服务提供的rpc接口,资源服务首先进行请求的幂等校验和用户删除权限的校验,通过之后,与数据库交互获取待操作对象的全路径信息进而获得根目录标识。此后,资源服务根据根目录标识生成删除锁标识,并以删除锁标识为key在锁组件查询,如果查询到删除锁,则拒绝删除类操作,如果未查询到删除锁,则根据根目录标识生成更新锁标识,并以更新锁标识为key在第一存储空间和第二存储空间查询,如果同时存在第一更新锁数据和第二更新锁数据,说明存在更新锁,则拒绝删除类操作,如果第一更新锁数据和第二更新锁数据不是同时存在,说明并不存在更新锁,则以删除锁标识为key在锁组件中插入删除锁数据从而创建删除锁。此后,资源服务生成删除凭证并执行删除类操作,执行完毕之后释放删除凭证,并将锁组件中的删除锁数据删除以释放删除锁,最后通过网关向用户返回删除类操作的执行结果。
70.可以看到,在本发明实施例中,对更新锁和删除锁的实现细节进行了封装,以上实现细节对用户无感,从而提升用户体验。
71.在本发明实施例的技术方案中,基于文档系统的文档、目录等待操作对象的根目录标识生成更新锁和删除锁的标识,从而实现作用在根目录的根目录锁机制,当用户需要执行更新类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁即可决定是否执行操作,当用户需要执行删除类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁和更新锁即可决定是否执行操作,由此避免现有分布式锁机制中需要处处加锁、
遍历整棵目录树来查询锁的问题,在保证更新类操作与删除类操作不会相互影响的前提下提高文档系统操作效率,易于维护,减小出错概率。进一步地,本发明实施例在锁组件中开辟两个存储空间(第一存储空间和第二存储空间)对更新锁进行管理,第一存储空间存储包括更新锁标识的第一更新锁数据以便从整体上指示根目录的更新锁,第二存储空间存储包括更新锁标识和操作域数据的第二更新锁数据以便具体指示对应于不同待操作对象的更新锁,只有同时存在这两种更新锁数据才能够被认定为作用在根目录的更新锁,当释放更新锁时只需删除第二存储空间的数据而不需改动第一存储空间中的数据,由此在确保更新锁有效管理的同时避免多个更新类操作在一个存储空间内反复修改加锁次数,从而降低更新锁维护成本,避免出错。
72.需要说明的是,对于前述的各方法实施例,为了便于描述,将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,某些步骤事实上可以采用其它顺序进行或者同时进行。此外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是实现本发明所必须的。
73.为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
74.请参阅图5所示,本发明实施例提供的文档系统的操作装置500可以包括:根目录确定单元501和锁处理单元502。
75.其中,根目录确定单元501可以用于:响应于用户发起的、携带有待操作对象的标识的目标操作,依据所述待操作对象的标识确定所述待操作对象的根目录;锁处理单元502可以用于:在预设的锁组件中判断不存在作用于所述根目录的、所述目标操作对应的第一锁的情况下,在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目标锁,执行所述目标操作;其中,所述待操作对象包括所述文档系统中的文档或目录。
76.具体应用中,所述目标操作包括更新类操作;所述更新类操作对应的第一锁为删除锁;所述更新类操作对应的目标锁为更新锁。
77.实际应用中,所述目标操作包括删除类操作;所述删除类操作对应的第一锁为删除锁和更新锁;所述删除类操作对应的目标锁为删除锁。
78.在本发明实施例中,根目录确定单元501可进一步用于:在所述待操作对象为所述文档系统中的文档时,从预设数据库中查询到所述待操作对象的标识对应的文档信息,在所述文档信息中获取所述待操作对象的父目录的标识,确定所述父目录的标识对应的全路径信息,从所述全路径信息中提取所述待操作对象的根目录的标识;在所述待操作对象为所述文档系统中的目录时,在所述数据库中查询到所述待操作对象的标识对应的全路径信息,从所述全路径信息中提取所述待操作对象的根目录的标识。
79.在一可选实现方式中,锁处理单元502可进一步用于:在所述目标操作为删除类操作的情况下,在所述锁组件中插入包括索引数据的删除锁数据,以形成作用于所述根目录的删除锁;其中,所述索引数据基于所述根目录的标识生成,作为所述删除锁的标识。
80.作为一个优选方案,锁处理单元502可进一步用于:基于所述根目录的标识生成删除锁标识,在所述锁组件中不存在该删除锁标识对应的删除锁数据时,判断不存在作用于所述根目录的删除锁。
81.较佳地,锁处理单元502可进一步用于:将预设的删除锁前缀与所述根目录的标识结合,得到所述删除锁标识。
82.具体场景中,作用于所述根目录的更新锁包括:存储在所述锁组件的第一存储空间的第一更新锁数据和存储在所述锁组件的第二存储空间的第二更新锁数据;其中,第一更新锁数据和第二更新锁数据中含有索引数据;第一更新锁数据中的索引数据基于所述根目录的标识生成,作为所述更新锁的标识;第二更新锁数据中的索引数据包括所述更新锁的标识、以及基于所述待操作对象的标识生成的操作域数据。
83.实际场景中,第一更新锁数据中进一步包括过期时间;以及,锁处理单元502可进一步用于:在所述目标操作为更新类操作的情况下,基于所述根目录的标识生成更新锁标识,查询第一存储空间是否存在该更新锁标识对应的第一更新锁数据:如果存在,重置查询到的第一更新锁数据中的过期时间,在第二存储空间插入以该更新锁标识和基于所述待操作对象的标识生成的操作域数据为索引数据的第二更新锁数据;如果不存在,在第一存储空间插入以该更新锁标识为索引数据的第一更新锁数据,在第二存储空间插入以该更新锁标识和基于所述待操作对象的标识生成的操作域数据为索引数据的第二更新锁数据。
84.在一个可选的技术方案中,锁处理单元502可进一步用于:在所述目标操作为删除类操作的情况下,基于所述根目录的标识生成更新锁标识,在第一存储空间不存在该更新锁标识对应的第一更新锁数据、或者第二存储空间不存在该更新锁标识对应的第二更新锁数据时,判断不存在作用于所述根目录的更新锁。
85.在一些实施例中,锁处理单元502可进一步用于:将预设的更新锁前缀与所述根目录的标识结合,得到所述更新锁标识;所述操作域数据由所述待操作对象的标识与所述用户的标识相结合而得到。
86.优选地,锁处理单元502可进一步用于:在所述锁组件中创建作用于所述根目录的更新锁之后,生成针对所述待操作对象的更新凭证;在所述锁组件中创建作用于所述根目录的删除锁之后,生成针对所述待操作对象的删除凭证;以及,响应于获得所述更新凭证,执行所述更新类操作;响应于获得所述删除凭证,执行所述删除类操作。
87.在一个实施例中,锁处理单元502可进一步用于:在执行所述更新类操作完毕之后,释放所述更新凭证,将第二存储空间中所述更新锁的第二更新锁数据删除以释放所述更新锁;在执行所述删除类操作完毕之后,释放所述删除凭证,将所述锁组件中所述删除锁的删除锁数据删除以释放所述删除锁。
88.此外,在本发明实施例中,锁处理单元502可进一步用于:在所述锁组件中判断存在作用于所述根目录的删除锁的情况下,拒绝执行所述更新类操作;在所述锁组件中判断存在作用于所述根目录的删除锁或者更新锁的情况下,拒绝执行所述删除类操作;所述更新类操作包括以下至少一种:创建文档、修改文档、创建目录、修改目录、创建文档的快捷方式、创建目录的快捷访问、创建文档副本、已删除文档恢复、已删除目录恢复;所述删除类操作包括以下至少一种:删除文档、删除目录、移动文档、移动目录;所述更新锁和所述删除锁为分布式锁,所述锁组件包括:数据库、缓存单元或者zookeeper。
89.根据本发明实施例的技术方案,基于文档系统的文档、目录等待操作对象的根目录标识生成更新锁和删除锁的标识,从而实现作用在根目录的根目录锁机制,当用户需要执行更新类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁即可决定是否
执行操作,当用户需要执行删除类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁和更新锁即可决定是否执行操作,由此避免现有分布式锁机制中需要处处加锁、遍历整棵目录树来查询锁的问题,在保证更新类操作与删除类操作不会相互影响的前提下提高文档系统操作效率,易于维护,减小出错概率。进一步地,本发明实施例在锁组件中开辟两个存储空间(第一存储空间和第二存储空间)对更新锁进行管理,第一存储空间存储包括更新锁标识的第一更新锁数据以便从整体上指示根目录的更新锁,第二存储空间存储包括更新锁标识和操作域数据的第二更新锁数据以便具体指示对应于不同待操作对象的更新锁,只有同时存在这两种更新锁数据才能够被认定为作用在根目录的更新锁,当释放更新锁时只需删除第二存储空间的数据而不需改动第一存储空间中的数据,由此在确保更新锁有效管理的同时避免多个更新类操作在一个存储空间内反复修改加锁次数,从而降低更新锁维护成本,避免出错。
90.图6示出了可以应用本发明实施例的文档系统的操作方法或文档系统的操作装置的示例性系统架构600。
91.如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605(此架构仅仅是示例,具体架构中包含的组件可以根据申请具体情况调整)。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等。
92.用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种客户端应用,例如在线协同文档应用(仅为示例)。
93.终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
94.服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所操作的在线协同文档应用提供支持的文档系统服务器(仅为示例)。文档系统服务器可以对接收到的操作请求进行处理,并将处理结果(例如操作结果
‑‑
仅为示例)反馈给终端设备601、602、603。
95.需要说明的是,本发明实施例所提供的文档系统的操作方法一般由服务器605执行,相应地,文档系统的操作装置一般设置于服务器605中。
96.应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
97.本发明还提供了一种电子设备。本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的文档系统的操作方法。
98.下面参考图7,其示出了适于用来实现本发明实施例的电子设备的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
99.如图7所示,计算机系统700包括中央处理单元(cpu)701,其可以根据存储在只读存储器(rom)702中的程序或者从存储部分708加载到随机访问存储器(ram)703中的程序而执行各种适当的动作和处理。在ram703中,还存储有计算机系统700操作所需的各种程序和
数据。cpu701、rom 702以及ram 703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。
100.以下部件连接至i/o接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便从其上读出的计算机程序根据需要被安装入存储部分708。
101.特别地,根据本发明公开的实施例,上文的主要步骤图描述的过程可以被实现为计算机软件程序。例如,本发明实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在上述实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元701执行时,执行本发明的系统中限定的上述功能。
102.需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
103.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这根据所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
104.描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬
件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括第一操作单元和第二操作单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
105.作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中的。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该设备执行时,使得该设备执行的步骤包括:响应于用户发起的、携带有待操作对象的标识的目标操作,依据所述待操作对象的标识确定所述待操作对象的根目录;在预设的锁组件中判断不存在作用于所述根目录的、所述目标操作对应的第一锁的情况下,在所述锁组件中创建作用于所述根目录的、所述目标操作对应的目标锁,执行所述目标操作;其中,所述待操作对象包括所述文档系统中的文档或目录。
106.在本发明实施例的技术方案中,基于文档系统的文档、目录等待操作对象的根目录标识生成更新锁和删除锁的标识,从而实现作用在根目录的根目录锁机制,当用户需要执行更新类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁即可决定是否执行操作,当用户需要执行删除类操作时,只需判断锁组件中是否存在作用在相应根目录的删除锁和更新锁即可决定是否执行操作,由此避免现有分布式锁机制中需要处处加锁、遍历整棵目录树来查询锁的问题,在保证更新类操作与删除类操作不会相互影响的前提下提高文档系统操作效率,易于维护,减小出错概率。进一步地,本发明实施例在锁组件中开辟两个存储空间(第一存储空间和第二存储空间)对更新锁进行管理,第一存储空间存储包括更新锁标识的第一更新锁数据以便从整体上指示根目录的更新锁,第二存储空间存储包括更新锁标识和操作域数据的第二更新锁数据以便具体指示对应于不同待操作对象的更新锁,只有同时存在这两种更新锁数据才能够被认定为作用在根目录的更新锁,当释放更新锁时只需删除第二存储空间的数据而不需改动第一存储空间中的数据,由此在确保更新锁有效管理的同时避免多个更新类操作在一个存储空间内反复修改加锁次数,从而降低更新锁维护成本,避免出错。
107.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献