CN105138676B - 基于高级语言并发聚合计算的分库分表merge查询方法 - Google Patents

基于高级语言并发聚合计算的分库分表merge查询方法 Download PDF

Info

Publication number
CN105138676B
CN105138676B CN201510567753.5A CN201510567753A CN105138676B CN 105138676 B CN105138676 B CN 105138676B CN 201510567753 A CN201510567753 A CN 201510567753A CN 105138676 B CN105138676 B CN 105138676B
Authority
CN
China
Prior art keywords
point storehouse
storehouse
technologies
point
divided
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.)
Active
Application number
CN201510567753.5A
Other languages
English (en)
Other versions
CN105138676A (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.)
Polytron Technologies Inc
Original Assignee
Zhejiang Weirong Electronic 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 Zhejiang Weirong Electronic Co Ltd filed Critical Zhejiang Weirong Electronic Co Ltd
Priority to CN201510567753.5A priority Critical patent/CN105138676B/zh
Publication of CN105138676A publication Critical patent/CN105138676A/zh
Application granted granted Critical
Publication of CN105138676B publication Critical patent/CN105138676B/zh
Active 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Abstract

本发明公开了一种基于高级语言并发聚合计算的分库分表merge查询方法,该方法首先通过扩展Spring template技术解决关系数据库分库分表的问题。利用ThreadLocal来保证并发访问的分库键值的安全性。其次利用CompletableFuture技术来异步的、非阻塞的查询各分库和分表;最后使用stream技术来聚合所有的查询结果,形成最终结果返回给客户端。既利用了传统关系数据的强大数据分析能力,又使用了最新的stream技术将中间结果reduce成最终结果。既保留了传统关系数据库的稳定性和强大的功能,又给传统数据库扩展了最新的MapReduce技术。

Description

