CN106682185B - 防止Mongos集群中的均衡操作失效的方法和装置 - Google Patents

防止Mongos集群中的均衡操作失效的方法和装置 Download PDF

Info

Publication number
CN106682185B
CN106682185B CN201611247377.2A CN201611247377A CN106682185B CN 106682185 B CN106682185 B CN 106682185B CN 201611247377 A CN201611247377 A CN 201611247377A CN 106682185 B CN106682185 B CN 106682185B
Authority
CN
China
Prior art keywords
data
data block
fragment
cluster
mongos
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.)
Expired - Fee Related
Application number
CN201611247377.2A
Other languages
English (en)
Other versions
CN106682185A (zh
Inventor
李丹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201611247377.2A priority Critical patent/CN106682185B/zh
Publication of CN106682185A publication Critical patent/CN106682185A/zh
Priority to PCT/CN2017/117783 priority patent/WO2018121407A1/zh
Application granted granted Critical
Publication of CN106682185B publication Critical patent/CN106682185B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/214Database migration support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2219Large Object storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application

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)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种防止Mongos集群中的均衡操作失效的方法和装置。该方法包括:扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据;对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值;对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。可见,本发明可以有效防止Mongos集群中的均衡操作失效,保证Mongos集群中各分片的数据均衡,提高数据库集群的效率,保障业务的稳定性。

Description

