CN107145601A - 一种高效的引用关系发现算法 - Google Patents
一种高效的引用关系发现算法 Download PDFInfo
- Publication number
- CN107145601A CN107145601A CN201710409917.0A CN201710409917A CN107145601A CN 107145601 A CN107145601 A CN 107145601A CN 201710409917 A CN201710409917 A CN 201710409917A CN 107145601 A CN107145601 A CN 107145601A
- Authority
- CN
- China
- Prior art keywords
- data
- mongodb
- attribute
- document
- algorithm
- 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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了高效的引用关系发现算法,输入信息是基于文档的数据集,输出是发现数据集之间的关系,连接文档型数据库MongoDB并提取MongoDB的数据模型后浏览MonogDB中的所有数据集合,去除重复的数据,分析该数据集各属性间的依赖关系,找出超级键,超级键是一个属性集合,可以确定本文档中的每个属性,再根据数据集超级键之间的依赖关系,发现数据集之间的关系。本发明使用数据模型信息和数据类型分布来改进了Tane算法,使其更加高效,更适合文档型数据集,可以用于文档型数据集的规范化,数据清理等任务。
Description
技术领域
本发明涉及算法技术领域,尤其涉及一种高效的引用关系发现算法。
背景技术
传统的关系型数据库,诸如MySQL, Oracle和DB2等已经被广泛运用于各种场景超过30年时间。这些关系型数据库非常容易使用,易于上手,并且拥有结构化的数据模型和标准化的SQL语句[1] [2]。当它们在处理有限的数据量时往往可以提供很好的性能,这一点在很多场景下都被证实。从21世纪开始,由于关系型数据库的广泛使用,越来越多的函数依赖发掘算法被人们提出。比如Tane [3], Fun [4], Fd Mine [5], Dfd [6], Dep-Miner[7],FastFDs [8], Fdep [9]等算法。然而这些传统的函数依赖发掘算法主要是针对关系型数据库的。
随着近几年信息产业的飞速发展,各种应用的数据库数据量不断增大,数据种类不断增多,数据结构越来越灵活。面对这样大量的非结构化数据,传统的关系型数据库渐渐难以应对。人们渐渐意识到大数据处理的重要性和关系型数据库的薄弱。为了满足大规模数据的处理和存储,NoSQL数据库被人们提出。1998年,NoSQL数据库第一次被CarloStrozzi正式提出。NoSQL表示“Not Only SQL”,意味着并不遵照标准SQL接口[10]。在此之后,大量的NoSQL数据库被人们研发出来。这类数据库系统提供了大存储量,高可用性,高拓展性,没有固定的数据模型结构等优良的性能。NoSQL数据库只要有四种类型:Key-Value数据库, Column-Oriented数据库, Document数据库, Graph- Oriented数据库[11]。NoSQL数据库已经克服了很多传统关系型数据库的弱点和问题[10][12]。现如今,NoSQL数据库已经被很多公司广泛使用。诸如Google, Facebook, Yahoo等大型企业也在其中。至今,已经有超过200种NoSQL数据库问世。越来越多的企业正在用NoSQL数据库代替传统的关系型数据库,用来管理各种应用软件的数据,并存储海量数据。因此,寻找一种高效的、合理的、可靠的针对NoSQL数据库的函数依赖发现算法是非常有必要的。
发明内容
本发明的目的就在于为了解决上述问题而提供一种高效的引用关系发现算法。
本发明通过以下技术方案来实现上述目的:
本发明包括
函数依赖发现算法,输入信息是基于文档的数据集, 输出是发现数据集之间的关系,连接文档型数据库MongoDB并提取MongoDB的数据模型后浏览MonogDB中的所有数据集合,去除重复的数据,分析该数据集各属性间的依赖关系,找出超级键,超级键是一个属性集合,可以确定本文档中的每个属性,再根据数据集超级键之间的依赖关系,发现数据集之间的关系;
引用关系发掘算法,遍历每个集合中的每个超级键,后使用真值来检查每个其他的集合并测试其每个属性,只要一个文档的某个属性的某个可能取值不属于超级键的值集,系统将跳出循环,表示我们在这两个集合之间找不到引用关系,当这个属性的每个值都出现在超级键的值集中时,即找到一个潜在的引用关系。
本发明优选地,所述提取MongoDB的数据模型,采用MongoDB的数据模型分析,通过拓展MongoDB shell的使用方式,利用schema()的功能函数来提取MongoDB的数据结构,并且schema()函数的参数和mapReduce()函数的参数相同,schema()函数借助Map-Reduce框架来读取MongoDB数据库中的每一条数据,后将属于一个集合的数据整合在一起,创建关于这个数据集合的极大数据模型。
本发明的有益效果在于:
本发明使用数据模型信息和数据类型分布来改进了Tane算法,使其更加高效,更适合文档型数据集,可以用于文档型数据集的规范化,数据清理等任务。
附图说明
图1是本发明所述DiscoverySon(c, t)函数图;
图2是本发明所述employees数据集的测试结果图;
图3是本发明所述从MongoDB中提取数据模型的示例图;
图4是本发明所述MongoDB中address的示例数据图;
图5是本发明所述一个真值替换的示例图。
具体实施方式
下面对本发明作进一步说明:
本发明包括
函数依赖发现算法,函数依赖发现算法,输入信息是基于文档的数据集, 输出是发现数据集之间的关系,连接文档型数据库MongoDB并提取MongoDB的数据模型后浏览MonogDB中的所有数据集合,去除重复的数据,分析该数据集各属性间的依赖关系,找出超级键,超级键是一个属性集合,可以确定本文档中的每个属性,再根据数据集超级键之间的依赖关系,发现数据集之间的关系;
引用关系发掘算法,遍历每个集合中的每个超级键,后使用真值来检查每个其他的集合并测试其每个属性,只要一个文档的某个属性的某个可能取值不属于超级键的值集,系统将跳出循环,表示我们在这两个集合之间找不到引用关系,当这个属性的每个值都出现在超级键的值集中时,即找到一个潜在的引用关系。
提取MongoDB的数据模型,MongoDB拥有灵活的数据结构,并没有固定的数据模型。在我们发觉函数依赖的时候,我们必须要先收集数据集的数据模型。因此,我们需要去提取MongoDB中指定数据库的数据模型。
我们使用了MongoDB的数据模型分析工具。这个工具通过拓展MongoDB shell的使用方式,提供了一个叫做schema()的功能函数来提取MongoDB的数据结构。并且这个schema()函数的参数和mapReduce()函数的参数相同。schema()函数借助Map-Reduce框架来读取MongoDB数据库中的每一条数据。然后,将属于一个集合的数据整合在一起,创建关于这个数据集合的极大数据模型。
图3是从MongoDB中提取数据模型的一个例子。address是MongoDB的一个collection,并且它拥有的属性超过12个。其中country实体嵌套于city实体,city实体嵌套于address集合。显而易见,address集合拥有典型的层次结构,一共包含了三层嵌套。除此之外,每个数据新都有对应的数据类型和百分比信息。百分比信息表示表示包含这个数据类型的属性的数量条目数量占总数据量的比例信息。
重复数据删除,图4显示了MongoDB中address集合的示例数据。样本数据的数据模型与图3中提到的相同。显然,一个city包含了很多address,一个country包含了很多city。因此,在address集合中,city对象和country对象有很多重复的数据。
假设Kabul city出现了100次,Afghanistan country出现了200次。在传统的Tane算法中,当我们构建元组列表时,需要考虑每一条数据。这意味着我们需要计算Kabul city100次和Afghanistan country 200次。但实际上它们是冗余的数据,它们最终会被划分到一个相同的分区。这种处理是可以理解的,因为Tane算法主要用于传统的关系数据库。与MongoDB相比,这样的数据冗余在关系数据库中基本不会出现。
由于MongoDB中严重的数据冗余,我们必须采取一些措施来确保算法的效率。与Tane算法不同,我们的方法将在构建元组列表之前删除完全相同的数据。 我们有重复数据删除算法,可以检测嵌套结构的重复数据。使用重复数据消除算法之后,需要处理的数据量将大大降低,进而提供更好的性能。
函数依赖发现算法基于数据模型信息和重复数据消除算法,我们提出了一种在MongoDB中发掘函数依赖的高效算法。算法在Algorithm 1中给出。
输入信息是MongoDB的地址和MongoDB中数据库的名称。输出是发现的函数依赖。首先,我们连接MongoDB并提取MongoDB的数据模型。然后,我们浏览MonogDB中的所有集合,并检查每个集合中的所有文档。如果一个文档不是冗余数据,我们的算法将其添加到这个集合的tupleList中。其次,我们运行DiscoverySon(c, t)函数。这个函数本质上是一种深度优先搜索。在这个函数中,我们将发现嵌入式对象中的超级键,并使用超级键的值替换嵌入对象,以减少一个文档的数据大小。超级键是一个属性集合,可以确定本文档中的每个属性,就像关系数据库中的主键一样。算法1中的第10行到第19行与传统的Tane算法相同。唯一的区别在于剪枝操作。 我们增加一个新的剪枝规则:
如果一个属性的覆盖率≠100%,那么就不能成为一个超级键。
图1展示了一个DiscoverySon(c, t)函数的例子。 在(A)中,我们给出了一个示例文档,并且该文档的数据模型与图3和图4中的相同。首先,如(B)所示,我们发掘了嵌套的最深的儿子country对象,并找到一个超级键来取代整个country对象。假设country对象的country属性是一个超级键,在这种情况下,我们选择它代表整个对象。 所以我们可以忽略其他数据,只留下“Afghanistan”。其次,如(C)所示,我们发现最直接的儿子city对象,因为在这个例子中只有三层结构。 同样,我们找到一个超级键city_id属性来代表整个city对象。 因此,我们只是保留“251”并删除其他数据。最后,我们在(D)中得到一个新的文档。 该文档的数据大小远小于原始数据,但是我们保留所有必需的信息,这些信息将在函数依赖发掘期间使用。在这个例子中,通过使用DiscoverySon(c, t)函数,我们将函数依赖发掘期间需要计算的属性数量从18减至了11。DiscoverySon(c, t)函数可以显着提高MongoDB中函数依赖发掘算法的效率。
引用关系发掘算法在MongoDB中,我们使用嵌入和引用代表关系。嵌入式文档的关系非常明显。而且引用关系往往是固化在数据中的,从而无法直观的了解。一段时间后,用户可能已经忘记了使用引用关系的文档。借助之前提到的函数依赖发掘的结果,我们可以设计一种算法来发现集合之间的潜在引用关系。在我们的算法中,我们需要发掘的潜在的引用关系就像关系数据库中的主外键关系一样。算法在Algorithm 2中显示。首先,我们遍历每个集合中的每个超级键,这些超级键瑟吉欧在函数依赖发掘算法中被发现的。而且我们使用真值更换超级键的分区,如图5所示。分区π{D}与图1所示的相同。然后我们使用真值来检查每个其他的集合并测试其每个属性。只要一个文档的某个属性的某个可能取值不属于超级键的值集,系统将跳出循环,表示我们在这两个集合之间找不到引用关系。只有当这个属性的每个值都出现在超级键的值集中时,我们可以说我们找到一个潜在的引用关系。根据分区数量,我们还可以区分出这是一对一关系还是一对多关系。
实施例一:首先,我们在MySQL中生成employees数据集,employees数据集是MySQL的官方示例数据集。它包含了6个表和一些主外键关系。然后,我们将数据迁移到MongoDB中。基于主外键关系,我们将employees表嵌入到salaries表中。
如图2所示,在实验中,我们将数据逐个迁移到MongoDB中。数据量分别为0.238G,0.476G,0.714G和0.953G。0.238G是总数据的四分之一;0.476G是总数据的一半;0.714G是总数据的四分之三;0.953G是总数据。 我们在内存环境中测试这4组数据。
综上所述,本发明使用数据模型信息和数据类型分布来改进了Tane算法,使其更加高效,更适合文档型数据集,可以用于文档型数据集的规范化,数据清理等任务。
本领域技术人员不脱离本发明的实质和精神,可以有多种变形方案实现本发明,以上所述仅为本发明较佳可行的实施例而已,并非因此局限本发明的权利范围,凡运用本发明说明书及附图内容所作的等效结构变化,均包含于本发明的权利范围之内。
Claims (2)
1.一种高效的引用关系发现算法,其特征在于:包括
函数依赖发现算法,输入信息是基于文档的数据集, 输出是发现数据集之间的关系,连接文档型数据库MongoDB并提取MongoDB的数据模型后浏览MonogDB中的所有数据集合,去除重复的数据,分析该数据集各属性间的依赖关系,找出超级键,超级键是一个属性集合,可以确定本文档中的每个属性,再根据数据集超级键之间的依赖关系,发现数据集之间的关系;
引用关系发掘算法,遍历每个集合中的每个超级键,后使用真值来检查每个其他的集合并测试其每个属性,只要一个文档的某个属性的某个可能取值不属于超级键的值集,系统将跳出循环,表示我们在这两个集合之间找不到引用关系,当这个属性的每个值都出现在超级键的值集中时,即找到一个潜在的引用关系。
2.根据权利要求1所述的一种高效的引用关系发现算法,其特征在于:所述提取MongoDB的数据模型,采用MongoDB的数据模型分析,通过拓展MongoDB shell的使用方式,利用schema()的功能函数来提取MongoDB的数据结构,并且schema()函数的参数和mapReduce()函数的参数相同,schema()函数借助Map-Reduce框架来读取MongoDB数据库中的每一条数据,后将属于一个集合的数据整合在一起,创建关于这个数据集合的极大数据模型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710409917.0A CN107145601B (zh) | 2017-06-02 | 2017-06-02 | 一种高效的引用关系发现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710409917.0A CN107145601B (zh) | 2017-06-02 | 2017-06-02 | 一种高效的引用关系发现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107145601A true CN107145601A (zh) | 2017-09-08 |
CN107145601B CN107145601B (zh) | 2020-08-14 |
Family
ID=59780745
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710409917.0A Active CN107145601B (zh) | 2017-06-02 | 2017-06-02 | 一种高效的引用关系发现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107145601B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125172A (zh) * | 2019-12-26 | 2020-05-08 | 成都康赛信息技术有限公司 | 一种基于多列关系的数据有效性评估方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070239704A1 (en) * | 2006-03-31 | 2007-10-11 | Microsoft Corporation | Aggregating citation information from disparate documents |
CN105122243A (zh) * | 2013-03-15 | 2015-12-02 | 亚马逊科技公司 | 用于半结构化数据的可扩展分析平台 |
CN106126543A (zh) * | 2016-06-15 | 2016-11-16 | 清华大学 | 一种关系型数据库到MongoDB的模型转换和数据迁移方法 |
-
2017
- 2017-06-02 CN CN201710409917.0A patent/CN107145601B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070239704A1 (en) * | 2006-03-31 | 2007-10-11 | Microsoft Corporation | Aggregating citation information from disparate documents |
CN105122243A (zh) * | 2013-03-15 | 2015-12-02 | 亚马逊科技公司 | 用于半结构化数据的可扩展分析平台 |
CN106126543A (zh) * | 2016-06-15 | 2016-11-16 | 清华大学 | 一种关系型数据库到MongoDB的模型转换和数据迁移方法 |
Non-Patent Citations (1)
Title |
---|
TIANYU JIA: "Model Transformation and Data Migration from Relational Database to MongoDB", 《2016 IEEE INTERNATIONAL CONGRESS ON BIG DATA (BIGDATA CONGRESS)》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125172A (zh) * | 2019-12-26 | 2020-05-08 | 成都康赛信息技术有限公司 | 一种基于多列关系的数据有效性评估方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107145601B (zh) | 2020-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104881424B (zh) | 一种基于正则表达式的电力大数据采集、存储及分析方法 | |
Zou et al. | gStore: answering SPARQL queries via subgraph matching | |
US10657111B2 (en) | Computer-implemented method for storing unlimited amount of data as a mind map in relational database systems | |
CN102918494B (zh) | 基于数据库模型不可知论、纲要不可知论且工作负载不可知论的数据存储和存取模型的数据存储和/或检索方法和系统 | |
US8214324B2 (en) | Generating extract, transform, and load (ETL) jobs for loading data incrementally | |
US20160055233A1 (en) | Pre-join tags for entity-relationship modeling of databases | |
Twigg et al. | Stratified b-trees and versioned dictionaries | |
Bouaziz et al. | Design a data warehouse schema from document-oriented database | |
CN106126543B (zh) | 一种关系型数据库到MongoDB的模型转换和数据迁移方法 | |
JP5833406B2 (ja) | 参照を使用してジェネリック・データ・アイテムに関連するデータ管理アーキテクチャ | |
EP3238097B1 (en) | Identifying join relationships based on transactional access patterns | |
US20170255709A1 (en) | Atomic updating of graph database index structures | |
WO2017096892A1 (zh) | 索引构建方法、查询方法及对应装置、设备、计算机存储介质 | |
CN104239511B (zh) | 一种面向MongoDB的用户空间文件系统实现方法 | |
US20170255708A1 (en) | Index structures for graph databases | |
Petrov | Database Internals: A deep dive into how distributed data systems work | |
TWI549009B (zh) | 資料庫管理方法、資料庫管理系統,以及資料庫樹狀結構 | |
Tseng | Mining frequent itemsets in large databases: The hierarchical partitioning approach | |
Kim et al. | A comparative study of log-structured merge-tree-based spatial indexes for big data | |
US11520763B2 (en) | Automated optimization for in-memory data structures of column store databases | |
Davardoost et al. | An innovative model for extracting olap cubes from nosql database based on scalable naïve bayes classifier | |
CN107145601A (zh) | 一种高效的引用关系发现算法 | |
Arora et al. | An algorithm for transformation of data from MySQL to NoSQL (MongoDB) | |
Carter et al. | Nanosecond indexing of graph data with hash maps and VLists | |
Kanojia et al. | IT Infrastructure for Smart City: Issues and Challenges in Migration from Relational to NoSQL Databases |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100000, No. three, No. 235, building three, four district, West cedar garden, Beijing, Haidian District Applicant after: Beijing Digital Language Technology Co., Ltd Address before: No. 235, floor 3, building 3, zone 4, Xishan Creative Park, Haidian District, Beijing 100000 Applicant before: BEIJING LANTU MINGCE TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |