CN103902651A - 一种基于MongoDB的云端代码查询方法与装置 - Google Patents
一种基于MongoDB的云端代码查询方法与装置 Download PDFInfo
- Publication number
- CN103902651A CN103902651A CN201410056117.1A CN201410056117A CN103902651A CN 103902651 A CN103902651 A CN 103902651A CN 201410056117 A CN201410056117 A CN 201410056117A CN 103902651 A CN103902651 A CN 103902651A
- Authority
- CN
- China
- Prior art keywords
- mongodb
- txl
- query
- code
- hierarchical structure
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/83—Querying
- G06F16/835—Query processing
- G06F16/8358—Query translation
Abstract
本发明公开了一种基于MongoDB的云端代码查询方法与装置。本发明的方法包括如下步骤:分析TXL的语法定义文件生成层次结构库;根据层次结构库将查询语句翻译成MongoDB的查询命令;调用MongoDB中的查询函数执行查询命令。通过本发明的方法可以解决云云端代码查询中的大数据量和代码异构问题。此外本发明的方法还支持语义查询。
Description
技术领域
本发明主要用于对云端代码进行存储和查询,涉及代码格式转换与数据库查询。
背景技术
近年来,越来越多的开源项目将代码存储在云中。为了方便地复用这些代码,需要在云端直接对其进行查询,特别是语义层面的查询。但这些代码的数据总量极大,相互之间还存在着异构性。现今的工作中,缺乏对大数据量异构代码的语义查询的支持。
No-sql数据库,也即非关系数据库,是近年来飞速发展的一类数据库。与传统关系数据库不同,非关系数据库去除了关系数据库的关系型特性,普遍使用key-value的方式来存储数据。非关系数据库克服了传统关系数据库难以扩展的问题,体现了数据之间的聚合性,更利于做集群,在架构层面上带来了可扩展的能力。得益于其的无关系性,在处理大数据量的时候,非关系数据库具有非常高的读写性能。针对代码的存储,非关系数据库能完整地保留代码的层次结构信息,不会遇到传统数据库的扁平化阻抗问题。
MongoDB便是典型的非关系数据库。它使用JSON语法风格,客户端提交或接收的数据都使用JSON形式来展现。MongoDB的所有的属性类型都支持索引。性能高效,速度很快,并且资源占用率很小。MongoDB支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能。非常适合用来存储大规模的项目源码。
JIns是一个以声明式方法定义查询规则的Java代码查询工具,定义了一套语法规则,并基于该规则得出一系列的查询规则。JIns查询规则分为属性查询和关系查询两种,对代码的语义性查询有着很好的支持。
TXL是一种特别的编程语言,设计用来支持源代码转换。经过了十多年的持续研究,这个基于规则的结构转换语言已经有了成熟的工具,并在相关工业领域内被广泛使用。
JDOM是Eclipse的一个开源包,可以快速而准确地进行XML格式与JSON格式的转换。
发明内容
本发明所要解决的问题是提供一种基于MongoDB的云端代码查询方法与装置。
为解决上述问题,本发明采用的方案如下:
一种基于MongoDB的云端代码查询方法,包括以下步骤:
S1:以TXL为中介工具将代码转换成JSON格式存入MongoDB;
S2:分析TXL的语法定义文件生成层次结构库;
S3:根据层次结构库将查询语句翻译成MongoDB的查询命令;
S4:调用MongoDB中的查询函数执行S3获得的查询命令;
其中,所述的步骤S1包括:
S10:使用TXL将代码转换为XML格式;
S11:使用JDOM将XML格式的代码转换为JSON格式;
S12:将JSON格式的代码存入MongoDB。
进一步,根据本发明的基于MongoDB的云端代码查询方法,所述的步骤S2包括以下步骤:
S20:根据TXL的语法定义文件构建定义关系图:将TXL的语法定义文件中的每一个定义作为定义关系图的节点,找出定义之间的关系构建节点之间的父子关系;
S21:对定义关系图进行深度优先遍历找出所有的叶节点与根节点之间的简单路径;
S22:对定义关系图进行遍历找出所有的环;
S23:将环与简单路径进行组合生成叶节点与根节点之间的所有路径。
进一步,根据本发明的基于MongoDB的云端代码查询方法,所述的步骤S3包括以下步骤:
S31:分析输入的查询语句抽取出查询条件以及查询目标;
S32:根据查询目标在层次结构库中查找对应的层次结构信息;
S33:将查询目标、目标的层次结构信息及查询条件组合生成MongoDB查询命令。
一种基于MongoDB的云端代码查询装置,包括:
用于以TXL为中介工具将代码转换成JSON格式存入MongoDB的装置;
用于分析TXL的语法定义文件生成层次结构库的装置;
用于根据层次结构库将查询语句翻译成MongoDB的查询命令的装置;
用于调用MongoDB中的查询函数执行S3获得的查询命令的装置;
其中,所述的用于以TXL为中介工具将代码转换成JSON格式存入MongoDB的装置包括:
用于使用TXL将代码转换为XML格式的装置;
用于使用JDOM将XML格式的代码转换为JSON格式的装置;
用于将JSON格式的代码存入MongoDB的装置。
进一步,根据本发明的基于MongoDB的云端代码查询装置,所述的用于分析TXL的语法定义文件生成层次结构库的装置包括:
用于根据TXL的语法定义文件构建定义关系图的装置;
用于对定义关系图进行深度优先遍历找出所有的叶节点与根节点之间的简单路径的装置;
用于对定义关系图进行遍历找出所有的环的装置;
用于将环与简单路径进行组合生成叶节点与根节点之间的所有路径的装置;
其中,所述的用于根据TXL的语法定义文件构建定义关系图的装置包括用于将TXL的语法定义文件中的每一个定义作为定义关系图的节点的装置和用于找出定义之间的关系构建节点之间的父子关系的装置。
进一步,根据本发明的基于MongoDB的云端代码查询装置,所述的用于根据层次结构库将查询语句翻译成MongoDB的查询命令的装置包括:
用于分析输入的查询语句抽取出查询条件以及查询目标的装置;
用于根据查询目标在层次结构库中查找对应的层次结构信息的装置;
用于将查询目标、目标的层次结构信息及查询条件组合生成MongoDB查询命令的装置。
一种机器可读介质,该可读介质上存储有指令集合,当该指令集合被执行时,使得该机器可执行本发明的基于MongoDB的云端代码查询方法。
本发明的技术效果为:
1、通过本发明的方法解决了云端查询的代码异构问题和大数据量问题。
2、通过将查询规则翻译成MongoDB的查询命令并进行查询,提供了对代码查询,特别是代码的语义性查询的支持。
具体实施方式
下面对本发明做进一步详细说明。
本发明的一种基于MongoDB的云端代码查询方法,包括以下步骤:
S1:以TXL为中介工具将代码转换成JSON格式存入MongoDB;
S2:分析TXL的语法定义文件生成层次结构库;
S3:根据层次结构库将查询语句翻译成MongoDB的查询命令;
S4:调用MongoDB中的查询函数执行S3获得的查询命令。
这里,代码查询的过程由步骤S2、S3和S4实现。步骤S1用于表明代码存入MongoDB时采用了TXL作为中介工具。因为存储过程和代码查询过程需要一致,代码查询过程中采用了TXL,代码存储时必然限于TXL作为转换的中介工具。本发明的代码查询基于MongoDB的代码存储。众所周知,MongoDB采用JSON格式存储文档。因此,MongoDB存储代码时,首先需要将代码转换成JSON格式。本发明将代码存入MongoDB时采用了以TXL作为中介工具。步骤S1以TXL为中介工具将代码转换成JSON格式存入MongoDB的具体过程为:
S10:使用TXL将代码转换为XML格式;
S11:使用JDOM将XML格式的代码转换为JSON格式。
S12:将JSON格式的代码存入MongoDB。
TXL为源代码转换工具。具体可以参考TXL的官方网站:http://www.txl.ca/。步骤S10中,TXL实现将代码转换成XML格式时需要一套转换规则。TXL官方提供了各种语言的语法定义文件用以定义转换规则。比如,java的语法定义文件:java.grm,C++语言的语法定义文件cpp.grm,Ada语言的语法定义文件Ada.grm,VisualBasic语言的语法定义文件VisualBasic6.grm等等。这些语法定义文件均为文本文件。有关TXL的各种语言的语法定义文件可以通过TXL的官方网站下载,具体的下载地址为:http://www.txl.ca/nresources.html。根据不同的语言的语法定义文件,TXL可以将不同语言的代码转换成XML格式。
步骤S11中,使用JDOM将XML格式的代码转换为JSON格式由JDOM中的Xml2JsonUtil.xml2JSON()方法实现。
步骤S2,分析TXL的语法定义文件生成层次结构库。其输入为TXL的语法定义文件,输出为层次结构库。这里的TXL语法定义文件即为前述的Java.grm、cpp.grm、ada.grm、VisualBasic6.grm等用于定义转换规则的文件。由于MongoDB的查询中只有一个db.dbname.find()可用。要查询到代码中某个元素,首先要知道该元素在代码中的层次结构信息。MongoDB文档的JSON格式直接来源于XML的层次结构,而XML的层次结构则是由TXL使用语法定义文件定义的转换规则将代码格式转换成XML格式时产生的。也就是说,TXL的语法定义文件定义了代码中每一个语法元素是如何转换到XML格式的。因此对TXL的语法定义文件的分析可以获得代码转换成JSON格式后的层次结构。由于TXL的语法定义文件为文本格式,分析该定义语法定义文件生成层次结构库并不困难,具体分析的步骤如下:
S20:根据TXL的语法定义文件构建定义关系图;
S21:对图进行深度优先遍历找出所有的叶节点与根节点之间的简单路径;
S22:对图进行遍历找出所有的环;
S23:将环与简单路径进行组合生成叶节点与根节点之间的所有路径。
其中,步骤S20可以分成以下两个步骤:
S201:将TXL的语法定义文件中的每一个定义作为定义关系图的节点;
S202:找出定义之间的关系构建节点之间的父子关系。
以TXL的语法定义文件java.grm为例,java.grm中声明了很多定义,比如:
define program
[package_declaration]
end define
define package_declaration
[opt package_header]
[repeat import_declaration]
[repeat type_declaration]
end define
根据定义program和package_declaration即可构建定义关系图的两个节点分别为:program和package_declaration。而根据program定义描述,program与package_declaration构成了父子关系:program为package_declaration的父节点,package_declaration为program的子节点。同理,节点package_declaration还包括了三个子节点:package_header、import_declaration和type_declaration。根据上述TXL语法定义文件中的定义和关系可以构建出一完整的定义关系图。步骤S21、S22和S23均是对定义关系图分析的步骤,其具体的实现可以参考图论的有关知识,对于本领域技术人员来说实现并不困难。
上述步骤S20、S21、S22和S23最终得到的层次结构库即为步骤S23中的叶节点与根节点之间的路径集。层次结构库即为用于表示语法定义文件中定义之间关系的结构。
步骤S3,根据层次结构库将查询语句翻译成MongoDB的查询命令。本步骤的输入为查询语句和步骤S2中的层次结构库,输出为MongoDB查询命令。不同于普通文本内容的查询,代码查询有其特殊性,不能通过简单关键词查询实现。为此本发明引入了一种JIns语法规则定义代码查询语句。JIns的语法规则如下:
S => find Id :T satisfying CS
T => object
| statement
| method
| class
| interface
CS => (exist Id : T) ( all Id :T ) where CE
CE => CE && CE
| CE || CE
| !CE
| ( CE )
| Id.ATT = ‘ value’
| Id REL Id
ATT => name
| dataType
| specificType
| returnType
| paramsType
REL => extend
| use
| change
| isIn
| call
JIns查询语句(即符合JIns语法规则的查询语句)可以分为两类,分别是属性查询和关系查询。属性查询是针对CE 是由ATT组合而成的匹配条件的查询。关系查询是针对CE是由REL组合而成的查询。其中关系查询更能体现出语义上的查询。有关JIns更多的内容可以参考南京大学硕士研究生毕业论文《一种Java程序插桩语言及支撑工具》陶永晶。
根据层次结构库将JIns查询语句翻译成MongoDB的查询命令的具体实现步骤如下:
S31:分析输入的JIns查询语句抽取出查询条件以及查询目标;
S32:根据查询目标在层次结构库中查找对应的层次结构信息;
S33:将查询目标、目标的层次结构信息及查询条件组合生成MongoDB查询命令。
以JIns查询语句“find c : class satisfying where c.name=‘HelloWorld’”为例来说明。这条语句的意思是:查询名字为HelloWorld的类。
根据S31,分析这条JIns查询语句,抽取出的查询目标是class,也即一个类。查询条件为:c.name=‘HelloWorld’,也即类的名字为HelloWorld。
根据S32,在层次结构库中找到查询目标class对应的层次结构信息,结果为:program.package_declaration.repeat_type_declaration.type_declaration.class_declaration.class_header.class_name.declared_name.id
根据S33将查询目标、层次结构信息、查询条件组合起来,得到的结果为:db.dbname.find(''program.package_declaration.repeat_type_declaration.type_declaration.class_declaration.class_header.class_name.declared_name.id'',''HelloWorld'')
上述结果即为MongoDB可以直接识别的查询命令。
需要说明的是符合JIns语法规则的查询语句只是本发明的一具体实施方式,在实际应用中,本领域技术人员还可以自定义其他的语法规则用于表示查询语句。
步骤S4,调用MongoDB的查询函数执行S3获得的查询命令,即调用MongoDB的查询函数,并以查询命令作为该查询函数的参数。本步骤的输入为S3获得的查询命令,输出为代码查询结果。
Claims (7)
1.一种基于MongoDB的云端代码查询方法,其特征在于,包括以下步骤:
S1:以TXL为中介工具将代码转换成JSON格式存入MongoDB;
S2:分析TXL的语法定义文件生成层次结构库;
S3:根据层次结构库将查询语句翻译成MongoDB的查询命令;
S4:调用MongoDB中的查询函数执行S3获得的查询命令;
其中,所述的步骤S1包括:
S10:使用TXL将代码转换为XML格式;
S11:使用JDOM将XML格式的代码转换为JSON格式;
S12:将JSON格式的代码存入MongoDB。
2.如权利要求1所述的基于MongoDB的云端代码查询方法,其特征在于,所述的步骤S2包括以下步骤:
S20:根据TXL的语法定义文件构建定义关系图:将TXL的语法定义文件中的每一个定义作为定义关系图的节点,找出定义之间的关系构建节点之间的父子关系;
S21:对定义关系图进行深度优先遍历找出所有的叶节点与根节点之间的简单路径;
S22:对定义关系图进行遍历找出所有的环;
S23:将环与简单路径进行组合生成叶节点与根节点之间的所有路径。
3.如权利要求1所述的基于MongoDB的云端代码查询方法,其特征在于,所述的步骤S3包括以下步骤:
S31:分析输入的查询语句抽取出查询条件以及查询目标;
S32:根据查询目标在层次结构库中查找对应的层次结构信息;
S33:将查询目标、目标的层次结构信息及查询条件组合生成MongoDB查询命令。
4.一种基于MongoDB的云端代码查询装置,其特征在于,该装置包括:
用于以TXL为中介工具将代码转换成JSON格式存入MongoDB的装置;
用于分析TXL的语法定义文件生成层次结构库的装置;
用于根据层次结构库将查询语句翻译成MongoDB的查询命令的装置;
用于调用MongoDB中的查询函数执行S3获得的查询命令的装置;
其中,所述的用于以TXL为中介工具将代码转换成JSON格式存入MongoDB的装置包括:
用于使用TXL将代码转换为XML格式的装置;
用于使用JDOM将XML格式的代码转换为JSON格式的装置;
用于将JSON格式的代码存入MongoDB的装置。
5.如权利要求4所述的基于MongoDB的云端代码查询装置,其特征在于,所述的用于分析TXL的语法定义文件生成层次结构库的装置包括:
用于根据TXL的语法定义文件构建定义关系图的装置;
用于对定义关系图进行深度优先遍历找出所有的叶节点与根节点之间的简单路径的装置;
用于对定义关系图进行遍历找出所有的环的装置;
用于将环与简单路径进行组合生成叶节点与根节点之间的所有路径的装置;
其中,所述的用于根据TXL的语法定义文件构建定义关系图的装置包括用于将TXL的语法定义文件中的每一个定义作为定义关系图的节点的装置和用于找出定义之间的关系构建节点之间的父子关系的装置。
6.如权利要求4所述的基于MongoDB的云端代码查询装置,其特征在于,所述的用于根据层次结构库将查询语句翻译成MongoDB的查询命令的装置包括:
用于分析输入的查询语句抽取出查询条件以及查询目标的装置;
用于根据查询目标在层次结构库中查找对应的层次结构信息的装置;
用于将查询目标、目标的层次结构信息及查询条件组合生成MongoDB查询命令的装置。
7.一种机器可读介质,其特征在于,该可读介质上存储有指令集合,当该指令集合被执行时,使得该机器可执行权利要求1或2或3所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410056117.1A CN103902651B (zh) | 2014-02-19 | 2014-02-19 | 一种基于MongoDB的云端代码查询方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410056117.1A CN103902651B (zh) | 2014-02-19 | 2014-02-19 | 一种基于MongoDB的云端代码查询方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902651A true CN103902651A (zh) | 2014-07-02 |
CN103902651B CN103902651B (zh) | 2017-01-11 |
Family
ID=50993974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410056117.1A Expired - Fee Related CN103902651B (zh) | 2014-02-19 | 2014-02-19 | 一种基于MongoDB的云端代码查询方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902651B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106339454A (zh) * | 2016-08-25 | 2017-01-18 | 北京云知声信息技术有限公司 | 查询命令转化方法及装置 |
CN107229723A (zh) * | 2017-06-05 | 2017-10-03 | 腾讯科技(深圳)有限公司 | 指令处理方法及指令处理装置 |
CN108073590A (zh) * | 2016-11-10 | 2018-05-25 | 北京国双科技有限公司 | 文档数据库的管理方法和装置 |
CN113420184A (zh) * | 2020-07-30 | 2021-09-21 | 武汉慧人信息科技有限公司 | 基于MongoDB的英语语法库封装和读写方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130060814A1 (en) * | 2011-09-07 | 2013-03-07 | International Business Machines Corporation | Transforming hierarchical language data into relational form |
CN102982130A (zh) * | 2012-11-16 | 2013-03-20 | 深圳市融创天下科技股份有限公司 | 一种nosql与rdbms的数据库同步方法和系统 |
CN103530327A (zh) * | 2013-09-25 | 2014-01-22 | 清华大学深圳研究生院 | 一种从非关系型数据库到关系型数据库的数据迁移方法 |
-
2014
- 2014-02-19 CN CN201410056117.1A patent/CN103902651B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130060814A1 (en) * | 2011-09-07 | 2013-03-07 | International Business Machines Corporation | Transforming hierarchical language data into relational form |
CN102982130A (zh) * | 2012-11-16 | 2013-03-20 | 深圳市融创天下科技股份有限公司 | 一种nosql与rdbms的数据库同步方法和系统 |
CN103530327A (zh) * | 2013-09-25 | 2014-01-22 | 清华大学深圳研究生院 | 一种从非关系型数据库到关系型数据库的数据迁移方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106339454A (zh) * | 2016-08-25 | 2017-01-18 | 北京云知声信息技术有限公司 | 查询命令转化方法及装置 |
CN108073590A (zh) * | 2016-11-10 | 2018-05-25 | 北京国双科技有限公司 | 文档数据库的管理方法和装置 |
CN107229723A (zh) * | 2017-06-05 | 2017-10-03 | 腾讯科技(深圳)有限公司 | 指令处理方法及指令处理装置 |
CN107229723B (zh) * | 2017-06-05 | 2022-05-03 | 腾讯科技(深圳)有限公司 | 指令处理方法及指令处理装置 |
CN113420184A (zh) * | 2020-07-30 | 2021-09-21 | 武汉慧人信息科技有限公司 | 基于MongoDB的英语语法库封装和读写方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103902651B (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038207B (zh) | 一种数据查询方法、数据处理方法及装置 | |
CN109299102B (zh) | 一种基于Elastcisearch的HBase二级索引系统及方法 | |
US11188531B2 (en) | Systems and methods for converting and resolving structured queries as search queries | |
US11042560B2 (en) | Extended computerized query language syntax for analyzing multiple tabular data arrangements in data-driven collaborative projects | |
CN107291807B (zh) | 一种基于图遍历的sparql查询优化方法 | |
US11620301B2 (en) | Extended computerized query language syntax for analyzing multiple tabular data arrangements in data-driven collaborative projects | |
US20190050459A1 (en) | Localized link formation to perform implicitly federated queries using extended computerized query language syntax | |
US10031973B2 (en) | Method and system for identifying a sensor to be deployed in a physical environment | |
CN104123288B (zh) | 一种数据查询方法及装置 | |
CN103729463A (zh) | 基于Lucene和Solr实现全文检索的方法 | |
CN108009296B (zh) | 一种基于Hbase的SQL查询方法、系统及相关装置 | |
CN106407201A (zh) | 一种数据处理方法及装置 | |
CN109308300B (zh) | 一种逻辑运算的处理方法、装置、转换插件及存储介质 | |
CN102999600A (zh) | 一种嵌入式数据库自动生成方法和系统 | |
US20170060977A1 (en) | Data preparation for data mining | |
CN104462161A (zh) | 基于分布式数据库的结构化数据查询方法 | |
CN103902651A (zh) | 一种基于MongoDB的云端代码查询方法与装置 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
CN105335366A (zh) | 一种sql语句处理方法、装置和服务器 | |
CN104731911A (zh) | 一种数据表与实体类的动态映射及转换方法 | |
Ghotiya et al. | Migration from relational to NoSQL database | |
CN104462095A (zh) | 一种查询语句公共部分的提取方法及装置 | |
CN103177038A (zh) | 一种垂直搜索引擎中的查询表达式 | |
CN113515564A (zh) | 基于j2ee的数据访问方法、装置、设备及存储介质 | |
KR101743731B1 (ko) | 분산된 데이터를 통합하여 생성한 온톨로지를 기반으로 쿼리를 처리하는 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170111 Termination date: 20180219 |
|
CF01 | Termination of patent right due to non-payment of annual fee |