防止Mongos集群中的均衡操作失效的方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种防止Mongos集群中的均衡操作失效的方法和装置。
背景技术
数据库是按照数据结构来组织、存储和管理数据的仓库。随着用户对数据存储和管理的需求,出现各种数据库,例如,Mysql数据库、Oracle数据库、MongoDB数据库等。通常数据存储采用的是主从式数据库集群进行存储,但是,这种存储方式局限于数据库集群中各数据库的存储空间,无法满足数据量的迅速累积。所以,在数据库集群中可以引入Mongos的架构方式。Mongos是一种分布式存储的数据库架构,适合巨量数据的存储。Mongos架构中包括若干个路由节点、若干个分片节点以及若干元数据节点。其中,路由节点用于将业务方的需求指向相应的分片中,元数据中记录所存储的数据在各分片中位置,分片节点用于存储大量的数据。每个分片中又分成若干个数据块(也可称chunck或桶),当用户进行数据查询时,可通过元数据节点中相应数据的存储位置进行相应数据的查询。当面对巨量的数据存储需求时,可以通过增加分片的形式进行整个数据库集群的扩充。
当Mongos架构的数据库进行数据写入的时候,不排除会出现大量数据存储在同一个分片中,而其他分片中的数据量很少的情况,为了避免这种情况出现,Mongos架构中会有一个数据均衡的功能,将存储数据较多的分片中的数据挪出一部分存储到其它相对空闲的分片中,达到所有分片中的数据量均衡的效果。也就是说,当不同分片中的数据量的差距到达一定程度的时候,Mongos就会启动数据均衡器,进行数据的均衡处理,尽量保证每个分片中的数据量一致。例如,有5个分片,每个分片中的最大存储量为10个数据块(桶),其中分片1中的数据已经达到9个数据块的量,而其他4个分片中,都只有4个数据块的数据量,那么数据均衡器就会启动,就将分片1中的4个数据块的数据量分别挪到其它4个分片中,最终使得每个分片中都有5个数据块的数据量。
但是,当基于已经选定的数据分片模型进行大量的数据写入时可能存在某些数据块(称为chunck或桶)的数据量超过数据块的存储空间的大小或单个数据块最大存储记录条数(例如,250000条),而大量这样的数据块是无法由mongos自带均衡机制进行拆分迁移从而导致该分片类似的数据块里数据量持续增长,最终使得分片数据极其不均衡而影响数据库集群的性能,进而影响业务的稳定性。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的防止Mongos集群中的均衡操作失效的方法和相应的装置。
依据本发明的一个方面,提供了一种防止Mongos集群中的均衡操作失效的方法,包括:
扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据;
对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值;
对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;
启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。
可选地,扫描Mongos集群中的各分片中的各数据块包括:
扫描Mongos集群中的所有分片中各数据库和数据表对应各数据块。
可选地,所述判断该数据块中已存储的数据是否达到了预设阈值包括:
判断该数据块中已存储的总数据量大小是否达到了第一预设阈值,或者,该数据块中已存储的记录条数是否达到了第二预设阈值。
可选地,所述在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块包括:
在该当前数据块所在分片中新建一个或多个数据块,将该当前数据块中的部分数据迁移到新建的一个或多个数据块中;
可选地,所述将该当前数据块中的部分数据迁移到新建的一个或多个数据块中包括:
先计算当前数据块中的每条数据的哈希值,并将哈希值按照大小顺序排列;
按照大小排列的哈希值中设置相应个数的节点将哈希值分为多组;
将所述多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块;
对于新建的一个或多个数据块中的每个数据块,将其对应的一组哈希值在当前数据块中的对应数据迁移到该数据块中。
可选地,所述将该数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中包括:
所述将该数据块所在分片中的超过该分片的额定数据块数量的随机的一个或多个数据块的数据迁移到其他的分片中。
可选地,在启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中之后,该方法进一步包括:
将数据已迁移到其他分片的所述一个或多个数据块删除。
可选地,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块之前,该方法进一步包括:
关闭Mongos集群中的均衡操作。
根据本发明的另一方面,提供了一种防止Mongos集群中的均衡操作失效的装置,包括:
数据块扫描单元,适于扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据;对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值;
数据块拆分单元,适于对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。
可选地,所述数据块扫描单元,适于扫描Mongos集群中的所有分片中各数据库和数据表对应各数据块。
可选地,所述数据块扫描单元,适于判断该数据块中已存储的总数据量大小是否达到了第一预设阈值,或者,该数据块中已存储的记录条数是否达到了第二预设阈值。
可选地,所述数据块拆分单元,适于在该当前数据块所在分片中新建一个或多个数据块,将该当前数据块中的部分数据迁移到新建的一个或多个数据块中。
可选地,所述数据块拆分单元,适于先计算当前数据块中的每条数据的哈希值,并将哈希值按照大小顺序排列;按照大小排列的哈希值中设置相应个数的节点将哈希值分为多组;将所述多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块;对于新建的一个或多个数据块中的每个数据块,将其对应的一组哈希值在当前数据块中的对应数据迁移到该数据块中。
可选地,所述数据块拆分单元,适于所述将该数据块所在分片中的超过该分片的额定数据块数量的随机的一个或多个数据块的数据迁移到其他的分片中。
可选地,所述数据块拆分单元,适于在启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中之后,进一步将数据已迁移到其他分片的所述一个或多个数据块删除。
可选地,所述数据块拆分单元,适于在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块之前,进一步关闭Mongos集群中的均衡操作。
根据本发明的技术方案,当Mongos集群中的分片中的数据块的数据达到了预设阈值的情况下,为保证数据均衡有效,首先将该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;然后再启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中,防止了因数据块中的数据超过预设阈值而引起的均衡操作失效。可见,本发明可以有效防止Mongos集群中的均衡操作失效,保证Mongos集群中各分片的数据均衡,提高数据库集群的效率,保障业务的稳定性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种防止Mongos集群中的均衡操作失效的方法的流程示意图;
图2示出了根据本发明一个实施例的一种防止Mongos集群中的均衡操作失效的装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种防止Mongos集群中的均衡操作失效的方法的流程示意图。如图1所示,该方法包括:
步骤S110,扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据。
Mongos集群中的数据存储在各个分片中,且每个分片中的数据都分别存放在分片中的各个数据块中,这里的数据块可以称之为“chunck或桶”。一旦,分片的一个数据块中的数据存储太多,都会引起相应的均衡操作的失效,所以为了防止均衡操作失效的存在,需要扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据。
步骤S120,对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值。
这里的预设阈值可以根据数据块中的数据占有的空间资源的大小来设定,例如、64MB;也可以根据数据块中的数据的总条数来设定,例如,25万条。该设定的预设阈值是判断均很失效的一个临界值,当数据量超过预设阈值后,就可能会引起均衡操作的失效。
步骤S130,对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块。
当判断一个数据块中的数据已经达到预设阈值后,就在数据块所在的分片中,将该数据块拆分成一个或多个数据块,使拆分后的数据块的数据均小于预设阈值,这样就可以防止均衡操作的失效。
步骤S140中,启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。
虽然将数据块中的数据进行了拆分,为了保证各个分片中的数据均衡,还需要启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。因为当前数据块已经被拆分成一个或者多个数据块,拆分后的数据块和该分片中的数据块的地位等同,所以在进行数据迁移的时候,可以将拆分后的数据块迁移到其他的分片中,也可以在该分片中随机选择数据块进行迁移,也就是说,迁移的数据块不一定是拆分出来的数据块。
可见,本发明将该数据超过预设阈值的数据块在所在分片中将其拆分为一个或多个数据块,可以有效防止Mongos集群中的均衡操作失效,保证Mongos集群中各分片的数据均衡,提高数据库集群的效率,保障业务的稳定性。
Mongos集群中的所有分片是用来存储数据,也是以数据库和数据表的形式存储的,所以,在本发明的一个实施例中,步骤S110中的扫描Mongos集群中的各分片中的各数据块包括:扫描Mongos集群中的所有分片中各数据库和数据表对应各数据块,遍历所有的数据库和数据表所对应的数据块,然后进行数据量的判断。
在本发明的一个实施例中,步骤S120中的判断该数据块中已存储的数据是否达到了预设阈值包括:判断该数据块中已存储的总数据量大小是否达到了第一预设阈值,或者,该数据块中已存储的记录条数是否达到了第二预设阈值。
也就是说,可以通过数据块中已存储的数据量大小进行判断,例如,第一预设阈值为64MB,当一个数据块中的数据大小超过64MB,就可以进行拆分数据块的操作。也可以通过数据块中以存储的数据的条数进行判断;例如,第二预设阈值为25万条,当当一个数据块中的数据记录条数超过25万条,就可以进行拆分数据块的操作。
需要说明的是,这里利用该数据块中已存储的总数据量大小判断其是否达到了第一预设阈值以及利用该数据块中已存储的记录条数判断是否达到了第二预设阈值,是本发明的一个实施例,具体的判断依据在本发明中不作具体的限定。
为了保证拆分后的数据块中的数据不会达到预设阈值,可以采取均分当前数据块中的数据的方式,使得拆分后的每个数据块中的数据量大致相同。在本发明的一个实施例中,步骤S130中的在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块包括:在该当前数据块所在分片中新建一个或多个数据块,将该当前数据块中的部分数据迁移到新建的一个或多个数据块中,使得该当前数据块和新建的一个或多个数据块中各数据块的数据量大致相同。例如,当前数据块数据量为30万条,已经超过了预设阈值25万条。在进行当前数据块拆分的时候,在当前数据块所在的分片中再新建1个数据块,将当前数据块中的15万条数据分别迁移到新建的数据块中,使得当前的数据块和新建的数据块的每个数据块中均包括15万条数据。
具体地,为了保证数据的均分,上述的将该当前数据块中的部分数据迁移到新建的一个或多个数据块中包括:
(1)先计算当前数据块中的每条数据的哈希值,并将哈希值按照大小顺序排列。
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。这里为了进行数据的均分,将每条数据对应的哈希值计算出来,然后根据哈希值的大小进行排序,按照排序的顺序,将对应的数据进行均分。
(2)按照大小排列的哈希值中设置相应个数的节点将哈希值分为多组。
例如,总共有999条数据需要进行拆分成3组,那么哈希值排在第333位的是个节点,哈希值排在第666位的是个节点,将所有数据的哈希值进行大小排序后,排在第333位的哈希值是528,排在第666位的哈希值是941,那么小于或等于528的哈希值对应的数据被分到第一组,大于528小于或等于941的哈希值对应的数据被分到第二组,大于941的哈希值对应的数据被分到第三组。
(3)将多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块。
将哈希值分成多组后,把每组对应的哈希值相应的数据分配各当前数据块和新建的一个或多个数据块。
上述例子中,就可以将第一组哈希值对应的数据分配给当前数据块,将第二组哈希值对应的数据分配给新建的数据块1,将第三组哈希值对应的数据分配给新建的数据块2。
(4)对于新建的一个或多个数据块中的每个数据块,将其对应的一组哈希值在当前数据块中的对应数据迁移到该数据块中。
因为哈希值是一个数据唯一且极其紧凑的数值表示形式,每个哈希值都对应一个数据,当将多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块后,再将每个数据块中分配的哈希值相在当前数据库中对应的数据迁移到该数据块中就完成了数据的大致均等拆分。
在本发明的一个实施例中,步骤S140中的将该数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中包括:将该数据块所在分片中的超过该分片的额定数据块数量的随机的一个或多个数据块的数据迁移到其他的分片中。
当前数据块已经被拆分成一个或者多个数据块,拆分后的数据块和该分片中的数据块的地位等同,所以在进行数据迁移的时候,可以将拆分后的数据块迁移到其他的分片中,也可以在该分片中随机选择数据块进行迁移,也就是说,迁移的数据块不一定是拆分出来的数据块。
这里迁移的数据块的数量是根据该分片拆分后的数据块的总数量以及额定数量确定的,例如,当前分片的数据块的额定数量是10个,但是拆分后的数据块的总数量是12个,那么相比较额定数量10,多了2个,就需要将多余的2个进行迁移。
当前数据块所在的分片中的一个或多个数据块已经迁移到其他分片中,所以,在本发明的一个实施例中,在步骤S140中的启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中之后,该方法进一步包括:将数据已迁移到其他分片的一个或多个数据块删除,最终达到各分片的数据均衡。
在本发明的一个实施例中,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块之前,该方法进一步包括:关闭Mongos集群中的均衡操作。
进行当前数据块拆分前一定要将Mongos集群中的均衡操作关闭,如果不进行关闭的话,对Mongos集群的分片的处理时会启动加锁操作,加锁后的数据块是不能随意更改的,就无法完成数据块的拆分操作。所以,Mongos集群中的均衡操作。拆分结束后,在开启均衡操作,将数据块进行自动均衡。
图2示出了根据本发明一个实施例的一种防止Mongos集群中的均衡操作失效的装置的结构示意图。如图2所示,该防止Mongos集群中的均衡操作失效的装置200包括:
数据块扫描单元210,适于扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据;对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值。
Mongos集群中的数据存储在各个分片中,且每个分片中的数据都分别存放在分片中的各个数据块中,这里的数据块可以称之为“桶”。一旦,分片的一个数据块中的数据存储太多,都会引起相应的均衡操作的失效,所以为了防止均衡操作失效的存在,需要扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据。
这里的预设阈值可以根据数据块中的数据占有的空间资源的大小来设定,例如、64MB;也可以根据数据块中的数据的总条数来设定,例如,25万条。该设定的预设阈值是判断均很失效的一个临界值,当数据量超过预设阈值后,就可能会引起均衡操作的失效。
数据块拆分单元220,适于对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。
当判断一个数据块中的数据已经达到预设阈值后,就在数据块所在的分片中,将该数据块拆分成一个或多个数据块,使拆分后的数据块的数据均小于预设阈值,这样就可以防止均衡操作的失效。
虽然将数据块中的数据进行了拆分,为了保证各个分片中的数据均衡,还需要启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中。因为当前数据块已经被拆分成一个或者多个数据块,拆分后的数据块和该分片中的数据块的地位等同,所以在进行数据迁移的时候,可以将拆分后的数据块迁移到其他的分片中,也可以在该分片中随机选择数据块进行迁移,也就是说,迁移的数据块不一定是拆分出来的数据块。
可见,本发明将该数据超过预设阈值的数据块在所在分片中将其拆分为一个或多个数据块,可以有效防止Mongos集群中的均衡操作失效,保证Mongos集群中各分片的数据均衡,提高数据库集群的效率,保障业务的稳定性。
Mongos集群中的所有分片是用来存储数据,也是以数据库和数据表的形式存储的,所以,在本发明的一个实施例中,数据块扫描单元210,适于扫描Mongos集群中的所有分片中各数据库和数据表对应各数据块,遍历所有的数据库和数据表所对应的数据块,然后进行数据量的判断。
在本发明的一个实施例中,数据块扫描单元210,适于判断该数据块中已存储的总数据量大小是否达到了第一预设阈值,或者,该数据块中已存储的记录条数是否达到了第二预设阈值。
也就是说,可以通过数据块中已存储的数据量大小进行判断,例如,第一预设阈值为64MB,当一个数据块中的数据大小超过64MB,就可以进行拆分数据块的操作。也可以通过数据块中以存储的数据的条数进行判断;例如,第二预设阈值为25万条,当当一个数据块中的数据记录条数超过25万条,就可以进行拆分数据块的操作。
需要说明的是,这里利用该数据块中已存储的总数据量大小判断其是否达到了第一预设阈值以及利用该数据块中已存储的记录条数判断是否达到了第二预设阈值,是本发明的一个实施例,具体的判断依据在本发明中不作具体的限定。
为了保证拆分后的数据块中的数据不会达到预设阈值,可以采取均分当前数据块中的数据的方式,使得拆分后的每个数据块中的数据量大致相同。在本发明的一个实施例中,数据块拆分单元220,适于在该当前数据块所在分片中新建一个或多个数据块,将该当前数据块中的部分数据迁移到新建的一个或多个数据块中,使得该当前数据块和新建的一个或多个数据块中各数据块的数据量大致相同。例如,当前数据块数据量为30万条,已经超过了预设阈值25万条。在进行当前数据块拆分的时候,在当前数据块所在的分片中再新建1个数据块,将当前数据块中的15条数据分别迁移到新建的这两个数据块中,使得当前的数据块和新建的数据块的每个数据块中均包括15万条数据。
具体地,为了保证数据的均分,数据块拆分单元220适于:
(1)先计算当前数据块中的每条数据的哈希值,并将哈希值按照大小顺序排列。哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。
哈希值是一段数据唯一且极其紧凑的数值表示形式。这里为了进行数据的均分,将每条数据对应的哈希值计算出来,然后根据哈希值的大小进行排序,按照排序的顺序,将对应的数据进行均分。
(2)按照大小排列的哈希值中设置相应个数的节点将哈希值分为多组。
例如,总共有999条数据需要进行拆分成3组,那么哈希值排在第333位的是个节点,哈希值排在第666位的是个节点,将所有数据的哈希值进行大小排序后,排在第333位的哈希值是528,排在第666位的哈希值是941,那么小于或者等于528的哈希值对应的数据被分到第一组,大于528小于或等于941的哈希值对应的数据被分到第二组,大于941的哈希值对应的数据被分到第三组。
(3)将多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块。
将哈希值分成多组后,把每组对应的哈希值相应的数据分配各当前数据块和新建的一个或多个数据块。上述例子中,就可以将第一组哈希值对应的数据分配给当前数据块,将第二组哈希值对应的数据分配给新建的数据块1,将第三组哈希值对应的数据分配给新建的数据块2。
(4)对于新建的一个或多个数据块中的每个数据块,将其对应的一组哈希值在当前数据块中的对应数据迁移到该数据块中。
因为哈希值是一个数据唯一且极其紧凑的数值表示形式,每个哈希值都对应一个数据,当将多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块后,再将每个数据块中分配的哈希值相在当前数据库中对应的数据迁移到该数据块中就完成了数据的大致均等拆分。
在本发明的一个实施例中,数据块拆分单元220,适于将该数据块所在分片中的超过该分片的额定数据块数量的随机的一个或多个数据块的数据迁移到其他的分片中。
当前数据块已经被拆分成一个或者多个数据块,拆分后的数据块和该分片中的数据块的地位等同,所以在进行数据迁移的时候,可以将拆分后的数据块迁移到其他的分片中,也可以在该分片中随机选择数据块进行迁移,也就是说,迁移的数据块不一定是拆分出来的数据块。
这里迁移的数据块的数量是根据该分片拆分后的数据块的总数量以及额定数量确定的,例如,当前分片的数据块的额定数量是10个,但是拆分后的数据块的总数量是12个,那么相比较额定数量10个数据块,多了2个数据块,就需要将多余的2个数据块迁移到其它分片中。
当前数据块所在的分片中的一个或多个数据块已经迁移到其他分片中,所以,在本发明的一个实施例中,数据块拆分单元220,适于在启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中之后,进一步将数据已迁移到其他分片的一个或多个数据块删除,最终达到各分片的数据均衡。
在本发明的一个实施例中,数据块拆分单元220,适于在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块之前,进一步关闭Mongos集群中的均衡操作
进行当前数据块拆分前一定要将Mongos集群中的均衡操作关闭,如果不进行关闭的话,对Mongos集群的分片的处理时会启动加锁操作,加锁后的数据块是不能随意更改的,就无法完成数据块的拆分操作。所以,Mongos集群中的均衡操作。拆分结束后,在开启均衡操作,将数据块进行自动均衡。
综上所述,根据本发明的技术方案,当Mongos集群中的分片中的数据块的数据达到了预设阈值的情况下,为保证数据均衡有效,首先将该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;然后再启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中,防止了因数据块中的数据超过预设阈值而引起的均衡操作失效。可见,本发明可以有效防止Mongos集群中的均衡操作失效,保证Mongos集群中各分片的数据均衡,提高数据库集群的效率,保障业务的稳定性。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的防止Mongos集群中的均衡操作失效的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (12)

