CN116150436A - 一种基于节点树的数据展示方法与系统 - Google Patents
一种基于节点树的数据展示方法与系统 Download PDFInfo
- Publication number
- CN116150436A CN116150436A CN202310399257.8A CN202310399257A CN116150436A CN 116150436 A CN116150436 A CN 116150436A CN 202310399257 A CN202310399257 A CN 202310399257A CN 116150436 A CN116150436 A CN 116150436A
- Authority
- CN
- China
- Prior art keywords
- node
- tree
- user
- subtree
- 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
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query 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/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9038—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/904—Browsing; Visualisation therefor
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据查询领域,具体涉及一种基于节点树的数据展示方法与系统。该方法中,获取基于用户操作生成的节点树;所述节点树包括至少一个包含统计数据的树节点;所述树节点包括所述用户设置的至少一个统计维度;根据各所述树节点包括的至少一个所述统计维度,生成各所述树节点分别对应的查询语句,以在数据库中查询得到各所述树节点分别对应的所述统计数据;根据各所述树节点之间的父子关系,生成各所述树节点分别对应的展示信息;所述展示信息包括所述树节点对应的所述统计数据,以及所述树节点的子节点对应的展示信息。由此输出用户感兴趣的统计数据,满足用户需求。
Description
技术领域
本申请涉及数据查询领域,具体涉及一种基于节点树的数据展示方法与系统。
背景技术
随着web技术的发展,可以在web网络上管理预设对象。这些预设对象有很多维度的属性信息,这些属性信息可以关联存储在数据库中,响应于用户的查询操作,可以层级方式向用户展示这些属性信息。
以预设对象为资产为例。资产具有IP信息、漏洞信息等。用户可以查询IP为192.168.1.1的资产,其中第一层级可以展示该资产的IP信息,下一层级中可以展示资产的漏洞信息。
如何构建层级方式的展示信息是需要解决的问题。
发明内容
有鉴于此,本申请公开一种基于节点树的数据展示方法。该方法中,获取基于用户操作生成的节点树;所述节点树包括至少一个包含统计数据的树节点;所述树节点包括所述用户设置的至少一个统计维度;根据各所述树节点包括的至少一个所述统计维度,生成各所述树节点分别对应的查询语句,以在数据库中查询得到各所述树节点分别对应的所述统计数据;根据各所述树节点之间的父子关系,生成各所述树节点分别对应的展示信息;所述展示信息包括所述树节点对应的所述统计数据,以及所述树节点的子节点对应的展示信息。
在一些实施例中,所述方法还包括,基于用户操作生成节点树;所述基于用户操作生成节点树,包括:接收用户针对目标树节点发起的创建请求;所述创建请求包括所述目标树节点的父节点标识,以及所述用户设置的至少一个统计维度;响应于接收到所述创建请求,根据所述父节点标识指示的节点的排序值,生成所述目标树节点的目标排序值;将所述目标排序值,所述父节点标识和所述至少一个统计维度存储至所述数据库中预设的树表中,以完成所述目标树节点的创建。
在一些实施例中,所述节点树包括若干以所述树节点为根节点的子树;所述基于用户操作生成节点树,还包括:接收所述用户发起的针对待移动子树的移动操作;所述移动操作包括将所述待移动子树移动到目标子树的相对位置;在所述目标子树与所述待移动子树的父节点不一致的情形下,将所述待移动子树的父节点标识变更为所述目标子树的父节点标识,以及根据所述相对位置,确定所述待移动子树的第一排序值;在所述目标子树与所述待移动子树的父节点一致的情形下,根据所述相对位置,确定所述待移动子树的第二排序值。
在一些实施例中,根据所述相对位置,确定所述待移动子树的排序值,包括:在所述相对位置为之前的情形下,在与所述目标子树具有相同父节点标识的其它子树对应的排序值中,确定小于所述目标子树的排序值并且最大的第一最大排序值,根据所述第一最大排序值和所述目标子树的排序值,确定所述待移动子树的排序值,所述待移动子树的排序值包括所述第一排序值或所述第二排序值;在所述相对位置为插入的情形下,在所述目标子树包括的所有子树对应的排序值中,确定第二最大排序值,根据所述第二最大排序值,确定所述待移动子树的排序值;在所述相对位置为之后的情形下,在与所述目标子树具有相同父节点标识的其它子树对应的排序值中,确定大于所述目标子树的排序值并且最小的最小排序值,根据所述最小排序值和所述目标子树的排序值,确定所述待移动子树的排序值。
在一些实施例中,所述方法还包括,查询所述节点树的树形结构;所述查询所述节点树的树形结构,包括:响应于接收到所述用户发起的节点树查询请求,在所述用户的用户身份为预设身份的情形下,基于所述树表中存储的全部节点数据组建节点树,并返回所述用户;在所述用户的用户身份不是所述预设身份的情形下,基于所述树表中与所述用户相关的节点数据组建节点树,并返回所述用户。
在一些实施例中,基于所述树表中存储的节点数据组建节点树,包括:根据所述树表中待组建树的节点数据,生成节点数据集合;获取所述节点数据集合中父节点标识为空的第一节点,将所述第一节点作为所述节点树的树根节点,并从所述节点数据集合中删除所述第一节点;针对每一所述第一节点,在所述节点数据集合中,查询父节点为所述第一节点的第二节点,将所述第二节点存储在与所述第一节点对应的子树节点集合中,并从所述节点数据集合中删除所述第二节点;针对每一所述第二节点,在所述节点数据集合中,查询父节点为所述第二节点的第三节点,将所述第三节点存储在与所述第二节点对应的子树节点集合中,并从所述节点数据集合中删除所述第三节点;以此类推,直到所述节点数据集合为空。
在一些实施例中,所述统计数据为针对预设对象在所述统计维度的统计数据;所述统计维度包括以下至少一种:所述预设对象的至少一种属性;针对至少一种所述属性的至少一个统计条件;所述目标树节点的下一级子节点数量;所述目标树节点的至少一级子节点对应的统计数据之和。
在一些实施例中,所述数据库为基于SQL查询的数据库;所述查询子语句为SQL语句;所述根据各所述树节点包括的至少一个所述统计维度,生成各所述树节点分别对应的查询语句,包括:针对每一树节点,生成每一所述统计维度对应的查询子语句,以及对每一所述统计维度对应的查询子语句进行组合,得到所述树节点对应的查询语句;其中,所述生成每一所述统计维度对应的查询子语句,包括:在所述统计维度为所述预设对象的至少一种属性的情形下,查询预先维护的字典表,确定与每一所述属性对应的第一表名称和第一字段名称,将所述第一字段名称作为查询字段,将所述第一表名称作为查询表,生成第一SQL语句;所述字典表包括向所述用户展示的属性名称、与存储在所述数据库中的表名称和字段名称之间的对应关系;在所述统计维度为针对至少一种所述属性的至少一个统计条件的情形下,查询所述字典表,确定与每一所述属性对应的第二表名称和第二字段名称,将所述第二字段名称作为查询字段,将所述第二表名称作为查询表,将每一所述统计条件作为查询条件,生成第二SQL语句;所述第二SQL语句中包含去重指令;在所述统计维度为所述目标树节点的至少一级子节点对应的统计数据之和的情形下,针对所述至少一级子节点中的每一子节点,通过所述字典表生成与所述每一子节点对应的查询条件,根据所述每一子节点,生成第三SQL语句;所述第三SQL语句中包含去重指令。
在一些实施例中,所述方法还包括:将各所述树节点分别对应的展示信息缓存至预设的高速缓存数据库。
在一些实施例中,针对所述数据库中的数据的存储请求、针对所述节点树的操作请求,以及针对所述展示信息的缓存请求以不同主题形式被存储在消息发布平台;所述消息发布平台中预先配置了与每一所述主题分别对应的至少一个消费单元,通过所述消费单元监听对应所述主题下的请求消息,并执行与所述消费单元预设的操作。
前述实施例记载的方案中,可以根据用户自定义操作生成节点树,其中树节点可以包括用户感兴趣的至少一个预设统计条件,并且可以通过构建查询语句完成统计数据的查询。由此,所述节点树具备用户自定义的层级,所述树节点具备用户感兴趣的统计维度,从而可以输出用户感兴趣的统计数据,满足用户需求。
附图说明
下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍。
图1是本申请示出的一种基于节点树的数据展示方法的方法流程示意图。
图2为本申请示出的基于用户操作生成节点树的方法流程示意图。
图3为本申请示出的一种移动子树的方法流程示意图。
图4为本申请示出的一种树形结构查询方法流程示意图。
图5为本申请示出的一种基于节点数据组建节点树的方法流程示意图。
图6为本申请示出的一种针对统计维度生成查询子语句的方法流程示意图。
图7为本申请示出的一种基于节点树的数据展示系统的结构示意图。
图8为本申请示出的一种消息发布平台的工作流程图。
图9为本申请示出的数据存储单元对节点树的管理流程示意图。
图10为本申请示意的数据查询单元生成查询语句的流程示意图。
图11为本申请示意的数据查询单元构建展示信息的流程示意图。
具体实施方式
下面将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的设备和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在可以包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。还应当理解,本文中所使用的词语“如果”,取决于语境,可以被解释成为“在……时”或“当……时”或“响应于确定”。
在相关技术中,可以通过树形结构来构建展示信息的层级。比如,上一级展示的数据可以放在父节点,下一级需要展示的数据可以放在子节点,从而形成一种层级关系。但往往这种树形结构是系统内置好的,不能自定义修改,并且展示出的信息也不一定是用户感兴趣的,满足不了用户需求。
有鉴于此,本申请提出了一种基于节点树的数据展示方法。所述方法可以根据用户自定义操作生成节点树,其中树节点可以包括用户感兴趣的至少一个预设统计条件,并且可以通过构建查询语句完成统计数据的查询。由此,所述节点树具备用户自定义的层级,所述树节点具备用户感兴趣的统计维度,从而可以输出用户感兴趣的统计数据,满足用户需求。
此外,本申请根据树节点之间的父子关系,以递归方式构建树节点的展示信息,从而在用户检索数据阶段,针对用户可能输入的检索条件,可以找到与之匹配的树节点,然后可以通过该树节点的展示信息层层递归,从而以完整的子树结构(层级)向用户输出统计数据信息,满足用户多种检索需求,并且可以节省存储空间。
请参见图1,图1是本申请示出的一种基于节点树的数据展示方法的方法流程示意图。如图1所示,所述方法可以包括S102-S106。
S102,获取基于用户操作生成的节点树。
本申请可以通过页面辅助用户自定义多层级的节点树,相关实施例在后续。
所述节点树可以包括至少一个包含统计数据的树节点。所述树节点包括所述用户设置的至少一个统计维度。
所述统计数据为针对预设对象在所述统计维度的统计数据。这些统计数据往往是感兴趣的数据。所述预设对象可以根据业务需求进行设定。例如所述预设对象可以是资产,职工,药品,材料等等。本申请可以资产为例进行说明。
其中,在本申请中,还可以为用户提供设置统计条件的窗口,用户在创建这类树节点的时候,可以在提供的可选统计维度中选择至少一个统计维度并进行设置。后续查询过程中可以依据所述至少一个统计条件,得到树节点对应的统计数据。
S104,根据各所述树节点包括的至少一个所述统计维度,生成各所述树节点分别对应的查询语句,以在数据库中查询得到各所述树节点分别对应的所述统计数据。
本申请中可以为每一种统计维度预设生成查询语句的规则。本步骤中可以针对每一树节点,针对每一所述统计维度,利用对应的生成规则,生成查询子语句,然后可以对每一所述统计维度对应的查询子语句进行组合,得到每一树节点对应的所述查询语句。
可以理解的是,不同的查询语句的生成规则都是类似的,一般包含查询范围,查询条件,数据统计等内容,不同的只是用词不同。比如,SQL会用select,from等限定查询范围,用where限定查询条件,用count进行统计。Cypher语句中,会用match限定查询范围,用where限定查询条件,用count进行统计。本申请中这些生成规则相当于是填空方法,在根据统计维度确定查询范围和查询条件等内容后,填入空白处,即可得到查询子语句,然后通过诸如union、and等连接词可以对查询子语句进行组合,得到查询语句。
所述数据库用于存储与预设对象相关的原始数据。这些数据库中可以设置关联表,通过关联表关联存储预设对象在各种维度的属性信息。本步骤针对每一树节点,通过对应的查询语句可以在所述数据库查询相关数据以完成数据统计。
在一些方式中,可以采用双数据库的结构来存储这些原始数据。其中一个数据库可以是Mysql数据库,另一个数据库可以是ClickHouse数据库,利用查询语句进行数据查询的操作可以依靠ClickHouse数据库。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
ClickHouse (Click Stream Data WareHouse,点击流数据仓库)是俄罗斯的Yandex 于 2016 年开源的用于在线分析处理查询(OLAP :Online AnalyticalProcessing)MPP架构的列式存储数据库(DBMS:Database Management System),能够使用SQL 查询实时生成分析数据报告。
所述Mysql数据库可以利用其强大的关联存储能力存储预设对象的原始数据。所述ClickHouse数据库中也可以存储所述原始数据,但依托于ClickHouse对数据压缩的功能,与强大的聚合能力,极大的提高了数据统计的响应速度。从而达到以空间换取时间的思想,通过在ClickHouse中存入冗余的数据,来提升数据展示的速度。
S106,根据各所述树节点之间的父子关系,生成各所述树节点分别对应的展示信息。
所述展示信息包括所述树节点对应的所述统计数据,以及所述树节点的子节点对应的展示信息。
本申请可以设计一种数据存储格式,用来完成递归存储。以下为数据存储格式的一种示例:
public class TypeOption {
private Long value;
private String label;
private String condition;
List<TypeOption>children;}。
private String label为所述树节点的节点名称;private Long value为所述树节点对应的统计数据;private String condition为所述树节点包括的至少一个统计维度;List<TypeOption>children为所述树节点的子节点的展示信息。通过这样的数据存储格式可以完成递归存储。
用户可以输入针对预设对象的检索条件,通过将这些检索条件与private Stringcondition字段比较,找到统计条件与所述检索条件匹配的树节点,然后可以通过中的统计List<TypeOption>children,层次递归,以层级方式完整的展示出用户感兴趣的统计数据。在一些方式中,可以逐层进行展示,即先展示首层统计树节点对应的展示信息,然后响应于用户的点击操作,响应进行下一层的展示。
通过S102-S106记载的方案,可以根据用户自定义操作生成节点树,其中树节点可以包括用户感兴趣的至少一个预设统计条件,并且可以通过构建查询语句完成统计数据的查询。由此,所述节点树具备用户自定义的层级,所述树节点具备用户感兴趣的统计维度,从而可以输出用户感兴趣的统计数据,满足用户需求。
此外,本申请根据树节点之间的父子关系,以递归方式构建树节点的展示信息,从而在用户检索数据阶段,针对用户可能输入的检索条件,可以找到与之匹配的树节点,然后可以通过该树节点的展示信息层层递归,从而以完整的子树结构(层级)向用户输出统计数据信息,满足用户多种检索需求,并且可以节省存储空间。
在一些实施例中,可以辅助用户自定义节点树。
请参见表1,表1为本申请示意的一种用于存储树节点数据的树表结构。
表1:
如表1所示,示意的是由用户A创建的树节点2,该树节点的父节点为树节点1,该节点的节点排序为2,正常启用状态,统计维度IP=192.168.1.1;备注为用户维度。通过树表1可以记录树节点的信息。
请参见图2,图2为本申请示出的基于用户操作生成节点树的方法流程示意图。图2示意的步骤为对节点树的某一树节点的创建过程的示意。如图2所示,所述方法可以包括S202-S206。
S202,接收用户针对目标树节点发起的创建请求。
本申请可以向用户提供节点树的自定义页面。用户可以在该页面选择创建一个树节点(需要被创建的树节点被称为目标树节点)。然后可以展示针对该目标树节点的配置页面。该配置页面可以配置目标树节点的名称,父节点标识统计维度等信息。用户可以在该页面完成相应输入。其中,可以提供至少一种统计维度,用户可以按需选择进行设置。
在一些实施例中,所述统计数据为针对预设对象在所述统计维度的统计数据;所述统计维度包括以下至少一种:所述预设对象的至少一种属性;针对至少一种所述属性的至少一个统计条件;所述目标树节点的下一级子节点数量;所述目标树节点的至少一级子节点对应的统计数据之和。这四种统计维度涵盖了对预设对象的各维度的统计,用户可以按需选择并设置,可以满足用户多种统计需求。
以预设对象为资产为例。所述至少一种属性可以包括IP,名称,漏洞名称,漏洞类型,弱口令名称等属性。用户可以随意选择和组合。
用户还可以选择其中的至少一种属性设置统计条件,这些统计条件之间可以包括and和or的关系。本申请支持模糊匹配。比如,用户可以设置IP=192.168.1 and 漏洞类型=高危作为统计条件。
用户可以设置将统计某一目标树节点的子树数量作为统计维度。例如可以统计漏洞类型有几种,假设用户将统计漏洞类型对应的漏洞数量的树节点作为子节点,即相当于设置统计下一级节点数量。比如子节点包括分别统计高危漏洞数量,中危漏洞数量和低危漏洞数量三个节点,则可以统计出漏洞类型为3种。
用户还可以统计漏洞数量,假设用户将统计漏洞类型对应的漏洞数量对应的节点作为IP节点的子节点,则相当于设置下一级子节点对应的统计数据之和。比如,统计高危漏洞数量的节点的统计数据为10,统计中危漏洞数量的节点的统计数据为30,统计低危漏洞数量的节点的统计数据为15,则可以统计出漏洞数量为55。
用户完成针对树节点的配置之后,可以通过诸如点击“创建”选项,发起所述创建请求。所述创建请求包括所述目标树节点的父节点标识,以及所述用户设置的至少一个统计维度。
S204,响应于接收到所述创建请求,根据所述父节点标识指示的节点的排序值,生成所述目标树节点的目标排序值。
本步骤中可以根据用户输入的父节点标识找到目标树节点的父节点。如果所述父节点没有其他子节点,可以在所述父节点的排序值的基础上,增加预设值以生成所述目标排序值。例如增加1000。如果所述父节点有其它子节点,可以根据所述父节点的排序值和所述其它子节点中的最小排序值的均值,得到所述目标排序值,由此可以保证目标排序值不会发生重复。
S206,将所述目标排序值,所述父节点标识和所述至少一个统计维度存储至所述数据库中预设的树表中,以完成所述目标树节点的创建。
本步骤中可以将所述目标排序值,所述父节点标识和所述至少一个统计维度存储在类似表1的树表中,完成目标树节点的创建。
通过S202-S206可以辅助用户完成树节点的创建,并且可以为树节点创建感兴趣的统计维度,当用户针对全部的节点树的树节点完成创建之后,即完成节点树的创建。
在一些场景中,某些父节点(称为目标父节点)可能有非常多的子节点,这些子节点的属性维度相同可能只是具体属性字段不同。例如,假设数据库中班级属性维度下有100个班级字段(即,一班,二班,三班等等)。目标父节点为班级节点,统计维度为班级数量,那么该目标父节点下需要挂载100个子节点,这些子节点的统计维度为班级等于一班,班级等于二班,班级等于三班等等。用户如果需要创建这些节点需要非常大的工作量,非常不友好。
为了解决这些问题,在一些实施例中,可以辅助用户创建这类子节点。
具体地,接收所述用户发起的针对目标父节点的子节点的自动创建请求;所述自动创建请求包括与所述目标父节点的子节点对应的属性维度。
响应于所述自动创建请求,查询所述树表中与所述属性维度对应的属性字段。
响应与所述用户针对所述属性字段的保存操作,针对每一所述属性字段生成子节点。其中,每一所述属性字段对应的子节点的父节点标识为所述目标父节点的标识,统计维度为所述属性维度等于所述属性字段。举例来说,假设数据库中班级属性维度下有100个班级字段(即,一班,二班,三班等等)。目标父节点为班级节点,统计维度为班级数量。用户可以选择该目标父节点,并选择为该目标父节点自动创建子节点的操作,响应于用户的该操作,可以从数据库中查询班级属性维度下的每一班级字段,即一班,二班,三班,等等一直到一百班。然后可以将查询结果返回用户,用户确认点击保存选项之后,可以针对每一个班级字段生成对应的子节点,该子节点的父节点标识为所述目标父节点, 统计维度为班级等于一班,班级等于二班等等。由此可以为目标节点自动生成100个子节点,节省了用户的工作量,提升用户体验。
在一些实施例中,可以辅助用户按需对已经完成创建的节点树进行修改。所述修改可以包括针对树节点的修改。比如,更新树节点的名称,父节点标识,统计维度等等。
所述节点树包括若干以所述树节点为根节点的子树,所述修改还可以包括针对树节点或以所述子树位置的移动。
请参见图3,图3为本申请示出的一种移动子树的方法流程示意图。如图3所示,所述方法可以包括S302-S306。
S302,接收所述用户发起的针对待移动子树的移动操作。所述移动操作包括将所述待移动子树移动到目标子树的相对位置。
本申请可以通过诸如拖拽,更新配置信息等方式为用户提供移动子树的功能。用户可以通过提供的方式完成子树的移动。不论是拖拽还是更新配置信息的方式,完成移动之后,可以获取到以目标子树为参照,所述待移动子树的相对位置。所述相对位置可以包括之前,之后,插入。
S304,在所述目标子树与所述待移动子树的父节点不一致的情形下,将所述待移动子树的父节点标识变更为所述目标子树的父节点标识,以及根据所述相对位置,确定所述待移动子树的第一排序值。
本步骤中,可以比对所述目标子树与所述待移动子树的父节点,如果所述目标子树与所述待移动子树的父节点不一致,说明此次移动是跨树的移动,需要将待移动子树的父节点标识变更为所述目标子树的父节点标识。需要说明的是,子树的父节点标识即为子树的根节点的父节点标识。
然后可以确定所述第一排序值。需要说明的是子树的排序值可以理解为子树的根节点的排序值。基于不同的相对位置会有不同的排序值更新方法,该方法在后续实施例中会有说明。
S306,在所述目标子树与所述待移动子树的父节点一致的情形下,根据所述相对位置,确定所述待移动子树的第二排序值,以及基于所述第二排序值,更新所述移动子树中的树节点的排序值。
如果所述目标子树与所述待移动子树的父节点一致,说明此次移动没有跨树,无需更新父节点标识,只需确定第二排序值即可。
以表1示意的树节点的存储结构为例。如果是在不同的两颗树下移动子树,则更改Parent_node,同时调用order()(排序值生成方法)方法生成新的order_number。如果是在同一个树下进行子树移动则调用order()方法生成新的order_number。其中,关于order()方法的介绍在后续实施例。
需要说明的是针对树节点的移动可以参照针对子树的移动,在此不做重复说明。
通过S302-S306记载的方案,可以针对跨树和非跨树两种场景在后台完成子树排序值的更新。子树排序的更新,相当于完成子树位置的变更,从而实现辅助用户进行子树移动。
在一些实施例中,不同的相对位置会有不同待移动子树的排序值更新方法。所述待移动子树的排序值包括所述第一排序值或所述第二排序值。
在所述相对位置为之前的情形下,在与所述目标子树具有相同父节点标识的其它子树对应的排序值中,确定小于所述目标子树的排序值并且最大的第一最大排序值,根据所述第一最大排序值和所述目标子树的排序值,确定所述待移动子树的排序值。
本情形下,是将待移动子树移动到目标子树之前,即需要将待移动子树的排序值修改到小于目标子树的排序值,当然还需保证排序值不会重复。
本步骤中,可以查找到小于所述目标子树的排序值并且最大的第一最大排序值,然后基于预设的规则,根据所述第一最大排序值和所述目标子树的排序值,确定所述待移动子树的排序值。比如可以根据所述第一最大排序值和所述目标子树的排序值的均值得到所述排序值,从而可以将待移动子树的排序值修改到小于目标子树的排序值,当然还需保证排序值不会重复。
以表1示意的树节点的存储结构为例。根据目标子树的Parent_node和order_number查询目标子树的根节点下所有子树的order_number中小于目标子树的order_number的最大值 tempMax,而后sourceNumber=(tempMax+目标子树order_number)/2 ,得到double类型的sourceNumber。sourceNumber即为待移动子树的排序值。
在所述相对位置为插入的情形下,在所述目标子树包括的所有子树对应的排序值中,确定第二最大排序值,根据所述第二最大排序值,确定所述待移动子树的排序值。
本情形下,是将待移动子树插入目标子树包含的所有子树之后,即需要将待移动子树的排序值修改到大于目标子树的根节点对应的所有子树的排序值。
本步骤中,可以在所述目标子树包括的所有子树对应的排序值中,确定第二最大排序值。然后在所述第二最大排序值的基础上增加预设值,得到所述待移动子树的排序值,从而可以将待移动子树的排序值修改到大于目标子树的根节点对应的所有子树的排序值。
以表1示意的树节点的存储结构为例。目标子树根节点下的所有子树的order_number的最大值tempMax,而后sourceNumber=tempMax+1000。sourceNumber即为待移动子树的排序值。
在所述相对位置为之后的情形下,在与所述目标子树具有相同父节点标识的其它子树对应的排序值中,确定大于所述目标子树的排序值并且最小的最小排序值,根据所述最小排序值和所述目标子树的排序值,确定所述待移动子树的排序值。
本情形下,是将待移动子树移动到目标子树之后,即需要将待移动子树的排序值修改到大于目标子树的排序值,当然还需保证排序值不会重复。
本步骤中,可以查找到大于所述目标子树的排序值并且最小的最小排序值,然后基于预设的规则,根据所述最小排序值和所述目标子树的排序值,确定所述待移动子树的排序值。比如可以根据所述最小排序值和所述目标子树的排序值的均值得到所述排序值,从而可以将待移动子树的排序值修改到大于目标子树的排序值,当然还需保证排序值不会重复。
以表1示意的树节点的存储结构为例。根据目标子树的Parent_node和order_number查询目标子树的根节点下所有子树的order_number中大于目标子树的order_number的最小值 tempMax,而后sourceNumber=(tempMax+目标子树order_number)/2 ,得到double类型的sourceNumber。sourceNumber即为待移动子树的排序值。
在一些实施例中,可以完成树形结构的查询,以向用户展示自定义的树形结构。请参见图4,图4为本申请示出的一种树形结构查询方法流程示意图。如图4所示,该方法可以包括S402-S404。
S402,响应于接收到所述用户发起的节点树查询请求,在所述用户的用户身份为预设身份的情形下,基于所述树表中存储的全部节点数据组建节点树,并返回所述用户。
所述预设身份可以根据业务需求进行设定。例如所述预设身份可以是管理员,经理人,监管员等等。具备预设身份的用户可以浏览全部的节点树。
本步骤中,如果检测到用户具备预设身份,则可以基于树表中全部的数据节点组建节点树。关于如何组建树的方法可以参照后续实施例。
S404,在所述用户的用户身份不是所述预设身份的情形下,基于所述树表中与所述用户相关的节点数据组建节点树,并返回所述用户。
树表中可以维护创建树节点的用户标识。如表1所示,通过Create_by可以维护用户ID。本步骤中,如果检测到用户非预设身份,可以根据Create_by为该用户的节点数据组建节点树。
通过S402-S404,可以根据用户身份组建树并进行展示,提升了数据安全性。
在一些实施例中,可以通过递归方式组建树,这样做的优势在于,除了可以通过递归方式维护节点树的树形结构,还可以将节点树中除根节点以外的其它树节点作为根节点,维护其对应的子树结构。
请参见图5,图5为本申请示出的一种基于节点数据组建节点树的方法流程示意图。图5示意的步骤为对S402和S404中组建树的步骤的说明。如图5所示,所示方法可以包括S502-S510。
S502,根据所述树表中待组建树的节点数据,生成节点数据集合。
在用户为预设身份的情形下,待组建树的节点数据为树表中的全部节点数据;在用户不是预设身份的情形下,待组建树的节点数据为树表中与所述用户相关的节点数据。
本步骤可以通过查新树表,创建节点数据集合list。
S504,获取所述节点数据集合中父节点标识为空的第一节点,将所述第一节点作为所述节点树的树根节点,并从所述节点数据集合中删除所述第一节点。
如果某一树节点的父节点标识为空,说明该节点是一棵树的根节点。本申请将父节点标识为空的节点称为第一节点。
本步骤中可以创建Map<Long,List<Tree>>的结构,Long对应的位置存储树节点(可以是节点树的根节点,或者是节点树包含的子树的根节点),List<Tree>存储树节点的下一层子节点。通过Map结构可以存储树节点和其下一层子节点信息,然后通过各树节点对应的Map可以递归得到节点树或者子树的树形结构。
例如,可以遍历所述节点数据集合,查找父节点标识为空的第一节点,作为各棵树的根节点,所述第一节点的标识以Long形式存储至与第一节点对应的第一Map中。然后可以从list删除第一节点。
S506,针对每一所述第一节点,在所述节点数据集合中,查询父节点为所述第一节点的第二节点,将所述第二节点存储在与所述第一节点对应的子树节点集合中,并从所述节点数据集合中删除所述第二节点。
本步骤可以针对每一第一节点,通过遍历集合list中各节点的父节点标识,可以得到父节点为所述第一节点的第二节点。然后可以将所述第二节点的标识存储至所述第一Map的List<Tree>(子树节点集合),并且可以将所述第二节点的标识存储至与第二节点对应的第二Map中。从所述节点数据集合list中删除所述第二节点。
S508,针对每一所述第二节点,在所述节点数据集合中,查询父节点为所述第二节点的第三节点,将所述第三节点存储在与所述第二节点对应的子树节点集合中,并从所述节点数据集合中删除所述第三节点。
本步骤可以针对每一第二节点,创建与其对应的第二Map。通过遍历集合list中各节点的父节点标识,可以得到父节点为所述第二节点的第三节点。然后可以将所述第三节点的标识存储至所述第二Map的List<Tree>,并且可以将所述第三节点的标识存储至与第三节点对应的第三Map中。从所述节点数据集合list中删除所述第三节点。
S510,以此类推,直到所述节点数据集合为空。
本步骤可以参照S508示意的方式,不断地递归下去,直到所述节点数据集合没有任何节点数据。
通过S502-S510记载的方案,可以通过递归方式组建树,这样做的优势在于,除了可以通过递归方式维护节点树的树形结构,还可以将节点树中除根节点以外的其它树节点作为根节点,维护其对应的子树结构。
例如,以第一节点为根节点通过层层递归查询其子节点的Map可以得到节点树的树形结构。以第二节点为根节点通过层层递归查询其子节点的Map,可以得到以第二节点为根节点的子树的树形结构。
在一些实施例中,存储源数据的数据库为基于SQL查询的数据库。例如,为了提升统计效率,可以采用ClickHouse。
在S104中,可以针对每一树节点,生成每一所述统计维度对应的查询子语句,以及对每一所述统计维度对应的查询子语句进行组合,得到所述树节点对应的查询语句。所述查询子语句为SQL语句。
请参见图6,图6为本申请示出的一种针对统计维度生成查询子语句的方法流程示意图。所述统计维度包括以下至少一种:所述预设对象的至少一种属性;针对至少一种所述属性的至少一个统计条件;所述目标树节点的下一级子节点数量;所述目标树节点的至少一级子节点对应的统计数据之和。这四种统计维度涵盖了对预设对象的各维度的统计,用户可以按需选择并设置,可以满足用户多种统计需求。如图6所示,该方法可以包括S602-S606。
S602,在所述统计维度为所述预设对象的至少一种属性的情形下,查询预先维护的字典表,确定与每一所述属性对应的第一表名称和第一字段名称,将所述第一字段名称作为查询字段,将所述第一表名称作为查询表,生成第一SQL语句。
所述字典表包括向所述用户展示的属性名称、与存储在所述数据库中的表名称和字段名称之间的对应关系。例如,页面展示的属性名称为漏洞类型,其对应在数据库中的表名称为hole,字段名称为holetype。通过字典表可以向用户展示容易理解的属性名称,使得用户无需知道底层存的字段名和表名,方便用户设置统计维度,创建节点,自定义节点树。
本步骤可以针对每一属性,查询字典表得到对应的第一表名称和第一字段名称,然后根据与该统计维度对应的SQL语句生成规则,生成第一SQL语句。所述SQL语句生成规则类似填空,可以预先生成SQL语句必须的诸如select,count,from字符串,然后将确定的第一表名称和第一字段名称填入相应位置即可。
以属性为对象ID为例。假设查询字典表之后可以得到第一表名称为A,第一字段名称为id,待查询的对象ID用pid来指代,生成的第一SQL语句s1为,select pid as id,count(1) as count from A。
S604,在所述统计维度为针对至少一种所述属性的至少一个统计条件的情形下,查询所述字典表,确定与每一所述属性对应的第二表名称和第二字段名称,将所述第二字段名称作为查询字段,将所述第二表名称作为查询表,将每一所述统计条件作为查询条件,生成第二SQL语句。
所述第二SQL语句中包含去重指令distinct。
本步骤可以先针对每一个统计条件,分别转换为字符串形式,得到对应的查询条件,然后利用与本统计维度对应的SQL生成规则生成第二SQL语句,值得一提的是SQL生成规则中包括去重distinct,由此可以避免重复统计。本步骤中的生成规则与S602的生成规则相比多了查询条件的组合。
以属性为对象ID为例。针对不同查询条件对应的查询字段在同一张表中,假设查询字典表之后可以得到第二表名称为A,第二字段名称为id,待查询的对象ID用pid来指代,查询条件包括条件1和条件2,生成的第二SQL语句s2为select pid as id,count(distinctid) as count from A where 条件1 and(or ) 条件2。
针对不同查询条件对应的查询字段在不同表中,假设查询条件包括条件1和条件2,针对条件1的第二表名称为A,第二字段名称为id,针对条件2的第二表名称为B,第二字段名称为id,待查询的对象ID用pid来指代,生成的第二SQL语句s2为select pid as id,count(distinct id) as count from A where 条件1 and exists(select id form Bwhere 条件2) and A.id=B.id。
S606,在所述统计维度为所述目标树节点的至少一级子节点对应的统计数据之和的情形下,针对所述至少一级子节点中的每一子节点,通过所述字典表生成与所述每一子节点对应的查询条件,根据所述每一子节点,生成第三SQL语句。
所述第三SQL语句中包含去重指令distinct。
本步骤中可以针对目标树节点的每一子节点,通过字符串转换方法得当对应的查询条件,然后可以利用与本统计维度对应的SQL生成规则,生成第三SQL语句,与S604示意的规则相比,本步骤中的规则增加了子节点的查询条件的组合。值得一提的是SQL生成规则中包括去重distinct,由此可以避免重复统计。
以属性为对象ID为例。假设针对每一子节点的统计条件,通过查询字典表进行字符串转换之后得到的查询条件为c1、c2、c3,,待查询的对象ID用pid来指代,生成的第三SQL语句s3为,select pid as id,count(distinct id) from A where c1 or c2 or c3。
针对统计维度为所述目标树节点的下一级子节点数量,查询所述目标树节点对应的Map,即可得到下一级子节点数量。
在一些情形中,用户可能设置了多种统计维度,那么可以通过union 连接不同统计维度的查询语句即可。例如,最终的查询语句可以是s1 union s2 union s3。
得到最终查询语句之后,即可将该语句输入数据库中进行查询,得到目标树节点对应的统计数据。例如可以map<id,count>的形式来存储统计数据。Id为目标树节点的ID,count为对应的统计数据。
在一些实施例中,在通过递归方式得到各树节点的展示信息,或者是得到各树节点的统计数据之后,可以将所述展示信息或各树节点与数据统计(map<id,count>形式)缓存在预设的高速缓存数据库,由此可以优先从所述高速缓存库中获取相关数据,提升数据获取效率。
在一些方式中,所述高速缓存数据库可以是redis数据库。Redis(RemoteDictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
在一些实施例中,可以通过消息发布平台数据转接。针对所述数据库中的数据的存储请求、针对所述节点树的操作请求,以及针对所述展示信息的缓存请求以不同主题形式被存储在消息发布平台;所述消息发布平台中预先配置了与每一所述主题分别对应的至少一个消费单元,通过所述消费单元监听对应所述主题下的请求消息,并执行与所述消费单元预设的操作。由此每一个主题topic建立多个消费单元Consumer,同时在这里针对topic 设置消费模式为独占,即一条数据只能由一个Consumer消费,避免数据的重复消费。
在一些方式中,所述消息发布平台可以是pulsar。Pulsar是云原生分布式消息流平台(即可作为消息中间件),最初源于Yahoo,支持Yahoo应用服务140万个主题,日处理超过1000亿条消息。
本申请还提出一种基于节点树的数据展示系统。请参见图7,图7为本申请示出的一种基于节点树的数据展示系统的结构示意图。如图7所示,所述系统700可以包括以消息发布平台730为中心,包括前端710,数据采集单元720,缓存单元740,数据存储单元750,数据查询单元760,第一数据库770和第二数据库780的结构。
所述消息发布平台730可以是pulsar,该平台可以作为消息中转中心,为各单元进行消息交互。
所述前端710可以与用户进行交互,为用户提供数据查询页面,节点树构建页面,查询结果展示页面等。该展示页面可以是层级菜单形式。
所述数据采集单元720,可以周期性采集与预设对象(例如,资产)相关的各类数据信息,并通过消息发布平台730和数据存储单元750存储至第一数据库和第二数据库。
所述数据存储单元750,既可以用于控制数据采集单元采集的原始数据的存储,也可以对节点树的相关信息进行管理和存储。
所述第一数据库770,可以是MySQL数据库,以关联表形式存储预设对象的相关信息。
所述第二数据库780,可以是Clickhouse数据库,该数据库中同样可以存储预设对象的相关信息。该数据库的特性在于与数据统计相关的查询语句执行效率高,本申请关于统计数据的查询语句可以发送至Clickhouse数据库执行。
所述数据查询单元760,用于查询树结构,查询节点统计数据和组织节点展示信息。
所述缓存单元740,用于缓存树结构,树节点的统计数据,展示信息等,进行数据查询时优先从缓存单元读取,在缓存单元没有的情形下才会从第一数据库和/或第二数据库中查询,由此提升数据查询效率。
本系统中的单元可以相互交互,完成前面基于节点树的数据展示方法的实施例,具体步骤可以参照前面实施例。
请参见图8,图8为本申请示出的一种消息发布平台的工作流程图。如图8所示,具备消息发布需求(例如,存储数据,查询数据,缓存数据等)的单元会在pulsar(消息发布平台)中发布相应topic(主题)的消息。平台中会建立与每一topic对应的至少一个Consumer(消费者)监听器,实现独占消费模式,避免数据重复消费浪费资源。
具体流程可以参照:建立consumer监听器监听topic;以多线程的形式,启动多个consumer;外部数据向topic投入数据;监听器监听到topic有新数据,从pulsar中拉取该topic下的数据,封装成对应的对象模型;将对象模型交给存储模块,等待存储模块存储结果;如果存储成功,向pulsar发送确认信号,确认此条消息已经被消费掉;如果存储失败,向pulsar法伤确认失败信号,topic会再次向consumer发送信号有消息进入,如果多次消费失败,该条数据则会作为异常数据流入私信队列。
通过该消息发布平台可以完成展示系统中各单元的交互。
请参加图9,图9为本申请示出的数据存储单元对节点树的管理流程示意图。如图9所示,管理流程包括S901-S907。
pular监听到针对节点树的操作消息之后,可以通知数据存储单元进行节点树管理。
S901,接收操作请求。
S902,判断子树的数量是否超过预设阈值;如果超过,显示操作失败;如果没有,继续S903。
所述预设阈值可以根据业务需求进行设定,例如100,50,900等。
S903,判断当前操作类型;如果操作是创建节点,则执行S904;如果操作是更新节点属性,则执行S905;如果操作是移动节点,则执行S906。
S904,执行创建节点的操作。
本步骤可以参照S202-S206记载的方案极其相关实施例,在此不做详述。
S905,更新节点属性信息。
S906,更新节点的位置。
本步骤可以参照S302-S306记载的实施例以及其相关实施例,在此不做详述。
S907,更新数据库中的节点数据。
本步骤可以更新树表数据。
请参见图10,图10为本申请示意的数据查询单元生成查询语句的流程示意图。如图10所示,该流程可以包括S1001-S1009。
S1001,接收数据查询请求。
S1002,判断用户是否为预设身份。如果是,S1003;如果否,S1004。
S1003,获取树表中全部节点数据,生成节点数据集合。
S1004,获取树表中与所述用户相关的节点数据,生成节点数据集合。
S1005,遍历节点数据集合中的节点数据。
S1006,判断是否遍历结束;如果没有,可以执行S1007,如果遍历结束可以执行S1008。
S1007,生成每一节点对应的查询语句。
本步骤可以参照前面S602-S606记载的方案极其相关实施例。
S1008,组合各节点对应的查询语句,得到最终查询语句。
S1009,输入数据库进行查询,得到节点对应的统计数据,并返回给需求单元。
请参见图11,图11为本申请示意的数据查询单元构建展示信息的流程示意图。如图11所示,该流程可以包括S1101-S1107。
S1101,获取树表中的节点数据,生成节点数据集合。
S1102,从节点数据集合从中筛选根节点,并获取根节点的统计数据,形成根节点的展示信息。在节点数据集合删除所述根节点。
所述根节点是指父节点标识为空的节点。
S1103,遍历所述根节点,得到其下一级子节点,获取下一级子节点的统计数据,并生成所述下一级子节点的展示信息,将所述展示信息添加指所述根节点的展示信息。
S1104,判断节点数据集合是否为空;如果不是,则执行S1005;如果是则执行S1006。
S1105,递归遍历下一层的子节点,并生成相应的展示信息,将展示信息插入父节点对应的展示信息中,并进入S1104。
S1106,生成各节点的展示信息。
S1107,返回前端进行展示。
本系统记载的方案中,第一,可以根据用户自定义操作生成节点树,其中树节点可以包括用户感兴趣的至少一个预设统计条件,并且可以通过构建查询语句完成统计数据的查询。由此,所述节点树具备用户自定义的层级,所述树节点具备用户感兴趣的统计维度,从而可以输出用户感兴趣的统计数据,满足用户需求。
第二,可以辅助用户完成树节点的创建,并且可以为树节点创建感兴趣的统计维度,当用户针对全部的节点树的树节点完成创建之后,即完成节点树的创建。
第三,可以为用户提供多统计维度,用户可以按需选择并设置,从而可以满足用户多种统计需求。
第四,可以采用缓存单元和高性能数据库,提升数据统计效率。
第五,可以在构建查询语句时引入去重逻辑,实现统计时的去重操作。
本领域技术人员应明白,本申请一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本申请一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(可以包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请中的“和/或”表示至少具有两者中的其中一个。本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
虽然本申请包含许多具体实施细节,但是这些不应被解释为限制任何公开的范围或所要求保护的范围,而是主要用于描述特定公开的具体实施例的特征。本申请内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,所述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
以上仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (10)
1.一种基于节点树的数据展示方法,其特征在于,所述方法包括:
获取基于用户操作生成的节点树;所述节点树包括至少一个包含统计数据的树节点;所述树节点包括所述用户设置的至少一个统计维度;
根据各所述树节点包括的至少一个所述统计维度,生成各所述树节点分别对应的查询语句,以在数据库中查询得到各所述树节点分别对应的所述统计数据;
根据各所述树节点之间的父子关系,生成各所述树节点分别对应的展示信息;所述展示信息包括所述树节点对应的所述统计数据,以及所述树节点的子节点对应的展示信息。
2.根据权利要求1所述的基于节点树的数据展示方法,其特征在于,所述方法还包括,基于用户操作生成节点树;
所述基于用户操作生成节点树,包括:
接收用户针对目标树节点发起的创建请求;所述创建请求包括所述目标树节点的父节点标识,以及所述用户设置的至少一个统计维度;
响应于接收到所述创建请求,根据所述父节点标识指示的节点的排序值,生成所述目标树节点的目标排序值;
将所述目标排序值,所述父节点标识和所述至少一个统计维度存储至所述数据库中预设的树表中,以完成所述目标树节点的创建。
3.根据权利要求2所述的基于节点树的数据展示方法,其特征在于,所述节点树包括若干以所述树节点为根节点的子树;
所述基于用户操作生成节点树,还包括:
接收所述用户发起的针对待移动子树的移动操作;所述移动操作包括将所述待移动子树移动到目标子树的相对位置;
在所述目标子树与所述待移动子树的父节点不一致的情形下,将所述待移动子树的父节点标识变更为所述目标子树的父节点标识,以及根据所述相对位置,确定所述待移动子树的第一排序值;
在所述目标子树与所述待移动子树的父节点一致的情形下,根据所述相对位置,确定所述待移动子树的第二排序值;
和/或,
所述基于用户操作生成节点树,还包括:
接收所述用户发起的针对目标父节点的子节点的自动创建请求;所述自动创建请求包括与所述目标父节点的子节点对应的属性维度;
响应于所述自动创建请求,查询所述树表中与所述属性维度对应的属性字段;
响应与所述用户针对所述属性字段的保存操作,针对每一所述属性字段生成子节点;每一所述属性字段对应的子节点的父节点标识为所述目标父节点的标识,统计维度为所述属性维度等于所述属性字段。
4.根据权利要求3所述的基于节点树的数据展示方法,其特征在于,根据所述相对位置,确定所述待移动子树的排序值,包括:
在所述相对位置为之前的情形下,在与所述目标子树具有相同父节点标识的其它子树对应的排序值中,确定小于所述目标子树的排序值并且最大的第一最大排序值,根据所述第一最大排序值和所述目标子树的排序值,确定所述待移动子树的排序值,所述待移动子树的排序值包括所述第一排序值或所述第二排序值;
在所述相对位置为插入的情形下,在所述目标子树包括的所有子树对应的排序值中,确定第二最大排序值,根据所述第二最大排序值,确定所述待移动子树的排序值;
在所述相对位置为之后的情形下,在与所述目标子树具有相同父节点标识的其它子树对应的排序值中,确定大于所述目标子树的排序值并且最小的最小排序值,根据所述最小排序值和所述目标子树的排序值,确定所述待移动子树的排序值。
5.根据权利要求2所述的基于节点树的数据展示方法,其特征在于,所述方法还包括,查询所述节点树的树形结构;
所述查询所述节点树的树形结构,包括:
响应于接收到所述用户发起的节点树查询请求,在所述用户的用户身份为预设身份的情形下,基于所述树表中存储的全部节点数据组建节点树,并返回所述用户;
在所述用户的用户身份不是所述预设身份的情形下,基于所述树表中与所述用户相关的节点数据组建节点树,并返回所述用户。
6.根据权利要求5所述的基于节点树的数据展示方法,其特征在于,基于所述树表中存储的节点数据组建节点树,包括:
根据所述树表中待组建树的节点数据,生成节点数据集合;
获取所述节点数据集合中父节点标识为空的第一节点,将所述第一节点作为所述节点树的树根节点,并从所述节点数据集合中删除所述第一节点;
针对每一所述第一节点,在所述节点数据集合中,查询父节点为所述第一节点的第二节点,将所述第二节点存储在与所述第一节点对应的子树节点集合中,并从所述节点数据集合中删除所述第二节点;
针对每一所述第二节点,在所述节点数据集合中,查询父节点为所述第二节点的第三节点,将所述第三节点存储在与所述第二节点对应的子树节点集合中,并从所述节点数据集合中删除所述第三节点;
以此类推,直到所述节点数据集合为空。
7.根据权利要求2所述的基于节点树的数据展示方法,其特征在于,所述统计数据为针对预设对象在所述统计维度的统计数据;
所述统计维度包括以下至少一种:
所述预设对象的至少一种属性;
针对至少一种所述属性的至少一个统计条件;
所述目标树节点的下一级子节点数量;
所述目标树节点的至少一级子节点对应的统计数据之和。
8.根据权利要求7所述的基于节点树的数据展示方法,其特征在于,所述数据库为基于SQL查询的数据库;所述查询子语句为SQL语句;
所述根据各所述树节点包括的至少一个所述统计维度,生成各所述树节点分别对应的查询语句,包括:
针对每一树节点,生成每一所述统计维度对应的查询子语句,以及对每一所述统计维度对应的查询子语句进行组合,得到所述树节点对应的查询语句;
其中,所述生成每一所述统计维度对应的查询子语句,包括:
在所述统计维度为所述预设对象的至少一种属性的情形下,查询预先维护的字典表,确定与每一所述属性对应的第一表名称和第一字段名称,将所述第一字段名称作为查询字段,将所述第一表名称作为查询表,生成第一SQL语句;所述字典表包括向所述用户展示的属性名称、与存储在所述数据库中的表名称和字段名称之间的对应关系;
在所述统计维度为针对至少一种所述属性的至少一个统计条件的情形下,查询所述字典表,确定与每一所述属性对应的第二表名称和第二字段名称,将所述第二字段名称作为查询字段,将所述第二表名称作为查询表,将每一所述统计条件作为查询条件,生成第二SQL语句;所述第二SQL语句中包含去重指令;
在所述统计维度为所述目标树节点的至少一级子节点对应的统计数据之和的情形下,针对所述至少一级子节点中的每一子节点,通过所述字典表生成与所述每一子节点对应的查询条件,根据所述每一子节点,生成第三SQL语句;所述第三SQL语句中包含去重指令。
9.根据权利要求1所述的基于节点树的数据展示方法,其特征在于,所述方法还包括:
将各所述树节点分别对应的展示信息缓存至预设的高速缓存数据库。
10.根据权利要求9所述的基于节点树的数据展示方法,其特征在于,针对所述数据库中的数据的存储请求、针对所述节点树的操作请求,以及针对所述展示信息的缓存请求以不同主题形式被存储在消息发布平台;所述消息发布平台中预先配置了与每一所述主题分别对应的至少一个消费单元,通过所述消费单元监听对应所述主题下的请求消息,并执行与所述消费单元预设的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310399257.8A CN116150436B (zh) | 2023-04-14 | 2023-04-14 | 一种基于节点树的数据展示方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310399257.8A CN116150436B (zh) | 2023-04-14 | 2023-04-14 | 一种基于节点树的数据展示方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116150436A true CN116150436A (zh) | 2023-05-23 |
CN116150436B CN116150436B (zh) | 2023-08-08 |
Family
ID=86373898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310399257.8A Active CN116150436B (zh) | 2023-04-14 | 2023-04-14 | 一种基于节点树的数据展示方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116150436B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117707453A (zh) * | 2023-08-15 | 2024-03-15 | 荣耀终端有限公司 | 一种节点信息的读取方法、设备及存储介质 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006054506A1 (ja) * | 2004-11-17 | 2006-05-26 | Turbo Data Laboratories Inc. | ツリーデータの検索・集計・ソート方法及びプログラム |
CN102024182A (zh) * | 2009-09-10 | 2011-04-20 | 上海宝信软件股份有限公司 | 资产信息管理系统 |
CN105447098A (zh) * | 2015-11-10 | 2016-03-30 | 中国建设银行股份有限公司 | 一种信息查询方法及装置 |
CN105550241A (zh) * | 2015-12-07 | 2016-05-04 | 珠海多玩信息技术有限公司 | 多维数据库查询方法及装置 |
CN105631745A (zh) * | 2015-12-31 | 2016-06-01 | 北京神州绿盟信息安全科技股份有限公司 | 一种资产视图构建方法及装置 |
CN107491528A (zh) * | 2017-08-18 | 2017-12-19 | 深圳易嘉恩科技有限公司 | 一种用于数据资产化基础平台进行可视化操作的树形控件 |
CN111125159A (zh) * | 2019-12-24 | 2020-05-08 | 亚信科技(中国)有限公司 | 一种数据统计的方法及装置 |
CN111259350A (zh) * | 2020-01-10 | 2020-06-09 | 中国银联股份有限公司 | 一种访问控制方法、装置及计算机可读存储介质 |
CN113077171A (zh) * | 2016-11-27 | 2021-07-06 | 合肥汉腾信息技术有限公司 | 一种组织间复用协同的单点登录管理信息系统 |
CN113420044A (zh) * | 2021-06-30 | 2021-09-21 | 平安国际智慧城市科技股份有限公司 | 数据查询方法、装置、设备和存储介质 |
CN113515517A (zh) * | 2020-04-09 | 2021-10-19 | 深圳市华胜软件技术有限公司 | 一种基于树形结构数据查询数据集的方法和计算机设备 |
CN113868250A (zh) * | 2021-09-24 | 2021-12-31 | 南京苏宁电子信息技术有限公司 | 基于树状结构维度的数据分析方法、系统及存储介质 |
CN115017158A (zh) * | 2022-05-31 | 2022-09-06 | 武汉联影医疗科技有限公司 | 节点信息查询方法 |
CN115576974A (zh) * | 2022-09-30 | 2023-01-06 | 中电金信软件有限公司 | 数据处理方法、装置、设备和介质 |
-
2023
- 2023-04-14 CN CN202310399257.8A patent/CN116150436B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006054506A1 (ja) * | 2004-11-17 | 2006-05-26 | Turbo Data Laboratories Inc. | ツリーデータの検索・集計・ソート方法及びプログラム |
CN102024182A (zh) * | 2009-09-10 | 2011-04-20 | 上海宝信软件股份有限公司 | 资产信息管理系统 |
CN105447098A (zh) * | 2015-11-10 | 2016-03-30 | 中国建设银行股份有限公司 | 一种信息查询方法及装置 |
CN105550241A (zh) * | 2015-12-07 | 2016-05-04 | 珠海多玩信息技术有限公司 | 多维数据库查询方法及装置 |
CN105631745A (zh) * | 2015-12-31 | 2016-06-01 | 北京神州绿盟信息安全科技股份有限公司 | 一种资产视图构建方法及装置 |
CN113077171A (zh) * | 2016-11-27 | 2021-07-06 | 合肥汉腾信息技术有限公司 | 一种组织间复用协同的单点登录管理信息系统 |
CN107491528A (zh) * | 2017-08-18 | 2017-12-19 | 深圳易嘉恩科技有限公司 | 一种用于数据资产化基础平台进行可视化操作的树形控件 |
CN111125159A (zh) * | 2019-12-24 | 2020-05-08 | 亚信科技(中国)有限公司 | 一种数据统计的方法及装置 |
CN111259350A (zh) * | 2020-01-10 | 2020-06-09 | 中国银联股份有限公司 | 一种访问控制方法、装置及计算机可读存储介质 |
CN113515517A (zh) * | 2020-04-09 | 2021-10-19 | 深圳市华胜软件技术有限公司 | 一种基于树形结构数据查询数据集的方法和计算机设备 |
CN113420044A (zh) * | 2021-06-30 | 2021-09-21 | 平安国际智慧城市科技股份有限公司 | 数据查询方法、装置、设备和存储介质 |
CN113868250A (zh) * | 2021-09-24 | 2021-12-31 | 南京苏宁电子信息技术有限公司 | 基于树状结构维度的数据分析方法、系统及存储介质 |
CN115017158A (zh) * | 2022-05-31 | 2022-09-06 | 武汉联影医疗科技有限公司 | 节点信息查询方法 |
CN115576974A (zh) * | 2022-09-30 | 2023-01-06 | 中电金信软件有限公司 | 数据处理方法、装置、设备和介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117707453A (zh) * | 2023-08-15 | 2024-03-15 | 荣耀终端有限公司 | 一种节点信息的读取方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116150436B (zh) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102591421B1 (ko) | 의도 추천 방법, 장치, 기기 및 저장매체 | |
US11995124B2 (en) | Query language interoperability in a graph database | |
AU2020203027B2 (en) | Generating, accessing, and displaying lineage metadata | |
CN104160394B (zh) | 用于半结构化数据的可缩放分析平台 | |
US9753960B1 (en) | System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria | |
CN110618983A (zh) | 基于json文档结构的工业大数据多维分析与可视化方法 | |
CN106970958B (zh) | 一种流文件的查询与存储方法和装置 | |
US10810226B2 (en) | Shared comments for visualized data | |
US10275486B2 (en) | Multi-system segmented search processing | |
CN116150436B (zh) | 一种基于节点树的数据展示方法与系统 | |
CN115269877A (zh) | 领域实体与事件双中心知识图谱构建方法、系统及设备 | |
CN110807028B (zh) | 用于管理存储系统的方法、设备和计算机程序产品 | |
EP3249557B1 (en) | Computer implemented and computer controlled method, computer program product and platform for arranging data for processing and storage at a data storage engine | |
US11068459B2 (en) | Computer implemented and computer controlled method, computer program product and platform for arranging data for processing and storage at a data storage engine | |
Pokorný | New database architectures: Steps towards big data processing | |
CN115309789B (zh) | 一种基于业务对象智能动态化实时生成关联数据图的方法 | |
Černjeka et al. | NoSQL document store translation to data vault based EDW | |
CN115309743A (zh) | 多数据中心太空态势感知数据共享方法、装置及设备 | |
JP2021165979A (ja) | 生産知識管理システム、生産知識管理方法及び生産知識管理プログラム | |
Whang et al. | Building social networking services systems using the relational shared-nothing parallel DBMS | |
US20160162572A1 (en) | Alerting system based on newly disambiguated features | |
CN118093599B (zh) | 一种知识图谱构建方法、装置和计算机可读存储介质 | |
CN113761102B (zh) | 数据处理方法、装置、服务器、系统和存储介质 | |
Sellami et al. | Normalized NoSQL Graph Data Warehouse. | |
CN116975367A (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 | ||
GR01 | Patent grant |