基于高级语言并发聚合计算的分库分表merge查询方法
技术领域
本发明涉及一种在传统关系型数据库分库分表基础上进行SQL merge查询的方法,具体涉及一种基于高级语言并发聚合计算的分库分表merge查询方法,属于信息技术领域。
背景技术
随着互联网技术和物联网的发展,很多传统行业投入到了互联网中来,产生了大量的“互联网+”的需求,这些需求很多是基于大数据的。而目前流行的互联网大数据解决方案,是基于分布式数据库和分布式的MapReduce方案的。
分布式数据库和分布式MapReduce解决方案是当今非常流行的大数据计算框架,具有计算能力强、容错性和数据可用性强、可扩展性强等特点。
然而,分布式数据库和分布式MapReduce解决方案也有如下缺点:
1.由于是新技术,还没有统一的标准,那么,对于特定问题的处理需要用户进一步编程解决。不存在像关系数据库那么成熟的SQL标准。
2.分布式数据库的管理不成熟,管理方面的人才缺乏。不像关系数据库的管理那么成熟,管理人才也多。
3.继续使用关系数据库,对于客户来说,有着利旧方面的考虑。很多用户已经在关系数据库上投入了很大人力物力,希望能够将这些人力物力有效的利用起来,而目前全部转向分布式数据库和分布式MapReduce方案,则不利于利旧。
4.很多项目,是在进行持续集成和持续交付,一开始,在数据量不是很多的时候,选择了关系数据库;随着用户业务的不断增大,数据量也不断增大。这时候考虑的大数据解决方案,仍然希望持续集成、平滑交付。直接换分布式数据库和分布式MapReduce方案,则存在巨大的升级交付风险。
图2是Hadoop系统的MapReduce框架。MapReduce任务执行的一般流程是:
1.Mapper任务从HDFS或其他分布式数据库上读取数据块(split)。
2.每个Mapper任务调用map函数,对每一个数据块进行处理,处理的结果写入缓存或磁盘。
3.Mapper执行完之后,数据在本地进行排序和合并(有可能经过本地的combine)。
4.经过Shuffle阶段,每个节点把本地数据发送给对应的Reducer所在的节点。
5.在Reducer本地进行排序和合并。
6.Reducer处理本地的数据,并将结果写入HDFS。
从上面的执行流程来看,MapReduce解决方案是一个全新的数据处理方案,在处理过程中,要么完全不用传统的关系数据库,要么用到也只是简单的从数据库里取出原始的数据,不能最大限度的利用SQL标准;其次,不管是MapReduce工具Hadoop,还是分布式数据库hbase等,对于开发来说,都是全新的技术,有相当的学习曲线;最后,分布式数据库hbase对于用户来说,也是全新的技术,用户不像关系数据库那样,有成熟的维护机制和人员。
发明内容
本发明的目的是在使用传统关系数据库做分库分表来存储大数据的基础上,利用算法将查询Map到每一个分库和分表,然后利用关系数据库的强大SQL功能查询出每一个分库和每一个分表的结果,最后利用高级语言的聚合计算技术,把分库分表结果聚合出一个最终结果。
为了使得传统数据库能够存储大数据,利用关系数据库的分库分表来存储大数据,本发明在Spring template技术的基础上,实现了分库分表的增删改查。
为了实现分库分表后对全部的分库分表,或者部分的分库分表进行SQL merge查询,本发明在利用强大的SQL查询的基础上,使用异步的、非阻塞的分库分表SQL查询,然后将所有的查询结果,使用高级语言的stream技术,聚合起来,形成最终结果。
本发明提出了一种使用高级语言stream技术聚合分库分表的merge查询的方法,其步骤为:
(1)客户端通过代理服务子模块调用dao层方法来查询分库分表数据;
(2)代理服务子模块的处理单元ProxyHandler通过代理技术接收到查询请求,调用分库分表选择子模块,解析出本次查询涉及到的分库和分表,这种解析包括多个可扩展分库解析算法和多个可扩展的分表解析算法,默认实现了根据ID(机构ID或其他ID)的求余算法、根据月份的分库算法、根据日期的分表算法和根据ID(机构ID或其他ID)的求余算法;
(3)代理服务子模块的处理单元ProxyHandler根据分库和分表结果,利用Java高级语言的异步并发特性CompletableFuture,去调用实际的dao类对象并发查询所有的分库和分表;
(4)所有的分库和分表,都调用dao类对象方法,在调用该dao类方法的过程中,通过AOP技术触发调用了分库分表子模块,通过AOP技术实现的拦截器去拦截该方法,以获取步骤2中所得到的分库分表参数。
(5)分库分表子模块的拦截器获取到分库分表参数以后,通过ThreadLocal技术保存分库键值和分表键值,ThreadLocal技术是一个线程安全的数据存储技术,保证每一个调用dao类方法的线程,都有自己的分库键值和分表键值。
(6)分库分表子模块的拦截器最后真正调dao类对象方法,dao类方法是通过spring jdbc template技术实现的,spring jdbc template从ThreadLocal对象里获取到该分库键值和分表键值精确定位分库分表,获取查询结果。
(7)代理服务子模块调用分库分表查询结果并发聚合子模块将所有的CompletableFuture压入到Stream中,使用并发的stream聚合技术,将所有分库分表查询结果聚合,获取最终的查询结果;
(8)代理服务子模块将最终结果返回给客户端;
(9)如果是分页查询,本发明在查询总记录数的时候,会将每个分表的查询记录数保存在缓存,在查询分页记录的时候,就根据每个分表的记录数确定该分页记录在哪个分表上,然后直接去该分表上查询结果;
(10)整个过程,客户端就像调用一个普通的dao方法一样,没有任何使用上的复杂度。
所述框架既利用了关系数据库强大的SQL查询功能,又通过高级语言的聚合算法,将分散的查询结果聚合成最终结果。
通过高效的算法,快速的确定本次查询所涉及到的分库和分表,然后通过异步的、非阻塞的算法去查询每一个分库和分表。
然后,将查询结果汇聚到stream里,通过stream的并发reduce算法,迅速的获得最终结果。
更进一步,分页的查询结果,通过在查询总记录数的时候,保存到缓存的每个分表的记录数,来确定当前分页记录集需要查询哪个分表,快速的定位和查询分页结果。
更进一步,每个分页的记录数保存在本地缓存中,缓存控制着数据的清除管理,从而保证了缓存不会因为数据过多而造成内存泄漏。
更进一步,在计算基于时间的分表算法中,使用了Java8的LocalDate技术,能够快速的确定分表。
更进一步,分库的键值是通过ThreadLocal保存在内存中,从而保证了并发的dao层访问的分库键值的安全性。
更进一步,通过annotation技术来确定是做分表查询,还是做merge查询,同时查询的有几个并列的分表。
本发明的有益效果:
1.利用了传统的、稳定的关系数据库技术,有利于客户的利旧和维护,有利于降低开发人员技术要求。
2.利用了关系数据库强大的SQL标准,既通过分库分表解决了关系数据库存储大数据的问题,又利用SQL标准强大的计算能力。
3.本发明引入了Java8的CompletableFuture技术和stream技术,它们都是异步的、非阻塞的技术,最后完成分库分表的关系数据库分布式结果的聚合工作。
综上所述,本发明首先通过扩展Spring template技术来解决关系数据库分库分表的问题。利用ThreadLocal来保证并发访问的分库键值的安全性。其次,本发明利用CompletableFuture技术来异步的、非阻塞的查询各分库和分表;最后,本发明使用stream技术来聚合所有的查询结果,形成最终结果返回给客户端。既利用了传统关系数据的强大数据分析能力,又使用了最新的stream技术将中间结果reduce成最终结果。既保留了传统关系数据库的稳定性和强大的功能,又给传统数据库扩展了最新的MapReduce技术。
附图说明
图1为分布式的MapReduce技术Hadoop的系统架构图;
图2为本发明基于AOP的关系数据库分库分表单表操作方法系统架构图;
图3为本发明基于stream的关系数据库分库分表SQL merge查询方法系统架构图;
图4为本发明基于stream的关系数据库分库分表SQL merge查询方法流程图。
具体实施方式
下面详细说明本发明的实现步骤和具体方法。
本发明的实现是基于传统关系数据库的分库分表和高级语言stream聚合技术的一套MapReduce方法。通过对传统数据库通过分库分表来存储大数据,又通过高级语言stream聚合技术来解决传统分库分表不能做MapReduce功能的缺陷。
下面首先给出整个基于高级语言聚合计算的分库分表merge查询的架构图,说明整个工作流程和主要的模块任务,最后分表描述每个模块的具体实现。
本发明的系统架构图如图2和图3所示。由于本发明的最终目的是构建一个基于高级语言聚合计算的分库分表MapReduce SQL查询框架,因此系统架构图包含了一个最基本的分库分表基础算法,它用来确定一个具体的分库及具体的分表,而多个分库分表的查询则是对一个具体的分库及具体的分表的多次并发调用得到的。要想得到多个分库分表,就必须根据输入条件,使用高效的算法来计算分库和分表的键值。根据键值和库名和表名的前缀合成具体的库名和表名。然后,通过CompletableFuture技术对所有的分库分表的查询进行异步非阻塞式的调用。最后,将调用的返回结果通过stream技术并发的聚合成最终结果。
此处用一个例子来描述整个系统的流程。
以查询“select m.id as id,b.save_time as save_time,b.org_code as org_code,m.value as value from ba b,mo m where b.id=m.ba_id and b.save_time>to_date('%s','yyyy-mm-dd')and b.save_time<to_date('%s','yyyy-mm-dd')”为例,当用户做这个查询的时候,dao类方法里,数据库名和所有相关的表名应该通过参数输入。
客户端调用这个dao类的代理模块,代理模块则根据客户端的输入条件,通过高效的算法,快速的确定本次查询所涉及到的分库和分表。
然后,代理模块将所有的分库和分表作为参数,通过CompletableFuture技术异步非阻塞的调用dao类的方法。
Dao类一方面将表名传递给具体的SQL语句,一方面通过“分库分表基础算法”模块将当前的分库库名传递给JDBC,由JDBC进行最终的查询工作。
JDBC的查询结果返回给CompletableFuture类,代理模块则将该类的返回结果压入到stream里。
接着,stream通过并发的reduce算法,将所有CompletableFuture类的结果聚合成最终结果。
最后,代理子模块将结果返回给客户端。
以上就是一个基于高级语言聚合计算的分库分表MapReduce SQL查询框架。下面进一步描述各个模块的具体设计和实现。
1.代理子模块(ProxyHandler)
代理子模块是整个系统的核心模块之一,它的功能是完成整个MapReduce查询过程。
1)获取客户端的输入参数,调用“分库分表选择”子模块获得分库和分表的所有键值;
2)根据分库和分表的键值,通过CompletableFuture技术,组织成分库库名和分表表名作为参数调用dao层方法;
3)dao层方法通过“分库分表”子模块,完成最后对数据库的访问;
4)数据库返回查询结果以后,代理模块将所有的结果压入stream里,然后通过stream的并发reduce计算出最后的聚合结果;
5)代理子模块最后将结果返回给客户端。
为了保证分库分表merge查询的效率,代理子模块使用了异步并发的CompletableFuture技术,该技术对所有的分库和分表采用异步的并发的调用,以期望对数据库的多次调用只花费了一次调用的时间;对于调用结果的merge,代理模块又使用了stream的异步reduce算法,以达到最快的reduce结果。
分库分表的merge查询中,又有相当一部分的分页查询,对于分页查询,代理模块也做了一定的效率优化。一般分页查询分为两步,第一步是先查总记录数,第二步是再查分页记录数。代理模块在查询总记录数的时候,同时将每一个分库分表的记录数保存到缓存里;然后,再查询分页记录的时候,通过缓存记录的每一个额分库分表的记录数,快速的定位到需要查询的分库分表,而不用对所有的分库分表进行查询过滤。这很大程度上提高了分页查询的效率。
2.分库分表选择子模块
分库分表键值算法的效率影响着查询结果,对于按天数分表来说,对时间的计算是最重要的影响条件。
本模块采用Java8的最新时间API-LocalDate来计算分库或分表的键值,提高了算法的效率。
对于按ID分库,本模块采用效率极高的对ID求余算法,保证了能够快速定位到每一个分库。
3.分库分表子模块
分库分表子模块是基于Spring Template的,在Spring Template的数据源的基础上做了一定的扩展。
为了并发的dao层调用的每一个调用都使用各自的分库库名和分表表名,集成分库分表模块将库名和表名保存到ThreadLocal里,保证了并发dao层调用的数据安全性。
1)自定义的数据源-ShardsDataSourceWrapper;
2)自定义的Connection实现-ConnectionProxyImpl;
3)键值数据保存在DataSourceStatus。
4.查询结果并发聚合子模块
本模块采用异步的、并发的、非阻塞的Java8流计算API-stream API,保证了系统能够高效的聚合分库分表的查询结果能够迅速的聚合成最终结果。