1.一种防止Mongos集群中的均衡操作失效的方法,包括:
扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据;
对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值;
对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;
启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中;
所述在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块包括:
在该当前数据块所在分片中新建一个或多个数据块,将该当前数据块中的部分数据迁移到新建的一个或多个数据块中;
所述将该当前数据块中的部分数据迁移到新建的一个或多个数据块中包括:
先计算当前数据块中的每条数据的哈希值,并将哈希值按照大小顺序排列;
按照大小排列的哈希值中设置相应个数的节点将哈希值分为多组;
将所述多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块;
对于新建的一个或多个数据块中的每个数据块,将其对应的一组哈希值在当前数据块中的对应数据迁移到该数据块中。
2.如权利要求1所述的方法,其中,扫描Mongos集群中的各分片中的各数据块包括:
扫描Mongos集群中的所有分片中各数据库和数据表对应各数据块。
3.如权利要求1所述的方法,其中,所述判断该数据块中已存储的数据是否达到了预设阈值包括:
判断该数据块中已存储的总数据量大小是否达到了第一预设阈值,或者,该数据块中已存储的记录条数是否达到了第二预设阈值。
4.如权利要求1所述的方法,其中,所述将该数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中包括:
所述将该数据块所在分片中的超过该分片的额定数据块数量的随机的一个或多个数据块的数据迁移到其他的分片中。
5.如权利要求1所述的方法,其中,在启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中之后,该方法进一步包括:
将数据已迁移到其他分片的所述一个或多个数据块删除。
6.如权利要求1所述的方法,其中,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块之前,该方法进一步包括:
关闭Mongos集群中的均衡操作。
7.一种防止Mongos集群中的均衡操作失效的装置,包括:
数据块扫描单元,适于扫描Mongos集群中的各分片中的各数据块,查看数据块中的已存储数据;对于扫描到的数据块,判断该数据块中已存储的数据是否达到了预设阈值;
数据块拆分单元,适于对于已存储数据达到了预设阈值的一个当前数据块,在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块;启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中;
所述数据块拆分单元,适于在该当前数据块所在分片中新建一个或多个数据块,将该当前数据块中的部分数据迁移到新建的一个或多个数据块中;
所述数据块拆分单元,适于先计算当前数据块中的每条数据的哈希值,并将哈希值按照大小顺序排列;按照大小排列的哈希值中设置相应个数的节点将哈希值分为多组;将所述多组哈希值一一对应地分配给当前数据块和新建的一个或多个数据块;对于新建的一个或多个数据块中的每个数据块,将其对应的一组哈希值在当前数据块中的对应数据迁移到该数据块中。
8.如权利要求7所述的装置,其中,
所述数据块扫描单元,适于扫描Mongos集群中的所有分片中各数据库和数据表对应各数据块。
9.如权利要求7所述的装置,其中,
所述数据块扫描单元,适于判断该数据块中已存储的总数据量大小是否达到了第一预设阈值,或者,该数据块中已存储的记录条数是否达到了第二预设阈值。
10.如权利要求7所述的装置,其中,
所述数据块拆分单元,适于所述将该数据块所在分片中的超过该分片的额定数据块数量的随机的一个或多个数据块的数据迁移到其他的分片中。
11.如权利要求7所述的装置,其中,
所述数据块拆分单元,适于在启动Mongos集群中的均衡操作,将当前数据块所在分片中的一个或多个数据块的数据迁移到其他的分片中之后,进一步将数据已迁移到其他分片的所述一个或多个数据块删除。
12.如权利要求7所述的装置,其中,
所述数据块拆分单元,适于在该当前数据块所在分片中将该当前数据块拆分为一个或多个数据块之前,进一步关闭Mongos集群中的均衡操作。
CN201611247377.2A 2016-12-29 2016-12-29 防止Mongos集群中的均衡操作失效的方法和装置 Expired - Fee Related CN106682185B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201611247377.2A CN106682185B (zh) 2016-12-29 2016-12-29 防止Mongos集群中的均衡操作失效的方法和装置
PCT/CN2017/117783 WO2018121407A1 (zh) 2016-12-29 2017-12-21 防止Mongos集群中的均衡操作失效的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611247377.2A CN106682185B (zh) 2016-12-29 2016-12-29 防止Mongos集群中的均衡操作失效的方法和装置

Publications (2)

Publication Number Publication Date
CN106682185A CN106682185A (zh) 2017-05-17
CN106682185B true CN106682185B (zh) 2019-05-24

Family

ID=58873062

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611247377.2A Expired - Fee Related CN106682185B (zh) 2016-12-29 2016-12-29 防止Mongos集群中的均衡操作失效的方法和装置

Country Status (2)

Country Link
CN (1) CN106682185B (zh)
WO (1) WO2018121407A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106682185B (zh) * 2016-12-29 2019-05-24 北京奇虎科技有限公司 防止Mongos集群中的均衡操作失效的方法和装置
CN108932104B (zh) * 2017-05-25 2021-06-25 腾讯科技(深圳)有限公司 一种数据处理方法、装置及处理服务器
CN109213774B (zh) * 2018-08-01 2024-03-08 平安科技(深圳)有限公司 数据的存储方法及装置、存储介质、终端
CN111309801A (zh) * 2018-12-11 2020-06-19 航天信息股份有限公司 一种联盟链分片的方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103984607A (zh) * 2013-02-08 2014-08-13 华为技术有限公司 分布式存储的方法、装置和系统
US8862847B2 (en) * 2013-02-08 2014-10-14 Huawei Technologies Co., Ltd. Distributed storage method, apparatus, and system for reducing a data loss that may result from a single-point failure
CN104883394A (zh) * 2015-04-28 2015-09-02 浙江大学 一种均衡服务器负载的方法和系统
CN105389367B (zh) * 2015-11-12 2018-08-24 国网江苏省电力有限公司扬州供电分公司 基于Mongo数据库的电网图形多时态多级分布式存储方法
CN105573680A (zh) * 2015-12-25 2016-05-11 北京奇虎科技有限公司 副本数据的存储方法及装置
CN106254516B (zh) * 2016-08-31 2020-02-28 北京小米移动软件有限公司 负载均衡方法及装置
CN106682185B (zh) * 2016-12-29 2019-05-24 北京奇虎科技有限公司 防止Mongos集群中的均衡操作失效的方法和装置

