CN115344577A - 一种基于反射实现HBase动态列的方法 - Google Patents
一种基于反射实现HBase动态列的方法 Download PDFInfo
- Publication number
- CN115344577A CN115344577A CN202210943357.8A CN202210943357A CN115344577A CN 115344577 A CN115344577 A CN 115344577A CN 202210943357 A CN202210943357 A CN 202210943357A CN 115344577 A CN115344577 A CN 115344577A
- Authority
- CN
- China
- Prior art keywords
- column
- dynamic
- hbase
- value
- reflection
- 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.)
- Pending
Links
Images
Classifications
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- 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/2379—Updates performed during online database operations; commit processing
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种基于反射实现HBase动态列的方法,包括如下步骤:S1、动态列数据写入/删除流程;对请求体做增强,通过反射拿到对应的信息,组装上的rowKey得到请求对象,为对应信息中列簇下的每个列赋值,并在赋值时判断动态值是否为空,不为空时,组装形成动态列;S2、动态列数据查询流程;查询指定列和指定所有列,并对每个列值按照末位标签分组组装返回值实体对象,返回给客户端;其技术要点为,本发明支持动态扩容,不需要改造代码逻辑,将具有业务含义的动态值,拼接到静态列后面,形成动态列,从而可以对某种业务类型的数据进行单独处理,以解决代码逻辑需要加以改造的技术问题;运维成本低,不需要专门的运维人员去维护的同时兼容旧API。
Description
技术领域
本发明属于HBase动态列技术领域,具体是一种基于反射实现HBase动态列的方法。
背景技术
目前,HBase是:参考Google BigTable模型的开源实现;Java开发的;非关系型的(NoSQL);KV键值的(从物理存储上看也是列(簇)式存储的);持久化的;构建于Hadoop分布式文件系统(HDFS)之上的(也可构建在符合接口的其他文件系统之上);默认情况是强一致性的(CP);高可靠的(HBase是通过底层HDFS的副本机制实现数据的冗余存储及高可靠性);高性能的(HBase具有近似最优的写性能(能使I/O利用率达到饱和),以及较出色的读性能);开源分布式数据库;HBase支持存储百万列,应用中常常会使用到动态列,动态列是相对于静态列而言的,静态列是查询和存储数据时,写死到代码中的列名,动态列则是根据业务场景,动态变化的列名。
现有的,包裹标签打标服务会需要运用到HBase动态列技术;一个运单号会关联一个或多个标签,如目前的大学件、同城件、问题件、时效件等。Hbase支撑百万列,存储和查询性能较高;但后期也会增删其他标签,需要修改代码以适应列的变化,做二次开发,无法直接使用,针对该问题现有的解决方案为:对Hbase原生客户端进行改造。在hbase客户端写入数据之前,利用反射解析请求实体,拿到hbase实体对象元素,可得到tableName、family、qualifiers等信息,上述的java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制;用Qualifier与列的动态值进行组合,形成新的列值,组装成一个新的客户端请求。
但本申请发明人在实现本申请实施例中的技术方案的过程中,发现上述技术至少存在如下技术问题:
1、原生客户端不支持动态扩容。
2、动态修改hbase表,需要对代码逻辑加以改造;
3、现有技术无法适应业务的快速迭代,HBase支持存储百万列,但应用中使用动态列会产生大量的冗余代码。
发明内容
解决的技术问题:
针对现有技术的不足,本发明提供了一种基于反射实现HBase动态列的方法,解决现有背景技术中提到的问题,本发明对原生客户端API的改造,使其支持动态列,不需要运维支持,方便维护;通过使用本发明的方法,可对现有软件系统功能的易用性、扩展性以及适配性进行有效提升。
技术方案:
为实现以上目的,本发明通过以下技术方案予以实现:
一种基于反射实现HBase动态列的方法,包括如下步骤:
S1、动态列数据写入/删除流程;
对请求体做增强,通过反射拿到对应的信息,组装上的rowKey得到请求对象,为对应信息中列簇下的每个列赋值,并在赋值时判断动态值是否为空,不为空时,组装形成动态列;
上述的rowKey表示一个业务编码,如:快递运单号,一个业务编码下可能有多个业务场景,如:大学件、到拆件、时效件等,每个业务场景会对应有一个自己的动态值和几个自己的动态列,用于存储自己的数据。
S2、动态列数据查询流程;
查询指定列和指定所有列,并对每个列值按照末位标签分组组装返回值实体对象,返回给客户端。
针对HBase支持存储百万列,但应用中使用动态列会产生大量的冗余代码这一具体技术问题,本申请以业务场景编码作为动态值,通过列名+动态值的方式,少量代码即可实现,且在业务场景扩展时无需改代码。
针对动态修改hbase表,需要对代码逻辑加以改造这一技术问题,本申请将具有业务含义的动态值,拼接到静态列后面,形成动态列,从而可以对某种业务类型的数据进行单独处理
优选的,在所述S1中,对应信息包括hbase表名和列。
优选的,在所述S1中,写入时,Hbase模板对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋值,并在赋值时判断动态值是否为空,
若不为空,则组装形成动态列,写入hbase;
若为空,则将数据存储到静态列中。
优选的,在所述S1中,删除时,Hbase模板对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋值,并在赋值时判断动态值是否为空,
若不为空,则组装形成动态列,删除hbase;
若为空,则将数据存储到静态列中。
优选的,在所述S2中,查询指定列对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋,并在赋值时判断动态值是否为空,若不为空时,组装形成动态列;
根据表名、列簇、列,rowKey查询hbase所有字段信息,查询hbase,组装返回值实体对象,返回给客户端。
优选的,在所述S2中,查询指定所有列,对请求体做增强,通过反射拿到对应的hbase表名和列簇的信息;组装上rowKey得到请求对象;
根据表名、列簇,rowKey查询hbase所有字段信息,对每个列值按照末位标签分组组装返回值实体对象,返回给客户端。
有益效果:
一是,本发明支持动态扩容,不需要改造代码逻辑,将具有业务含义的动态值,拼接到静态列后面,形成动态列,从而可以对某种业务类型的数据进行单独处理,以解决代码逻辑需要加以改造的技术问题;
二是,本发明运维成本低,不需要专门的运维人员去维护;
三是,本发明兼容老API,对原生客户端API的改造,使其支持动态列,与现有方案不同的是:
1、软件功能扩展;
2、现有方案中描述的是静态列,当hbase需要用一个rowkey存储多个不同业务场景的数据、且业务场景后续还会增加时,基于现有方案,则需要修改代码,本申请无需修改代码,即可生成存储新的业务场景数据的动态列。
附图说明
图1是本发明的整体流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。此外,下文为了描述方便,所引用的“上”、“下”、“左”、“右”等于附图本身的上、下、左、右等方向一致,下文中的“第一”、“第二”等为描述上加以区分,并没有其他特殊含义。
实施例1:
如图1所示,一种基于反射实现HBase动态列的方法,包括如下步骤:
S1、动态列数据写入/删除流程;
对请求体做增强,通过反射拿到对应的信息,组装上的rowKey得到请求对象,为对应信息中列簇下的每个列赋值,并在赋值时判断动态值是否为空,不为空时,组装形成动态列;上述的rowKey表示一个业务编码,如:快递运单号,一个业务编码下可能有多个业务场景,如:大学件、到拆件、时效件等,每个业务场景会对应有一个自己的动态值和几个自己的动态列,用于存储自己的数据,对应信息中包括列簇、hbase表名和列。
写入时,
Hbase模板对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋值,并在赋值时判断动态值是否为空,
若不为空,则组装形成动态列,写入hbase;
若为空,则将数据存储到静态列中。
删除时,
Hbase模板对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋值,并在赋值时判断动态值是否为空,
若不为空,则组装形成动态列,删除hbase;
若为空,则将数据存储到静态列中。
S2、动态列数据查询流程;
查询指定列和指定所有列,并对每个列值按照末位标签分组组装返回值实体对象,返回给客户端。
针对HBase支持存储百万列,但应用中使用动态列会产生大量的冗余代码这一具体技术问题,本申请以业务场景编码作为动态值,通过列名+动态值的方式,少量代码即可实现,且在业务场景扩展时无需改代码。
查询指定列,
对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋,并在赋值时判断动态值是否为空,若不为空时,组装形成动态列;
根据表名、列簇、列,rowKey查询hbase所有字段信息,查询hbase,组装返回值实体对象,返回给客户端。
查询指定所有列,
对请求体做增强,通过反射拿到对应的hbase表名和列簇的信息;组装上rowKey得到请求对象;
根据表名、列簇,rowKey查询hbase所有字段信息,对每个列值按照末位标签分组组装返回值实体对象,返回给客户端。
本发明支持动态扩容,不需要改造代码逻辑,将具有业务含义的动态值,拼接到静态列后面,形成动态列,从而可以对某种业务类型的数据进行单独处理;本发明运维成本低,不需要专门的运维人员去维护;
本发明兼容老API,对原生客户端API的改造,使其支持动态列,与现有方案不同的是:
1、软件功能扩展;
2、现有方案中描述的是静态列,当hbase需要用一个rowkey存储多个不同业务场景的数据、且业务场景后续还会增加时,基于现有方案,则需要修改代码,本申请无需修改代码,即可生成存储新的业务场景数据的动态列。
最后应说明的是:显然,上述实施例仅仅是为清楚地说明本发明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明的保护范围之中。
Claims (6)
1.一种基于反射实现HBase动态列的方法,其特征在于,包括如下步骤:
S1、动态列数据写入/删除流程;
对请求体做增强,通过反射拿到对应的信息,组装上的rowKey得到请求对象,为对应信息中列簇下的每个列赋值,并在赋值时判断动态值是否为空,不为空时,组装形成动态列;
S2、动态列数据查询流程;
查询指定列和指定所有列,并对每个列值按照末位标签分组组装返回值实体对象,返回给客户端。
2.如权利要求1所述的一种基于反射实现HBase动态列的方法,其特征在于:在所述S1中,对应信息包括hbase表名和列。
3.如权利要求2所述的一种基于反射实现HBase动态列的方法,其特征在于:在所述S1中,写入时,Hbase模板对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋值,并在赋值时判断动态值是否为空,
若不为空,则组装形成动态列,写入hbase;
若为空,则将数据存储到静态列中。
4.如权利要求2所述的一种基于反射实现HBase动态列的方法,其特征在于:在所述S1中,删除时,Hbase模板对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋值,并在赋值时判断动态值是否为空,
若不为空,则组装形成动态列,删除hbase;
若为空,则将数据存储到静态列中。
5.如权利要求2所述的一种基于反射实现HBase动态列的方法,其特征在于:在所述S2中,查询指定列对请求体做增强,通过反射拿到对应的hbase表名,列簇以及列的信息,组装上rowKey得到请求对象,为列簇下的每个列赋,并在赋值时判断动态值是否为空,若不为空时,组装形成动态列;
根据表名、列簇、列,rowKey查询hbase所有字段信息,查询hbase,组装返回值实体对象,返回给客户端。
6.如权利要求2所述的一种基于反射实现HBase动态列的方法,其特征在于:在所述S2中,查询指定所有列,对请求体做增强,通过反射拿到对应的hbase表名和列簇的信息;组装上rowKey得到请求对象;
根据表名、列簇,rowKey查询hbase所有字段信息,对每个列值按照末位标签分组组装返回值实体对象,返回给客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210943357.8A CN115344577A (zh) | 2022-08-08 | 2022-08-08 | 一种基于反射实现HBase动态列的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210943357.8A CN115344577A (zh) | 2022-08-08 | 2022-08-08 | 一种基于反射实现HBase动态列的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115344577A true CN115344577A (zh) | 2022-11-15 |
Family
ID=83949444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210943357.8A Pending CN115344577A (zh) | 2022-08-08 | 2022-08-08 | 一种基于反射实现HBase动态列的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344577A (zh) |
-
2022
- 2022-08-08 CN CN202210943357.8A patent/CN115344577A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109254733B (zh) | 用于存储数据的方法、装置和系统 | |
US5931935A (en) | File system primitive allowing reprocessing of I/O requests by multiple drivers in a layered driver I/O system | |
CN107943950B (zh) | 一种区块链中数据智能合约生成的方法及系统 | |
US6915340B2 (en) | System and method for deriving future network configuration data from the current and previous network configuration data | |
CN109840429A (zh) | 智能合约部署、调用方法和装置 | |
US20080010325A1 (en) | Data migration apparatus, method, and program | |
US8321487B1 (en) | Recovery of directory information | |
CN107016016B (zh) | 一种数据处理的方法及装置 | |
US6941309B2 (en) | Object integrated management system | |
CN104881466A (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
CN113326264A (zh) | 数据处理方法、服务器及存储介质 | |
CN113448938A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
JP2002501258A (ja) | ファイル・システムにおけるネーティブ・データ署名 | |
CN1326062C (zh) | 计算机系统和方法 | |
CN110134681A (zh) | 数据存储与查询方法、装置、计算机设备及存储介质 | |
CN108304144B (zh) | 数据写入、读取方法与系统、数据读写系统 | |
CN112835638A (zh) | 一种基于嵌入式应用程序的配置信息管理方法及装置 | |
CN117608856A (zh) | NVMe加速卡内存扩展方法、系统、终端及存储介质 | |
CN111708656A (zh) | 基于懒加载机制的容器镜像拉取方法及系统 | |
CN115344577A (zh) | 一种基于反射实现HBase动态列的方法 | |
CN113835625B (zh) | 一种基于子路径的数据存储方法、装置、设备及存储介质 | |
CN110221778A (zh) | 酒店数据的处理方法、系统、存储介质以及电子设备 | |
CN115587141A (zh) | 一种数据库同步方法和装置 | |
EP1008045B1 (en) | File system primitive allowing reprocessing of i/o requests by multiple drivers in a layered driver i/o system | |
CN110825715B (zh) | 基于Ceph对象存储的多对象数据秒合的实现方法 |
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 |