CN114357083A - 一种基于雪花id的可扩展分库分表方法 - Google Patents
一种基于雪花id的可扩展分库分表方法 Download PDFInfo
- Publication number
- CN114357083A CN114357083A CN202210022527.9A CN202210022527A CN114357083A CN 114357083 A CN114357083 A CN 114357083A CN 202210022527 A CN202210022527 A CN 202210022527A CN 114357083 A CN114357083 A CN 114357083A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- storage
- snowflake
- virtual bucket
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于雪花ID的可扩展分库分表方法,该方法应用于数据库,涉及数据库技术领域。数据库将目标数据的雪花ID按照预设规则进行切片,得到目标数据的目标片索引;根据目标片索引在片虚拟桶中确定目标数据的目标存储服务器编号;片虚拟桶保存有数据的片索引与数据的存储服务器编号之间的对应关系;根据雪花ID在虚拟桶中确定目标数据的目标存储表编号;虚拟桶保存有数据的雪花ID与数据的存储表编号之间的对应关系;根据目标存储服务器编号和目标存储表编号确定目标数据的存储位置。解决了现有技术中数据库在数据存储过程中,冷热分离明显的问题,可以将数据合理且灵活的分布到所有存储服务器上,充分利用存储服务器资源。
Description
技术领域
本发明涉及数据库技术领域,具体涉及一种基于雪花ID的可扩展分库分表方法。
背景技术
当前企业运营的运营数据通常保存在云端数据库,随着时间的推移和业务的发展,数据库存储的运营数据会不断增长,若使用单个数据库进行数据的存储管理,会出现容量瓶颈、性能瓶颈等问题。数据库的分库分表方法正是为了应对以上问题而产生的。数据库的分库分表方法利用一定的分库分表规则将原本存储于一个库(存储服务器)中的数据分块存储到多个库中,将原本存储于一个表上的数据分块存储到多个表上。
而现有技术中的分库分表存在一定缺陷,数据存储过程中会出现明显的冷热数据分离问题,且数据库的扩展性较差。
发明内容
本发明实施例的目的在于提供一种基于雪花ID的可扩展分库分表方法,用于解决现有技术中数据库在数据存储过程中,冷热分离明显的问题,将数据合理且灵活的分布到所有存储服务器上,充分利用存储服务器资源。
具体技术方案如下:
在本发明实施提供了一种基于雪花身份标识号ID的可扩展分库分表方法,所述方法应用于数据库,所述方法包括:
将目标数据的雪花身份标识号ID按照预设规则进行切片,得到所述目标数据的目标片索引;其中,雪花ID是根据数据的存储时间生成的,指向该数据的存储位置的全局唯一性ID;
根据所述目标片索引在片虚拟桶中确定所述目标数据的目标存储服务器编号;所述片虚拟桶保存有数据的片索引与数据的存储服务器编号之间的对应关系;
根据所述雪花ID在虚拟桶中确定所述目标数据的目标存储表编号;所述虚拟桶保存有数据的雪花ID与数据的存储表编号之间的对应关系;
根据所述目标存储服务器编号和所述目标存储表编号确定所述目标数据的存储位置。
可选地,将目标数据的雪花ID按照预设规则进行切片,得到所述目标数据的目标片索引,包括:
令数据的雪花ID为a,片索引b,预设片大小为c,则根据预设规则b=(a+c-1)/c,得到所述目标数据的目标片索引。
可选地,根据所述目标片索引在片虚拟桶中确定所述目标数据的目标存储服务器编号,包括:
对所述目标片索引取模1024,得到第一取模值;
根据所述第一取模值和各个片虚拟桶的预设取模值范围,确定所述第一取模值对应的片虚拟桶,作为目标片虚拟桶;
根据所述目标片虚拟桶确定所述目标数据的目标存储服务器编号。
可选地,在根据所述目标片索引在片虚拟桶中确定所述目标数据的目标存储服务器编号之前,所述方法还包括:
当所述数据库增加新的存储服务器时,生成该新的存储服务器对应的片虚拟桶,作为新增片虚拟桶;
调整所述数据库当前的所有片虚拟桶的预设取模值范围;
将所述新增片虚拟桶的预设取模值范围内对应的数据,迁移到该新的存储服务器中。
可选地,根据所述雪花ID在虚拟桶中确定所述目标数据的目标存储表编号,包括:
对所述雪花ID取模9999,得到第二取模值;
对所述第二取模值取模1024,得到第三取模值;
根据所述第三取模值和各个虚拟桶的预设取模值范围,确定所述第三取模值对应的虚拟桶,作为目标虚拟桶;
根据所述目标虚拟桶确定所述目标数据的目标存储表编号。
可选地,在根据所述雪花ID在虚拟桶中确定所述目标数据的目标存储表编号之前,所述方法还包括:
当所述数据库的任一存储服务器添加新的存储表时,生成该新的存储表对应的虚拟桶,作为新增虚拟桶;
调整该存储服务器当前的所有虚拟桶的预设取模值范围;
将所述新增虚拟桶的预设取模值范围内对应的数据,迁移到该新的存储表中。
可选地,根据所述目标存储服务器编号和所述目标存储表编号确定所述目标数据的存储位置,包括:
查询预设规则表;所述预设规则表保存有数据迁移前的存储服务器编号与数据迁移后的存储服务器编号之间的对应关系,以及,数据迁移前的存储表编号与数据迁移后的存储表编号之间的对应关系;
若所述预设规则表中,存储有所述目标存储服务器编号和所述目标存储表编号,则,根据所述目标存储服务器编号和所述目标存储表编号对应的存储服务器编号和存储表编号确定所述目标数据的存储位置;
若所述预设规则表中,未存储所述目标存储服务器编号和所述目标存储表编号,则,根据所述目标存储服务器编号和所述目标存储表编号确定所述目标数据的存储位置。
本发明实施例提供了一种基于雪花ID的可扩展分库分表方法,该方法应用于数据库,通过将目标数据的雪花ID按照预设规则进行切片,得到目标数据的目标片索引;雪花ID为数据的存储时间生成的,指向该数据存储位置的唯一ID;根据目标片索引在片虚拟桶中确定目标数据的存储服务器编号;片虚拟桶保存有数据的片索引与数据的存储服务器编号之间的对应关系;根据雪花ID在虚拟桶中确定目标数据的存储表编号;虚拟桶保存有数据的雪花ID与数据的存储表编号之间的对应关系;根据存储服务器编号和存储表编号确定目标数据的存储位置。解决了现有技术中数据库在数据存储过程中,冷热分离明显的问题,可以将数据合理且灵活的分布到所有存储服务器上,充分利用存储服务器资源。
附图说明
下面结合附图对本发明作进一步的说明。
图1为本发明实施例提供的一种基于雪花ID的可扩展分库分表方法的流程图;
图2为本发明实施例提供的另一种基于雪花ID的可扩展分库分表方法的流程图;
图3为本发明实施例提供的另一种基于雪花ID的可扩展分库分表方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种基于雪花ID的可扩展分库分表方法,应用于数据库。参见图1,图1为本发明实施例提供的一种基于雪花ID的可扩展分库分表方法的流程图,该方法可以包括以下步骤:
S101,将目标数据的雪花ID按照预设规则进行切片,得到目标数据的目标片索引。
S102,根据目标片索引在片虚拟桶中确定目标数据的目标存储服务器编号。
S103,根据雪花ID在虚拟桶中确定目标数据的目标存储表编号。
S104,根据目标存储服务器编号和目标存储表编号确定目标数据的存储位置。
雪花ID是根据数据的存储时间生成的,指向该数据的存储位置的全局唯一性ID。片虚拟桶保存有数据的片索引与数据的存储服务器编号之间的对应关系。虚拟桶保存有数据的雪花ID与数据的存储表编号之间的对应关系。
基于本发明实施例提供的基于雪花ID的可扩展分库分表方法,解决了现有技术中数据库在数据存储过程中,冷热分离明显的问题,可以将数据合理且灵活的分布到所有存储服务器上,充分利用存储服务器资源。
一种实现方式中,数据库可以在数据存储时使用雪花ID生成算法为数据生成雪花ID,雪花ID是64位的Long类型的ID,有着全局唯一性和有序递增的特点。最高位是符号位,因为生成的ID总是正数,最高位始终为0。41位的时间序列,精确到毫秒级,41位的长度可以使用69年,时间位还可以根据时间进行排序。10位的机器标识,10位的长度最多支持部署1024个节点,即最多支持部署1024个服务器。12位的计数序列号,序列号即一系列的自增ID,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号,保证雪花ID的全局唯一性。
在一个实施例中,步骤S101具体为:
令数据的雪花ID为a,片索引b,预设片大小为c,则根据预设规则b=(a+c-1)/c,得到目标数据的目标片索引。
一种实现方式中,预设片大小可以由技术人员根据实际情况进行设定,不做限定。例如,预设片大小为10000,假设a=1,则b=1,假设a=5020001,则b=503。
在一个实施例中,步骤S102包括:
步骤一,对目标片索引取模1024,得到第一取模值。
步骤二,根据第一取模值和各个片虚拟桶的预设取模值范围,确定第一取模值对应的片虚拟桶,作为目标片虚拟桶。
步骤三,根据目标片虚拟桶确定目标数据的目标存储服务器编号。
一种实现方式中,技术人员可以根据业务量的多少,部署相应数量的存储服务器,进而确定片虚拟桶的数量,然后设置每一个片虚拟桶的预设取模值范围,每一个片虚拟桶的取模值范围可以设置为0-1023的任一范围,且各片虚拟桶的取模值范围两两不重叠。例如,数据库当前存储服务器数量为2,则可以设置两个片虚拟桶,片虚拟桶1取模值范围可以为0-499对应存储服务器1,片虚拟桶2取模值范围可以为500-1023对应存储服务器2。
在一个实施例中,参见图2,在图1的基础上,该方法还可以包括以下步骤:
S105,当数据库增加新的存储服务器时,生成该新的存储服务器对应的片虚拟桶,作为新增片虚拟桶。
S106,调整数据库当前的所有片虚拟桶的预设取模值范围。
S107,将新增片虚拟桶的预设取模值范围内对应的数据,迁移到该新的存储服务器中。
一种实现方式中,通过添加片虚拟桶解决了现有技术扩展性差问题,虽然哈希Hash取模,取模值不可更改,但是可以增加片虚拟桶,调整片虚拟桶对应的取模值范围,从而实现了对存储服务器的扩展。例如,当业务数据量较小时,数据库使用一台存储服务器a进行数据存储,则可以设置一个片虚拟桶,该片虚拟桶的取模值范围可以设置为0-1023;当业务数据量增加,存储服务器a无法满足业务存储需求,数据库可以增加存储服务器b,并调整片虚拟桶的取模值范围,将存储服务器a对应的片虚拟桶a的取模值范围调整为0-499,对存储服务器b对应的片虚拟桶b取模值调整范围为500-1023;当业务数据量再次增加,可以使用上述相同的方法进行存储服务器的扩展。
在一个实施例中,步骤S103包括:
步骤一,对雪花ID取模9999,得到第二取模值。
步骤二,对第二取模值取模1024,得到第三取模值。
步骤三,根据第三取模值和各个虚拟桶的预设取模值范围,确定第三取模值对应的虚拟桶,作为目标虚拟桶。
步骤四,根据目标虚拟桶确定目标数据的目标存储表编号。
一种实现方式中,通过对雪花ID进行两次取模,使数据可以合理且均匀地分布到所有存储表中。
在一个实施例中,参见图3,在图2的基础上,该方法可以包括以下步骤:
S108,当数据库的任一存储服务器添加新的存储表时,生成该新的存储表对应的虚拟桶,作为新增虚拟桶。
S109,调整该服务器当前的所有虚拟桶的预设取模值范围。
S1010,将新增虚拟桶的预设取模值范围内对应的数据,迁移到该新的存储表中。
一种实现方式中,通过添加虚拟桶解决了现有技术扩展性差问题,虽然Hash取模,取模值不可更改,但是可以增加虚拟桶,调整虚拟桶对应的取模值范围,从而实现了,对存储表的扩展。
在一个实施例中,在步骤S104包括:
步骤一,查询预设规则表。
步骤二,若预设规则表中,存储有目标存储服务器编号和目标存储表编号,则,根据目标存储服务器编号和目标存储表编号对应的存储服务器编号和存储表编号确定目标数据的存储位置。
步骤三,若预设规则表中,未存储目标存储服务器编号和目标存储表编号,则,根据目标存储服务器编号和目标存储表编号确定目标数据的存储位置。
预设规则表保存有数据迁移前的存储服务器编号与数据迁移后的存储服务器编号之间的对应关系,以及,数据迁移前的存储表编号与数据迁移后的存储表编号之间的对应关系。
一种实现方式中,为了使用户数据存储更加灵活,添加自定义存储功能,可以为某一个用户设置其存储服务器位置及存储表位置,即可以将该用户的数据进行迁移。通过预设规则表保存数据迁移前后服务器之间的对应关系,以及存储表之间的对应关系,根据预设规则表可以在不修改数据的雪花ID的情况下,用户依然可以通过该数据的雪花ID,访问该数据的新的存储位置。
例如:用户1的数据1存储在数据库中,具体位置为存储服务器3的存储表20中。当存储服务器3的性能无法满足用户1的业务需求时,则可以将用户1的数据1迁移到性能更好的服务器1中,具体位置为存储服务器1的存储表10中。并在预设规则表中记录存储服务器3的存储表20与存储服务器1的存储表10之间的对应关系。当用户1访问数据1时,数据库根据数据1的雪花ID确定存储位置为存储服务器3的存储表20,然后,查询预设规则表,得到数据1的实际存储位置为存储服务器1的存储表10,即可访问存储服务器1的存储表10访问该数据。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (7)
1.一种基于雪花ID的可扩展分库分表方法,其特征在于,所述方法应用于数据库,所述方法包括:
将目标数据的雪花身份标识号ID按照预设规则进行切片,得到所述目标数据的目标片索引;其中,雪花ID是根据数据的存储时间生成的,指向该数据的存储位置的全局唯一性ID;
根据所述目标片索引在片虚拟桶中确定所述目标数据的目标存储服务器编号;所述片虚拟桶保存有数据的片索引与数据的存储服务器编号之间的对应关系;
根据所述雪花ID在虚拟桶中确定所述目标数据的目标存储表编号;所述虚拟桶保存有数据的雪花ID与数据的存储表编号之间的对应关系;
根据所述目标存储服务器编号和所述目标存储表编号确定所述目标数据的存储位置。
2.根据权利要求1所述的一种基于雪花ID的可扩展分库分表方法,其特征在于,将目标数据的雪花ID按照预设规则进行切片,得到所述目标数据的目标片索引,包括:
令数据的雪花ID为a,片索引b,预设片大小为c,则根据预设规则b=(a+c-1)/c,得到所述目标数据的目标片索引。
3.根据权利要求2所述的一种基于雪花ID的可扩展分库分表方法,其特征在于,根据所述目标片索引在片虚拟桶中确定所述目标数据的目标存储服务器编号,包括:
对所述目标片索引取模1024,得到第一取模值;
根据所述第一取模值和各个片虚拟桶的预设取模值范围,确定所述第一取模值对应的片虚拟桶,作为目标片虚拟桶;
根据所述目标片虚拟桶确定所述目标数据的目标存储服务器编号。
4.根据权利要求3所述的一种基于雪花ID的可扩展分库分表方法,其特征在于,在根据所述目标片索引在片虚拟桶中确定所述目标数据的目标存储服务器编号之前,所述方法还包括:
当所述数据库增加新的存储服务器时,生成该新的存储服务器对应的片虚拟桶,作为新增片虚拟桶;
调整所述数据库当前的所有片虚拟桶的预设取模值范围;
将所述新增片虚拟桶的预设取模值范围内对应的数据,迁移到该新的存储服务器中。
5.根据权利要求4所述的一种基于雪花ID的可扩展分库分表方法,其特征在于,根据所述雪花ID在虚拟桶中确定所述目标数据的目标存储表编号,包括:
对所述雪花ID取模9999,得到第二取模值;
对所述第二取模值取模1024,得到第三取模值;
根据所述第三取模值和各个虚拟桶的预设取模值范围,确定所述第三取模值对应的虚拟桶,作为目标虚拟桶;
根据所述目标虚拟桶确定所述目标数据的目标存储表编号。
6.根据权利要求5所述的一种基于雪花ID的可扩展分库分表方法,其特征在于,在根据所述雪花ID在虚拟桶中确定所述目标数据的目标存储表编号之前,所述方法还包括:
当所述数据库的任一存储服务器添加新的存储表时,生成该新的存储表对应的虚拟桶,作为新增虚拟桶;
调整该存储服务器当前的所有虚拟桶的预设取模值范围;
将所述新增虚拟桶的预设取模值范围内对应的数据,迁移到该新的存储表中。
7.根据权利要求1所述的一种基于雪花ID的可扩展分库分表方法,其特征在于,根据所述目标存储服务器编号和所述目标存储表编号确定所述目标数据的存储位置,包括:
查询预设规则表;所述预设规则表保存有数据迁移前的存储服务器编号与数据迁移后的存储服务器编号之间的对应关系,以及,数据迁移前的存储表编号与数据迁移后的存储表编号之间的对应关系;
若所述预设规则表中,存储有所述目标存储服务器编号和所述目标存储表编号,则,根据所述目标存储服务器编号和所述目标存储表编号对应的存储服务器编号和存储表编号确定所述目标数据的存储位置;
若所述预设规则表中,未存储所述目标存储服务器编号和所述目标存储表编号,则,根据所述目标存储服务器编号和所述目标存储表编号确定所述目标数据的存储位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210022527.9A CN114357083A (zh) | 2022-01-10 | 2022-01-10 | 一种基于雪花id的可扩展分库分表方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210022527.9A CN114357083A (zh) | 2022-01-10 | 2022-01-10 | 一种基于雪花id的可扩展分库分表方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114357083A true CN114357083A (zh) | 2022-04-15 |
Family
ID=81109889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210022527.9A Pending CN114357083A (zh) | 2022-01-10 | 2022-01-10 | 一种基于雪花id的可扩展分库分表方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114357083A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116610676A (zh) * | 2023-05-25 | 2023-08-18 | 中电金信软件(上海)有限公司 | 一种分布式系统中标识的生成方法、装置、设备及介质 |
-
2022
- 2022-01-10 CN CN202210022527.9A patent/CN114357083A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116610676A (zh) * | 2023-05-25 | 2023-08-18 | 中电金信软件(上海)有限公司 | 一种分布式系统中标识的生成方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10467245B2 (en) | System and methods for mapping and searching objects in multidimensional space | |
CN109634932B (zh) | 一种智能合约存储方法及存储系统 | |
CN110489059B (zh) | 数据集群存储的方法、装置及计算机设备 | |
CN101464894B (zh) | 数据查询方法和系统 | |
EP1589691B1 (en) | Method, system and apparatus for managing computer identity | |
CN108040136B (zh) | 一种ip资源管理方法及系统 | |
CN104765749A (zh) | 一种数据存储方法及装置 | |
CN110727738B (zh) | 基于数据分片的全局路由系统、电子设备及存储介质 | |
CN108874803A (zh) | 数据存储方法、装置及存储介质 | |
CN105045762A (zh) | 一种配置文件的管理方法及装置 | |
CN109241056B (zh) | 一种用于分布式系统的数字id生成系统 | |
CN114357083A (zh) | 一种基于雪花id的可扩展分库分表方法 | |
CN101419600A (zh) | 基于面向对象文件系统的数据副本映射方法及装置 | |
CN109241057B (zh) | 一种用于分布式系统的数字id生成方法 | |
CN114745275A (zh) | 云服务环境中的节点更新方法、装置和计算机设备 | |
US7603377B2 (en) | Method and data structure for indexed storage of hierarchically interrelated information in a relational database | |
CN104461736A (zh) | 资源分配与搜索方法、资源分配与搜索系统和云服务器 | |
US6996577B1 (en) | Method and system for automatically grouping objects in a directory system based on their access patterns | |
CN104618414A (zh) | 一种分布式服务的实现方法、服务代理装置及分布式系统 | |
CN113055448B (zh) | 一种元数据管理方法及装置 | |
CN116303343A (zh) | 数据分片方法、装置、电子设备及存储介质 | |
CN113542013B (zh) | 虚拟化网络功能管理消息分配方法、装置及设备 | |
CN104391931A (zh) | 一种云计算中海量数据高效索引方法 | |
CN113986545A (zh) | 用户与角色关联方法及装置 | |
CN112965935A (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 |