CN106371770A - 数据写入方法及装置 - Google Patents
数据写入方法及装置 Download PDFInfo
- Publication number
- CN106371770A CN106371770A CN201610808000.3A CN201610808000A CN106371770A CN 106371770 A CN106371770 A CN 106371770A CN 201610808000 A CN201610808000 A CN 201610808000A CN 106371770 A CN106371770 A CN 106371770A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- frame
- data volume
- forward direction
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据写入方法及装置,属于数据库技术领域。所述方法用于终端,所述方法包括:获取前向日志文件,所述前向日志文件依次包括文件头、扩展区和多个文件帧,所述文件头和所述扩展区的数据量之和等于文件系统中的多个数据页中每个所述数据页可容纳的数据量,每个所述数据页可容纳的数据量相等,每个所述文件帧依次包括数据区和帧头,所述多个文件帧中的首个文件帧的数据量等于每个所述数据页可容纳的数据量;按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中。本发明解决了数据的写放大问题较严重,实现了改善数据的写放大问题的效果,用于数据写入。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据写入方法及装置。
背景技术
轻型数据库(英文:SQLite)是一个开源的嵌入式关系数据库,具有高度便携、内存开销小、结构紧凑、高效可靠等特点。SQLite作为一个C库,可以嵌入到应用程序中,并与该应用程序共用一个进程空间。其中,C库即C标准库,C库包括美国国家标准学会(英文:American National Standards Institute;简称:ANSI)/国际标准化组织(英文:International Standard Organization;简称:ISO)C语言标准的所有库函数。当前,SQLite广泛应用于各种嵌入式终端中。SQLite将数据以SQLite节点的格式存在数据库文件中。为了实现事务的原子性(一个事务包含多个操作,事务的原子性指的是该多个操作要么全都执行,要么全都不执行),SQLite引入了两种日志文件,这两种日志文件分别是回滚日志文件和前向日志文件(英文:Write Ahead Logging;简称:WAL)。其中,前向日志文件用于以日志结构记录SQLite中的更新数据,即一个更新的SQLite节点。如果需要对事务进行回滚操作,直接删除前向日志文件中记录的更新数据即可。通常需要将前向日志文件中的数据写入文件系统中的数据页中,用于缓存。
现有技术中有一种关于前向日志文件的数据写入方法,通过该方法,基于前向日志文件的文件结构,将前向日志文件中的数据写入文件系统中的数据页(数据页可容纳的数据量通常为4KB)中。图1-1示出了前向日志文件的文件结构的示意图,该前向日志文件包括一个文件头(英文:WAL Header)和多个文件帧(英文:WAL Frame),每个文件帧包括帧头(英文:Frame Header)和数据区(英文:Frame Data),数据区中的数据即为更新数据。文件头的数据量为32B(字节),帧头的数据量为24B,数据区的数据量为4KB(千字节)。
由于文件头的数据量不是数据页可容纳的数据量的倍数,所以第一个文件帧的起始位置与数据页的起始位置无法对齐,再加上更新数据是不断地以文件帧的格式添加至前向日志文件的尾部,所以,继第一个文件帧之后的文件帧的起始位置也无法与对应的数据页的起始位置对齐,最终导致最后一个待写入的数据页未填满,数据的写放大问题较严重。
发明内容
为了解决现有技术中数据的写放大问题较严重的问题,本发明实施例提供了一种数据写入方法及装置。所述技术方案如下:
第一方面,提供了一种数据写入方法,所述方法包括:
获取前向日志文件,所述前向日志文件依次包括文件头、扩展区和多个文件帧,所述文件头和所述扩展区的数据量之和等于文件系统中的多个数据页中每个所述数据页可容纳的数据量,每个所述数据页可容纳的数据量相等,每个所述文件帧依次包括数据区和帧头,所述多个文件帧中的首个文件帧的数据量等于每个所述数据页可容纳的数据量;
按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中。
该数据写入方法中,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧的起始位置也能够与第三个数据页的起始位置对齐,改善了数据的写放大问题。
可选的,所述按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中,包括:
根据所述文件头在所述前向日志文件中的位置、所述扩展区在所述前向日志文件中的位置和每个所述文件帧在所述前向日志文件中的位置,将所述前向日志文件的各部分数据写入对应的数据页中。
为了将前向日志文件中的数据写入文件系统中的数据页中,可以先确定文件头、扩展区以及每个文件帧的位置,然后再根据文件头、扩展区以及每个文件帧的位置将各部分的数据写入对应的数据页中。
相应的,为了恢复WAL中的数据,可以先确定每个文件帧中的数据区和帧头在WAL中的位置,然后根据数据区和帧头在WAL中的位置,对WAL中的数据进行恢复。
进一步的,为了读取文件系统中相应的数据页中的数据,可以先确定每个文件帧中的数据区在WAL中的位置,再根据数据区在WAL中的位置,读取文件系统中相应的数据页中的数据。由于每次只有一个数据页中的数据被读取,所以不会出现“跨页”现象。
进一步的,为了完成检查点操作,可以先确定每个文件帧中的数据区在WAL中的位置,再根据数据区在WAL中的位置,将WAL中的数据写入数据库文件中。
可选的,每个所述文件帧包括预留区,所述预留区用于保存每个所述文件帧的帧头。
进一步的,该方法还可以检测获取的WAL中是否包括预留区,当WAL中不包括预留区时,可以确定获取的WAL的文件结构是现有技术中WAL的文件结构;当WAL中包括预留区时,可以确定获取的WAL的文件结构是本发明实施例提供的WAL的文件结构。当获取的WAL的文件结构是现有技术中WAL的文件结构时,就按照现有技术中WAL的文件结构所对应的数据写入流程,恢复流程,读流程以及检查点流程完成相应的操作;当获取的WAL的文件结构是本发明实施例提供的WAL的文件结构时,就按照本发明实施例提供的WAL的文件结构所对应的数据写入方法,恢复流程、读流程以及检查点流程完成相应的操作,便于终端能够同时操作两种格式的WAL,使得终端具有较好的兼容性。
可选的,所述多个文件帧中每个所述文件帧的数据量均等于每个所述数据页可容纳的数据量。
由于文件头和扩展区的数据量之和等于文件系统中每个数据页可容纳的数据量,且每个文件帧的数据量均等于文件系统中每个数据页可容纳的数据量,所以每个文件帧起始位置均能够与对应的数据页的起始位置对齐,每个文件帧中的数据仅需写入一个数据页,有效改善了数据的写放大问题。
可选的,每个所述数据页可容纳的数据量等于4KB;
所述文件头的数据量为32B;
每个所述文件帧中的帧头的数据量为24B。
可选的,所述获取前向日志文件,包括:
通过应用程序获取所述前向日志文件,所述应用程序嵌入有轻型数据库SQLite。
第二方面,提供了一种数据写入装置,用于终端,所述装置包括:
获取单元,用于获取前向日志文件,所述前向日志文件依次包括文件头、扩展区和多个文件帧,所述文件头和所述扩展区的数据量之和等于文件系统中的多个数据页中每个所述数据页可容纳的数据量,每个所述数据页可容纳的数据量相等,每个所述文件帧依次包括数据区和帧头,所述多个文件帧中的首个文件帧的数据量等于每个所述数据页可容纳的数据量;
写入单元,用于按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中。
可选的,所述写入单元,具体用于:
根据所述文件头在所述前向日志文件中的位置、所述扩展区在所述前向日志文件中的位置和每个所述文件帧在所述前向日志文件中的位置,将所述前向日志文件的各部分数据写入对应的数据页中。
可选的,每个所述文件帧包括预留区,所述预留区用于保存每个所述文件帧的帧头。
可选的,所述多个文件帧中每个所述文件帧的数据量均等于每个所述数据页可容纳的数据量。
可选的,每个所述数据页可容纳的数据量等于4KB;
所述文件头的数据量为32B;
每个所述文件帧中的帧头的数据量为24B。
可选的,所述获取单元,具体用于:
通过应用程序获取所述前向日志文件,所述应用程序嵌入有轻型数据库SQLite。
第三方面,提供了一种数据写入装置,用于终端,所述装置包括:处理器、存储器、网络接口和总线;总线用于连接处理器、存储器和网络接口,处理器用于执行存储器中存储的程序。所述程序包括第一方面所述的数据写入方法。
本发明提供的技术方案带来的有益效果是:
本发明提供的数据写入方法及装置,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧的起始位置也能够与第三个数据页的起始位置对齐,相较于现有技术,改善了数据的写放大问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1-1是现有技术中的WAL的文件结构的示意图;
图1-2是本发明各实施例涉及的终端的结构示意图;
图2-1是本发明实施例提供的一种数据写入方法的流程图;
图2-2是SQLite节点中的一种叶子节点的结构示意图;
图2-3是一种由待写入数据引起的写放大示意图;
图2-4是另一种由待写入数据引起的写放大示意图;
图2-5是数据库文件中的数据被写入数据页时产生的写放大示意图;
图2-6是回滚日志文件中的数据被写入数据页时产生的写放大示意图;
图2-7是WAL中的数据被写入数据页时产生的写放大示意图;
图2-8是本发明实施例提供的WAL的文件结构示意图;
图3是本发明实施例提供的一种数据写入装置的结构示意图;
图4是本发明实施例提供的另一种数据写入装置的结构示意图。
通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1-2示出了本发明各实施例涉及的终端的结构示意图,该终端可以是手机、平板电脑和膝上型便携计算机等电子设备。如图1-2所示,该终端包括应用程序01、文件系统02和存储系统03。
应用程序01嵌入有SQLite011,应用程序01与文件系统02之间设置有通信接口,应用程序01通过SQLite011调用该通信接口,以向文件系统02中的数据页写数据,或者从文件系统02中的数据页读数据。应用程序01通过中央处理器(英语:Central Processing Unit;简称:CPU)(图1-2中未画出)访问文件系统02。对于WAL来说,终端可以通过应用程序01获取WAL,再将WAL中的数据写入文件系统02中的数据页。
文件系统02包括页面缓存单元021,该页面缓存单元021用于缓存多个数据页,数据页用于缓存数据。
存储系统03用于存储数据,存储系统03可以包括存储控制器031和闪速存储器(英文:Flash Memory)032,存储控制器031可以为嵌入式多媒体卡(英文:Embeded MultiMediaCard;简称:EMMC)。文件系统02可以在应用程序01的指示下,通过存储控制器031向闪速存储器032中写数据,或者从闪速存储器032中读数据。此外,存储控制器031还能够对闪速存储器032进行读写擦以及垃圾回收等操作。
本发明实施例提供了一种数据写入方法,用于终端,如图2-1所示,该方法包括:
步骤101、获取前向日志文件,该前向日志文件依次包括文件头、扩展区和多个文件帧,文件头和扩展区的数据量之和等于文件系统中的多个数据页中每个数据页可容纳的数据量,每个数据页可容纳的数据量相等,每个文件帧依次包括数据区和帧头,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量。
步骤102、按照前向日志文件的文件结构,将前向日志文件中的数据写入文件系统中的数据页中。
综上所述,本发明实施例提供的数据写入方法,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧的起始位置也能够与第三个数据页的起始位置对齐,相较于现有技术,改善了数据的写放大问题。
关于文件头、文件帧中的数据区和帧头可以参考现有技术,本发明实施例对此不再赘述。
现有技术中,SQLite将数据以SQLite节点的格式存在数据库文件中,在读取数据和写入数据时,SQLite节点会保存至内存中,用于缓存。每个SQLite节点为文件系统中的一个数据页。SQLite节点的数据量大于等于512B,且小于等于64KB。通常,SQLite节点的数据量等于4KB,即数据页可容纳的数据量为4KB。
进一步的,SQLite节点包括多种类型的节点,其中一种类型的节点为叶子节点,图2-2示出了该叶子节点的结构示意图。如图2-2所示,该叶子节点包括页头(英文:pageheader)、索引(英文:index)数组(索引数组也叫做单元指针数组,即多个索引按照一定顺序排列的集合)、多个单元(英文:cell)(单元也叫做单元内容区)和预留区(预留区也叫做未分配空间区)。其中,页头位于叶子节点的头部,索引数组位于页头之后,索引数组中的每个索引指向一个单元,每个单元中保存着SQLite中的一条记录。索引数组中的索引从左向右分配,即最后一个索引与页头的距离最大。多个单元是从右向左分配,即最后一个单元与页头的距离最小。多个单元的起始位置与预留区的起始位置为同一位置。当SQLite中的一条记录被删除时,保存该记录的单元被标记为无效单元,指向该无效单元的索引被删除,无效单元由链表连接,其余索引被批量前移。其中,页头能够记录无效单元和链表头。当该叶子节点中的可用空间被使用完,SQLite会再申请一个新的SQLite节点来保存数据。此外,图2-2中的预留区用于后续扩展,预留区的数据量为0B。
本发明实施例不考虑文件系统产生的元数据而引起的写放大问题,仅考虑待写入数据本身引起的写放大问题。图2-3示出了一种由待写入数据引起的写放大示意图,由于待写入文件系统中的数据页的数据量不是数据页可容纳的数据量的倍数,所以最后一个数据页未填满,引起写放大问题。示例的,待写入的数据量为4KB+4B,而一个数据页可容纳的数据量为4KB,那么数据量为4KB+4B的数据需要写入两个数据页,因此,实际写入底层的数据量为8KB,进而引起写放大问题。图2-4示出了另一种由待写入数据引起的写放大示意图,由于待写入的数据起始位置与数据页的起始位置未对齐,所以即使待写入的数据量是数据页可容纳的数据量的倍数,也会引起写放大问题。示例的,待写入的数据量为4KB,由于待写入的数据起始位置与数据页的起始位置未对齐,所以数据量为4KB的数据同样需要写入两个数据页,因此,实际写入底层的数据量也为8KB。
此外,现有技术中,SQLite中主要包括三种文件,这三种文件分别是数据库文件、回滚日志文件和WAL,本发明实施例结合图2-3和图2-4,分别对这三种文件产生的写放大问题进行分析。图2-5示出了现有技术中的数据库文件中的数据被写入文件系统中的数据页时产生的写放大示意图,假设数据库文件包括节点1、节点2和节点3,数据库文件中每个节点的数据量等于数据页可容纳的数据量,示例的,数据页可容纳的数据量为4KB,且每次追加的新数据的数据量也等于数据页可容纳的数据量,参见图2-5,节点2的写入点能够与第二个数据页的起始位置对齐,所以将数据库文件中的数据写入文件系统中的数据页,不会产生写放大问题。
图2-6示出了现有技术中的回滚日志文件中的数据被写入文件系统中的数据页时产生的写放大示意图。该回滚日志文件包括一个日志头(英文:Journal header)、一个扩展区和多个日志帧(英文:Journal frame)。每个日志帧包括节点编号,节点数据和校验和(英文:checksum)。其中,日志头和扩展区的数据量之和为512B,节点编号的数据量为4B,节点数据的数据量为4KB,校验和的数据量为4B。日志帧中的节点数据为保存的原始数据。每次在将回滚日志文件中保存的原始数据写入文件系统中的数据页时,都是从日志头处开始写入,参见图2-6,日志头的写入点与文件系统中的数据页的起始位置是对齐的,所以回滚日志文件产生的写放大问题较不严重。关于回滚日志文件的文件结构可以参考现有技术,本发明实施例对此不再赘述。
图1-1示出了现有技术中的WAL的文件结构示意图。如图1-1所示,WAL包括一个文件头和多个文件帧,每个文件帧包括帧头和数据区。数据区记录着更新数据。通常,文件头的数据量为32B,每个文件帧的帧头的数据量为24B,每个文件帧的数据区的数据量为4KB。另外,WAL可以被多次重复使用,后续增加的更新数据不断地以文件帧的格式追加至WAL的尾部。当需要执行检查点(英文:checkpoint)时,WAL中的数据被写入数据库文件中。之后,WAL再重新记录更新数据,直至需要执行检查点时才停止记录更新数据。图2-7示出了现有技术中,WAL中的数据被写入文件系统中的数据页时产生的写放大示意图。由于文件头的数据量不是数据页可容纳的数据量的倍数,所以第一个文件帧的起始位置与数据页的起始位置无法对齐,再加上更新数据是不断地以文件帧的格式添加至WAL的尾部,所以,继第一个文件帧之后的文件帧的起始位置(即图2-7中的写入点)也无法与对应的数据页的起始位置对齐,这样一来,最后一个待写入的数据页未填满,所以,写放大问题较严重。示例的,每个文件帧的帧头的数据量为24B,每个文件帧的数据区的数据量为4KB,那么每次追加到WAL中的数据量就为24B+4KB,由于文件系统中的数据页的数据量为4KB,所以需要采用文件系统中的两个数据页来保存24B+4KB的数据,这样一来,写入底层的数据量变为了8KB,产生了写放大问题。
需要补充说明的是,WAL需要定期将WAL中的更新数据写入数据库文件中,该过程称为检查点。通常当WAL积累到1000页时,SQLite会自动执行检查点。此外,SQLite还提供了相关的接口,所以在适当的时候,也可以手动执行检查点。执行了检查点之后,WAL会被清空。
为了避免WAL中的数据被写入文件系统中的数据页时产生的写放大问题,本发明实施例提供了一种新的WAL文件结构,图2-8示出了本发明实施例提供的WAL文件结构的示意图。如图2-8所示,该WAL依次包括文件头001、扩展区002和多个文件帧003。其中,文件头001和扩展区002的数据量之和等于文件系统中的多个数据页中每个数据页可容纳的数据量。示例的,每个数据页可容纳的数据量为4KB。每个文件帧003又依次包括数据区0031和帧头0032,多个文件帧中的首个文件帧003的数据量等于每个数据页可容纳的数据量(即4KB)。示例的,文件头的数据量为32B,扩展区用0来填充。
参见图2-8和图2-7,由于本发明实施例中的文件头001和扩展区002的数据量之和等于文件系统中的每个数据页可容纳的数据量,首个文件帧的数据量也等于每个数据页可容纳的数据量,所以,首个文件帧的起始位置能够与待写入数据的第二个数据页的起始位置对齐,继首个文件帧之后的第二个文件帧的起始位置也能够与待写入数据的第三个数据页的起始位置对齐。
如图2-8所示,每个文件帧003包括预留区B,该预留区B用于保存每个文件帧的帧头0032。参见图2-2,SQLite节点中的预留区的数据量为0B,本发明实施例可以将该预留区的数据量设置为24B,并将每个文件帧的帧头0032设置在该预留区内。也就是说,每个文件帧的帧头的数据量为24B。
进一步的,该方法还可以检测获取的WAL中是否包括预留区,当WAL中不包括预留区时,可以确定获取的WAL的文件结构是现有技术中WAL的文件结构;当WAL中包括预留区时,可以确定获取的WAL的文件结构是本发明实施例提供的WAL的文件结构。
需要补充说明的是,一方面,当图2-8中的多个文件帧中除首个文件帧之外的文件帧的数据量小于文件系统中的数据页可容纳的数据量时,由于首个文件帧的起始位置能够与待写入数据的第二个数据页的起始位置对齐,所以首个文件帧中的数据无需写入两个数据页。当写入的数据量较大时,该方法也能改善数据的写放大问题。另一方面,当图2-8中的多个文件帧中除首个文件帧之外的文件帧的数据量大于文件系统中的数据页可容纳的数据量时,由于前两个数据帧的起始位置能够与对应的数据页的起始位置对齐,参见图2-8,第二个数据帧的写入点与数据页的起始位置对齐,首个文件帧中的数据无需写入两个数据页,所以该方法也能改善数据的写放大问题。
优选的,图2-8所示的多个文件帧中每个文件帧的数据量均等于文件系统中每个数据页可容纳的数据量。由于文件头001和扩展区002的数据量之和等于文件系统中每个数据页可容纳的数据量,每个文件帧的数据量003均等于文件系统中每个数据页可容纳的数据量,所以每个文件帧起始位置均能够与对应的数据页的起始位置对齐,每个文件帧中的数据仅需写入一个数据页,有效改善了数据的写放大问题。
可选的,获取前向日志文件,包括:通过应用程序获取前向日志文件,该应用程序嵌入有SQLite。
可选的,步骤102可以包括:根据文件头在前向日志文件中的位置、扩展区在前向日志文件中的位置和每个文件帧在前向日志文件中的位置,将前向日志文件的各部分数据写入对应的数据页中。
具体的,参见图2-8,在将WAL中的数据写入文件系统中的数据页中的时候,可以根据文件头001在WAL中的位置、扩展区002在WAL中的位置,以及每个文件帧003中的数据区和帧头在WAL中的位置,将WAL的各部分数据写入对应的数据页中。由于WAL文件结构发生了改变,所以在将WAL中的数据写入文件系统中的数据页时,可先确定文件头001、扩展区002以及每个文件帧003的位置,再根据各位置将各部分的数据写入对应的数据页中。
需要补充说明的是,为了恢复图2-8所示的WAL中的数据,可以修改现有技术的恢复流程中每个文件帧中的数据区和帧头的恢复位置。具体的,可以根据每个文件帧中的数据区和帧头在WAL中的位置,对WAL中的数据进行恢复。
为了读取文件系统中相应的数据页中的数据,可以修改现有技术的读流程中每个文件帧中的数据区的读取位置。具体的,可以根据每个文件帧中的数据区在WAL中的位置,读取文件系统中相应的数据页中的数据。执行修改后的读流程时,由于每次只有一个数据页中的数据被读取,所以不会出现“跨页”现象。
为了执行检查点,可以修改现有技术的检查点流程中每个文件帧中的数据区的读取位置。具体的,可以根据每个文件帧中的数据区在WAL中的位置,将WAL中的数据写入数据库文件中。本发明实施例对现有技术中的恢复流程、读流程和检查点流程不再赘述。
需要补充说明的是,如果在步骤101中获取的WAL的文件结构如图1-1所示,那么根据步骤102,按照图1-1所示的WAL文件结构,可以根据现有技术中的数据写入方法,将该WAL中的数据写入文件系统中的数据页中。
由于图1-1中不存在预留区,所以该方法可以检测获取的WAL中是否包括预留区,当WAL中不包括预留区时,可以确定获取的WAL的文件结构是现有技术中WAL的文件结构;当WAL中包括预留区时,可以确定获取的WAL的文件结构是本发明实施例提供的WAL的文件结构。当获取的WAL的文件结构是现有技术中WAL的文件结构时,就按照现有技术中WAL的文件结构对应的数据写入流程,恢复流程,读流程以及检查点流程完成相应的操作;当获取的WAL的文件结构是本发明实施例提供的WAL的文件结构时,就按照本发明实施例提供的WAL的文件结构所对应的数据写入方法,恢复流程、读流程以及检查点流程完成相应的操作。这样一来,终端能够同时操作两种文件结构的WAL,能够避免图1-1所示的WAL中的数据丢失,具有较好的兼容性。
本发明实施例提供的数据写入方法,改善了数据的写放大问题,提高了SQLite中数据的插入性能、更改性能和删除性能(即增改删性能)。采用测试工具(英文:Benchmark)性能测试检测得到SQLite中数据的插入性能、更改性能和删除性能均提升了8%左右。示例的,采用现有技术中的数据写入方法完成数据写入过程后,能够在一分钟之内执行100次数据删除操作,而采用本发明实施例提供的数据写入方法完成数据写入过程后,能够在一分钟之内执行108次数据删除操作。
同时,采用相机连拍测试检测得到SQLite中数据的插入性能、更改性能和删除性能均提升了5%左右。示例的,采用现有技术中的数据写入方法完成数据写入过程后,操作SQLite的延时为1秒,而采用本发明实施例提供的数据写入方法完成数据写入过程后,操作SQLite的延时缩短至0.95秒。
综上所述,本发明实施例提供的数据写入方法,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧也能够与第三个数据页的起始位置对齐,相较于现有技术,改善了数据的写放大问题,提升了SQLite中数据的增改删性能。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
本发明实施例提供了一种数据写入装置,用于终端,如图3所示,该装置包括:
获取单元310,用于获取前向日志文件,该前向日志文件依次包括文件头、扩展区和多个文件帧,文件头和扩展区的数据量之和等于文件系统中的多个数据页中每个数据页可容纳的数据量,每个数据页可容纳的数据量相等,每个文件帧依次包括数据区和帧头,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量。
写入单元320,用于按照前向日志文件的文件结构,将前向日志文件中的数据写入文件系统中的数据页中。
综上所述,本发明实施例提供的数据写入装置,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧也能够与第三个数据页的起始位置对齐,相较于现有技术,改善了数据的写放大问题。
在一种可能的实施方式中,写入单元320,具体用于:
根据文件头在前向日志文件中的位置、扩展区在前向日志文件中的位置和每个文件帧在前向日志文件中的位置,将前向日志文件的各部分数据写入对应的数据页中。
在一种可能的实施方式中,每个文件帧包括预留区,预留区用于保存每个文件帧的帧头。
在一种可能的实施方式中,多个文件帧中每个文件帧的数据量均等于每个数据页可容纳的数据量。
示例的,每个数据页可容纳的数据量等于4KB;文件头的数据量为32B;每个文件帧中的帧头的数据量为24B。
在一种可能的实施方式中,获取单元310,具体用于:
通过应用程序获取前向日志文件,应用程序嵌入有轻型数据库SQLite。
此外,图3中的获取单元310和写入单元320的具体工作过程可以参考图2-1所示的实施方式进行说明。
综上所述,本发明实施例提供的数据写入方法,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧也能够与第三个数据页的起始位置对齐,相较于现有技术,改善了数据的写放大问题,提升了SQLite中数据的增改删性能。
本发明实施例提供了另一种数据写入装置,用于终端,如图4所示,该装置包括:处理器801、存储器802、网络接口803和总线804;总线804用于连接处理器801、存储器802和网络接口803,处理器801用于执行存储器802中存储的程序8021。上文中图3的获取单元310和写入单元320可以是由处理器801执行存储器802中存储的程序8021来实现。
存储器802可能包含随机存取存储器(英文:Random Access Memory;简称:RAM),也可能包含非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。处理器801可以执行存储器802中存储的程序8021,该程序8021包括下述数据写入方法:
获取前向日志文件,该前向日志文件依次包括文件头、扩展区和多个文件帧,文件头和扩展区的数据量之和等于文件系统中的多个数据页中每个数据页可容纳的数据量,每个数据页可容纳的数据量相等,每个文件帧依次包括数据区和帧头,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量;
按照前向日志文件的文件结构,将前向日志文件中的数据写入文件系统中的数据页中。
具体的,按照前向日志文件的文件结构,将前向日志文件中的数据写入文件系统中的数据页中,包括:
根据文件头在前向日志文件中的位置、扩展区在前向日志文件中的位置和每个文件帧在前向日志文件中的位置,将前向日志文件的各部分数据写入对应的数据页中。
进一步的,每个文件帧包括预留区,预留区用于保存每个文件帧的帧头。
进一步的,多个文件帧中每个文件帧的数据量均等于每个数据页可容纳的数据量。
示例的,每个数据页可容纳的数据量等于4KB;
文件头的数据量为32B;
每个文件帧中的帧头的数据量为24B。
具体的,获取前向日志文件,包括:
通过应用程序获取前向日志文件,应用程序嵌入有轻型数据库SQLite。
综上所述,本发明实施例提供的数据写入方法,由于获取的前向日志文件中文件头和扩展区的数据量之和等于每个数据页可容纳的数据量,多个文件帧中的首个文件帧的数据量等于每个数据页可容纳的数据量,所以该前向日志文件中的第一个文件帧的起始位置能够与第二个数据页的起始位置对齐,第二个文件帧也能够与第三个数据页的起始位置对齐,相较于现有技术,改善了数据的写放大问题,提升了SQLite中数据的增改删性能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种数据写入方法,其特征在于,用于终端,所述方法包括:
获取前向日志文件,所述前向日志文件依次包括文件头、扩展区和多个文件帧,所述文件头和所述扩展区的数据量之和等于文件系统中的多个数据页中每个所述数据页可容纳的数据量,每个所述数据页可容纳的数据量相等,每个所述文件帧依次包括数据区和帧头,所述多个文件帧中的首个文件帧的数据量等于每个所述数据页可容纳的数据量;
按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中。
2.根据权利要求1所述的方法,其特征在于,所述按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中,包括:
根据所述文件头在所述前向日志文件中的位置、所述扩展区在所述前向日志文件中的位置和每个所述文件帧在所述前向日志文件中的位置,将所述前向日志文件的各部分数据写入对应的数据页中。
3.根据权利要求1所述的方法,其特征在于,
每个所述文件帧包括预留区,所述预留区用于保存每个所述文件帧的帧头。
4.根据权利要求1所述的方法,其特征在于,
所述多个文件帧中每个所述文件帧的数据量均等于每个所述数据页可容纳的数据量。
5.根据权利要求1所述的方法,其特征在于,
每个所述数据页可容纳的数据量等于4千字节;
所述文件头的数据量为32字节;
每个所述文件帧中的帧头的数据量为24字节。
6.根据权利要求1至5任一所述的方法,其特征在于,所述获取前向日志文件,包括:
通过应用程序获取所述前向日志文件,所述应用程序嵌入有轻型数据库SQLite。
7.一种数据写入装置,其特征在于,用于终端,所述装置包括:
获取单元,用于获取前向日志文件,所述前向日志文件依次包括文件头、扩展区和多个文件帧,所述文件头和所述扩展区的数据量之和等于文件系统中的多个数据页中每个所述数据页可容纳的数据量,每个所述数据页可容纳的数据量相等,每个所述文件帧依次包括数据区和帧头,所述多个文件帧中的首个文件帧的数据量等于每个所述数据页可容纳的数据量;
写入单元,用于按照所述前向日志文件的文件结构,将所述前向日志文件中的数据写入所述文件系统中的数据页中。
8.根据权利要求7所述的装置,其特征在于,所述写入单元,具体用于:
根据所述文件头在所述前向日志文件中的位置、所述扩展区在所述前向日志文件中的位置和每个所述文件帧在所述前向日志文件中的位置,将所述前向日志文件的各部分数据写入对应的数据页中。
9.根据权利要求7所述的装置,其特征在于,
每个所述文件帧包括预留区,所述预留区用于保存每个所述文件帧的帧头。
10.根据权利要求7所述的装置,其特征在于,
所述多个文件帧中每个所述文件帧的数据量均等于每个所述数据页可容纳的数据量。
11.根据权利要求7所述的装置,其特征在于,
每个所述数据页可容纳的数据量等于4千字节;
所述文件头的数据量为32字节;
每个所述文件帧中的帧头的数据量为24字节。
12.根据权利要求7至11任一所述的装置,其特征在于,所述获取单元,具体用于:
通过应用程序获取所述前向日志文件,所述应用程序嵌入有轻型数据库SQLite。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610808000.3A CN106371770B (zh) | 2016-09-05 | 2016-09-05 | 数据写入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610808000.3A CN106371770B (zh) | 2016-09-05 | 2016-09-05 | 数据写入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106371770A true CN106371770A (zh) | 2017-02-01 |
CN106371770B CN106371770B (zh) | 2019-07-12 |
Family
ID=57900378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610808000.3A Active CN106371770B (zh) | 2016-09-05 | 2016-09-05 | 数据写入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106371770B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918611A (zh) * | 2019-01-28 | 2019-06-21 | 浙江工业大学 | 一种基于导轨式电磁驱动压入仪的压入载荷计算方法 |
CN110362547A (zh) * | 2018-04-02 | 2019-10-22 | 阿里巴巴集团控股有限公司 | 日志文件的编码、解析、存储方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102867019A (zh) * | 2012-07-30 | 2013-01-09 | 利尔达科技有限公司 | 分离式文件系统及其管理方法 |
US20140379658A1 (en) * | 2013-06-25 | 2014-12-25 | Optumsoft, Inc. | Constraint-based consistency with snapshot isolation |
US20150278270A1 (en) * | 2014-03-28 | 2015-10-01 | Futurewei Technologies, Inc. | Systems and Methods to Optimize Multi-version Support in Indexes |
CN105468398A (zh) * | 2014-09-30 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 跨终端架构的模块上传方法、请求方法以及加载方法 |
CN105574104A (zh) * | 2015-12-11 | 2016-05-11 | 上海爱数信息技术股份有限公司 | 一种基于ObjectStore的LogStructure存储系统及其数据写入方法 |
-
2016
- 2016-09-05 CN CN201610808000.3A patent/CN106371770B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102867019A (zh) * | 2012-07-30 | 2013-01-09 | 利尔达科技有限公司 | 分离式文件系统及其管理方法 |
US20140379658A1 (en) * | 2013-06-25 | 2014-12-25 | Optumsoft, Inc. | Constraint-based consistency with snapshot isolation |
US20150278270A1 (en) * | 2014-03-28 | 2015-10-01 | Futurewei Technologies, Inc. | Systems and Methods to Optimize Multi-version Support in Indexes |
CN105468398A (zh) * | 2014-09-30 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 跨终端架构的模块上传方法、请求方法以及加载方法 |
CN105574104A (zh) * | 2015-12-11 | 2016-05-11 | 上海爱数信息技术股份有限公司 | 一种基于ObjectStore的LogStructure存储系统及其数据写入方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110362547A (zh) * | 2018-04-02 | 2019-10-22 | 阿里巴巴集团控股有限公司 | 日志文件的编码、解析、存储方法和装置 |
CN110362547B (zh) * | 2018-04-02 | 2023-10-03 | 杭州阿里巴巴智融数字技术有限公司 | 日志文件的编码、解析、存储方法和装置 |
CN109918611A (zh) * | 2019-01-28 | 2019-06-21 | 浙江工业大学 | 一种基于导轨式电磁驱动压入仪的压入载荷计算方法 |
CN109918611B (zh) * | 2019-01-28 | 2020-06-02 | 浙江工业大学 | 一种基于导轨式电磁驱动压入仪的压入载荷计算方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106371770B (zh) | 2019-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0351387B1 (en) | Minimizing locking and reading in a segmented storage space | |
US9021303B1 (en) | Multi-threaded in-memory processing of a transaction log for concurrent access to data during log replay | |
DE69816686T2 (de) | Hochfrequenzabtastung von Leistungszählern | |
CN108431783B (zh) | 访问请求处理方法、装置及计算机系统 | |
KR101491626B1 (ko) | 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템 | |
DE102018105427A1 (de) | Beibehalten von Daten bei einer Stromabschaltung | |
US20180300083A1 (en) | Write-ahead logging through a plurality of logging buffers using nvm | |
US8990159B2 (en) | Systems and methods for durable database operations in a memory-mapped environment | |
US11030092B2 (en) | Access request processing method and apparatus, and computer system | |
EP3570182B1 (en) | Sparse infrastructure for tracking ad-hoc operation timestamps | |
KR101529651B1 (ko) | 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템 | |
Li et al. | Database management strategy and recovery methods of Android | |
CN106371770B (zh) | 数据写入方法及装置 | |
CN113821382B (zh) | 一种实时数据库数据处理方法、系统和设备 | |
CN110019063A (zh) | 计算节点数据容灾回放的方法、终端设备及存储介质 | |
Zimmermann et al. | Forensic analysis of YAFFS2 | |
CN108829345B (zh) | 日志文件的数据处理方法和终端设备 | |
CN110187834A (zh) | 重删副本的数据处理方法、装置、电子设备 | |
Havasi | An improved B+ tree for flash file systems | |
CN105659214A (zh) | 数据单元集合的检查点设置 | |
CN115481086A (zh) | 一种海量小文件读写方法、系统、电子设备及存储介质 | |
CN111857586A (zh) | 一种SSD Trim优化方法、系统、终端及存储介质 | |
Son et al. | A tiny-capacitor-backed non-volatile buffer to reduce storage writes in smartphones | |
Yuan et al. | Comprehensive evaluation of file systems robustness with SPIN model checking | |
CN113051241A (zh) | 数据库持久化的方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200422 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 301, A building, room 3, building 301, foreshore Road, No. 310052, Binjiang District, Zhejiang, Hangzhou Patentee before: Huawei Technologies Co.,Ltd. |