Claims (2)

1.一种基于高级语言并发聚合计算的分库分表查询方法,其特征在于,包括以下步骤:
(1)客户端通过代理服务子模块发送查询请求到后台分库分表服务模块,所述后台分库分表服务模块包括:代理服务子模块、分库分表选择子模块、分库分表子模块和分库分表查询结果并发聚合子模块;
(2)代理服务子模块的处理单元ProxyHandler接收到查询请求,通过分库分表选择子模块,解析出本次查询涉及到的分库和分表,这种解析包括多个可扩展分库解析算法和多个可扩展的分表解析算法,实现根据ID的求余算法、根据月份的分库算法、根据日期的分表算法;
(3)代理服务子模块的处理单元ProxyHandler根据分库和分表结果,利用Java高级语言的异步并发特性CompletableFuture,去调用实际的dao类对象并发查询所有的分库和分表;
(4)所有的分库和分表,都调用dao类对象方法,在调用该dao类对象方法的过程中,使用AOP技术触发调用分库分表子模块,通过AOP技术实现的拦截器去拦截该方法,以获取步骤(2)中所得到的分库分表参数;
(5)分库分表子模块的拦截器获取到分库分表参数以后,通过ThreadLocal技术保存分库键值和分表键值,ThreadLocal技术是一个线程安全的数据存储技术,保证每一个调用dao类对象方法的线程,都有自己的分库键值和分表键值;
(6)分库分表子模块的拦截器最后真正调dao类对象方法,dao类对象方法是通过spring jdbc template技术实现的,spring jdbc template技术通过ThreadLocal对象获取到该分库键值和分表键值精确定位分库分表,获取查询结果;
(7)代理服务子模块将获取到的多个分库分表查询结果,调用分库分表查询结果并发聚合子模块,通过调用stream API并发将结果聚合计算,得到最后结果后,返回给客户端;
(8)对于分页查询,在查询总记录数的时候,将每张表的记录数保存到内存里,再查询分页记录时,根据内存记录的每张表的记录数,精确的查询某一张表或者多张表。
2.如权利要求1所述的基于高级语言并发聚合计算的分库分表查询方法,其特征在于,每张表的记录数保存在一个可以管理的缓存服务中,通过各种条件清除过期的数据,保证不会随着时间的增长,出现内存溢出的情况。
CN201510567753.5A 2015-09-08 2015-09-08 基于高级语言并发聚合计算的分库分表merge查询方法 Active CN105138676B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510567753.5A CN105138676B (zh) 2015-09-08 2015-09-08 基于高级语言并发聚合计算的分库分表merge查询方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510567753.5A CN105138676B (zh) 2015-09-08 2015-09-08 基于高级语言并发聚合计算的分库分表merge查询方法