Also Published As

Publication number Publication date
WO2018121407A1 (zh) 2018-07-05
CN106682185A (zh) 2017-05-17

Similar Documents

Publication Publication Date Title
CN106682185B (zh) 防止Mongos集群中的均衡操作失效的方法和装置
Fan et al. Cuckoo filter: Practically better than bloom
US8666955B2 (en) Data management method and data management system
CN107102819B (zh) 向固态硬盘写入数据的方法及设备
CN103559443B (zh) 多核设备的病毒扫描方法和装置
CN108287660A (zh) 数据存储方法和设备
CN107807797A (zh) 数据写入的方法、装置及服务器
CN110427364A (zh) 一种数据处理方法、装置、电子设备及存储介质
CN107085613B (zh) 入库文件的过滤方法和装置
CN105528454A (zh) 日志处理方法及分布式集群的计算设备
CN104462483A (zh) 数据同步方法、装置及系统
CN111125065A (zh) 可视化数据同步方法、系统、终端和计算机可读存储介质
CN108399151A (zh) 数据比对系统和方法
CN103377251B (zh) 用于hdfs的文件比较方法及装置
CN105045895B (zh) 一种在指定页面上显示推广内容的方法和装置
CN104580427A (zh) 一种分布式存储系统中的主从平衡方法和装置
CN108573172B (zh) 一种数据校验、存储方法及装置
US11604803B2 (en) Net change mirroring optimization across transactions in replication environment
CN106503010B (zh) 一种数据库更改写入分区的方法及装置
CN106682021A (zh) 数据库迁移方法及装置
CN103390288A (zh) 三维渲染文件批量拆分渲染层处理系统
US10686879B2 (en) Replication with adjustable consistency levels
KR20120016747A (ko) 분산파일 시스템에서의 중복 제거 장치 및 방법
CN105389394A (zh) 基于多个数据库集群的数据请求处理方法及装置
CN108197323A (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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190524