Publications (2)

Publication Number Publication Date
CN105138676A CN105138676A (zh) 2015-12-09
CN105138676B true CN105138676B (zh) 2017-11-24

Family

ID=54724023

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510567753.5A Active CN105138676B (zh) 2015-09-08 2015-09-08 基于高级语言并发聚合计算的分库分表merge查询方法

Country Status (1)

Country Link
CN (1) CN105138676B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105893466B (zh) * 2016-03-28 2019-09-20 中国建设银行股份有限公司 一种应用于数据库的数据处理方法及系统
CN107305554A (zh) * 2016-04-20 2017-10-31 泰康保险集团股份有限公司 数据查询处理方法及装置
CN108874837B (zh) * 2017-05-16 2021-09-03 北京京东尚科信息技术有限公司 数据库分库方法、装置、中间件及存储介质和电子设备
CN112632085A (zh) * 2021-01-05 2021-04-09 南方电网深圳数字电网研究院有限公司 动态分表方法、装置、电子设备及存储介质
CN113032439A (zh) * 2021-05-20 2021-06-25 广州宸祺出行科技有限公司 一种分库分表结构数据库的查询方法、装置及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577431A (zh) * 2012-07-27 2014-02-12 深圳市易通无限科技有限公司 一种利用多种数据库进行系统设计的方法、装置以及系统
CN103678408A (zh) * 2012-09-21 2014-03-26 阿里巴巴集团控股有限公司 一种查询数据的方法及装置
CN104123374A (zh) * 2014-07-28 2014-10-29 北京京东尚科信息技术有限公司 分布式数据库中聚合查询的方法及装置
CN104765754A (zh) * 2014-01-08 2015-07-08 北大方正集团有限公司 数据存储方法及装置
CN104794249A (zh) * 2015-05-15 2015-07-22 乐得科技有限公司 一种数据库的实现方法和设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577431A (zh) * 2012-07-27 2014-02-12 深圳市易通无限科技有限公司 一种利用多种数据库进行系统设计的方法、装置以及系统
CN103678408A (zh) * 2012-09-21 2014-03-26 阿里巴巴集团控股有限公司 一种查询数据的方法及装置
CN104765754A (zh) * 2014-01-08 2015-07-08 北大方正集团有限公司 数据存储方法及装置
CN104123374A (zh) * 2014-07-28 2014-10-29 北京京东尚科信息技术有限公司 分布式数据库中聚合查询的方法及装置
CN104794249A (zh) * 2015-05-15 2015-07-22 乐得科技有限公司 一种数据库的实现方法和设备

Also Published As

Publication number Publication date
CN105138676A (zh) 2015-12-09

Similar Documents

Publication Publication Date Title
CN105138676B (zh) 基于高级语言并发聚合计算的分库分表merge查询方法
US10936659B2 (en) Parallel graph events processing
US9063992B2 (en) Column based data transfer in extract, transform and load (ETL) systems
Zhao et al. Dache: A data aware caching for big-data applications using the MapReduce framework
US8051034B2 (en) Parallel processing of assigned table partitions
CN103246749B (zh) 面向分布式计算的矩阵数据库系统及其查询方法
US11614970B2 (en) High-throughput parallel data transmission
CN106897411A (zh) 基于Spark技术的ETL系统及其方法
US9348855B2 (en) Supporting big data in enterprise content management systems
US9992269B1 (en) Distributed complex event processing
CN103914399A (zh) 一种并行计算系统中的磁盘缓存方法及装置
CN109783512A (zh) 数据处理方法、装置、计算机设备及存储介质
US10158709B1 (en) Identifying data store requests for asynchronous processing
US8650216B2 (en) Distributed storage for collaboration servers
US10929370B2 (en) Index maintenance management of a relational database management system
US9875270B1 (en) Locking item ranges for creating a secondary index from an online table
CN109446358A (zh) 一种基于id缓存技术的图数据库加速装置和方法
CN108268468A (zh) 一种大数据的分析方法及系统
US9229968B2 (en) Management of searches in a database system
US11847121B2 (en) Compound predicate query statement transformation
US20230153300A1 (en) Building cross table index in relational database
CN106940715B (zh) 一种基于索引表的查询的方法及设备
US11868349B2 (en) Row secure table plan generation
Kvet Identifying, Managing, and Accessing Undefined Tuple States in Relational Databases
US11841857B2 (en) Query efficiency using merged columns

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
PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Sub-library and sub-table merge query method based on high-level language concurrent aggregation calculation

Effective date of registration: 20180103

Granted publication date: 20171124

Pledgee: Bank of China, Limited by Share Ltd, Cangnan County branch

Pledgor: Zhejiang Wei Rong electronics technology limited company

Registration number: 2018330000001

CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 325899 North of Tanghe Road, Cangnan County Industrial Park, Lingxi Town, Cangnan County, Wenzhou City, Zhejiang Province

Patentee after: Polytron Technologies Inc

Address before: 325899 North of Tanghe Road, Cangnan County Industrial Park, Lingxi Town, Cangnan County, Wenzhou City, Zhejiang Province

Patentee before: Zhejiang Wei Rong electronics technology limited company

CP02 Change in the address of a patent holder
CP02 Change in the address of a patent holder

Address after: 325899 No. 188 Yongjin Road, Lingxi Town, Cangnan County, Wenzhou City, Zhejiang Province

Patentee after: Polytron Technologies Inc

Address before: 325899 North of Tanghe Road, Cangnan County Industrial Park, Lingxi Town, Cangnan County, Wenzhou City, Zhejiang Province

Patentee before: Polytron Technologies Inc