首页> 中国专利> 面向传感器数据的NoSQL数据库评测系统及其构建方法

面向传感器数据的NoSQL数据库评测系统及其构建方法

摘要

本发明公开一种面向传感器数据的NoSQL数据库评测系统及其构建方法,系统包括NoSQL数据库层、中间件层和用户界面层;所述NoSQL数据库层包括多个NoSQL数据库;所述中间件层采用了微服务架构中间件层,利用Spring Cloud技术来进行实现,将NoSQL数据库部署于云计算环境中构造的虚拟机上,并且这些虚拟机的配置完全一致;所述用户界面层,在用户界面上为用户提供了对MySQL数据库操作的操作区和结果展现区;通过Kafka模拟真实情况下传感器数据的传输方式,以一致的方式将传感器数据提供给不同的NoSQL数据库;通过Kafka实现微服务中各个模块之间的消息传递。本发明使得用户可以通过不同的负载任务的执行性能,公平、快速的比较出不同NoSQL数据库的性能差异。

著录项

  • 公开/公告号CN110008272A

    专利类型发明专利

  • 公开/公告日2019-07-12

    原文格式PDF

  • 申请/专利权人 张绿儿;

    申请/专利号CN201910284813.0

  • 发明设计人 张绿儿;张鹏;叶枫;

    申请日2019-04-10

  • 分类号

  • 代理机构南京乐羽知行专利代理事务所(普通合伙);

  • 代理人李玉平

  • 地址 210019 江苏省南京市建邺区梦都大街188号御江金城10-2203

  • 入库时间 2024-02-19 11:59:52

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-01-31

    授权

    授权

  • 2019-08-06

    实质审查的生效 IPC(主分类):G06F16/25 申请日:20190410

    实质审查的生效

  • 2019-07-12

    公开

    公开

说明书

技术领域

本发明涉及一种面向传感器数据的NoSQL数据库评测系统及其构建方法,属于软件性能评测与度量分析技术领域。

背景技术

随着物联网和传感器技术的迅猛发展,世界变得更加仪器化和互联化,我们也不断目睹着由各种各样传感器生成的海量传感器数据以前所未有的速度增加着。这些传感器数据具有重要的研究和应用价值,已广泛地服务于防洪、环保、工业制造业等业务场景。然而,传统的以关系数据库为代表的存储方式难以有效地存储大规模的传感器流数据。在面对大量非结构化数据集或传感器流数据时,传统数据库的缺点主要表现在以下几个方面:(1)单个表中的数据越来越多,处理效率低下;(2)由于复杂的数据转换/迁移,关系数据库的维护代价高昂;(3)由于数据的规模和异构性,它们不能很好地并行化,并且很难通过扩展机器集群来提高数据库性能。为了充分利用大数据的价值,首先要考虑的是如何合理存储大数据。现在,快速发展的NoSQL存储提供了一个参考解决方案,并且拥有更多的特性,比如无模式、易于复制支持、简单的API等。但是,当前已有超过200个不同的NoSQL数据库,不同的NoSQL存储具有不同的特性和适用性。随着版本升级的快速变化和功能集的不断发展,对用户而言,很难跟踪不同NoSQL数据库的优势、不同点,也就难以说明哪一种数据库更适合存储传感器数据。

当前,对于不同NoSQL的评测,虽然已有一些典型工具或研究工作如YCSB、YCSB++、BenchFoundry。但是,相对于数量众多的NoSQL而言,评测工作是远远不足的;若与传统的关系数据库的评测系统和工具相比,更是屈指可数。

发明内容

发明目的:针对现有技术中存在的问题与不足,本发明面向传感器数据,根据传感器数据的特点,提出了一种面向传感器数据的NoSQL数据库评测系统及其构建方法,从对传感器数据执行查询、更新、删除操作的性能的角度为传感器数据的存储机制提供选型参考。通过研发一个基于微服务的中间件层,实现了对不同的NoSQL数据库系统的连接,并在此基础上实现不同的负载任务(条件查询、删除、更新操作),使得用户可以通过不同的负载任务的执行性能,公平、快速的比较出不同NoSQL数据库的性能差异,为传感器数据的存储机制选型提供可量化比较的方案,即用户易于判断出选用哪种NoSQL数据库查询速度最快,或者选用哪种NoSQL数据库更新操作的执行速度最快。

技术方案:一种面向传感器数据的NoSQL数据库评测系统,用户根据此测评系统可以公平快速的比较出各个NoSQL数据库存储机制的性能差异,从而选择出最适合自身需求的存储方式。

整个体系架构包括三层,分别是NoSQL数据库层、中间件层和用户界面层。随着技术的发展,传感器数据在规模和结构上与以往有着巨大的变化,由于采集的精度不断提高,数据量也呈几何数量递增,同时数据也往往不局限于关系型这一种,各种非关系型数据也在不断地产生。所述NoSQL数据库层包括多个NoSQL数据库;上述中间件层作为核心,集成不同的NoSQL数据库,不仅在性能测试业务上提供了完善的支持,同时针对传感器的数据特点,在测试之前对待测试的数据库进行一个有效的筛选,提供一个合理的测评方案,提高了测试的效率。该层采用了微服务架构,该架构旨在通过将不同数据库的各种操作分解到各个离散的服务中以实现对解决方案的解耦,利用Spring Cloud技术来进行实现。每个NoSQL数据库就是一个独立的服务,利用Spring Cloud Eureka进行相关服务的注册和发现。由于各种NoSQL数据库之前存在各种各样很复杂的配置问题,因此通过SpringCloud Config进行统一的配置。在API调用方面,通过Spring Cloud Gateway为微服务架构提供一种简单而有效的统一的API路由管理;

所述的用户界面层,采用所见即所得的风格,在界面上为用户提供了对MySQL数据库操作的操作区和结果展现区。

中间件层将所述NoSQL数据库部署于云计算环境中构造的虚拟机上,并且这些虚拟机的配置完全一致,每个NoSQL数据库对应一个虚拟机。

通过Kafka模拟真实情况下传感器数据的传输方式,以一致的方式将传感器数据提供给不同的NoSQL数据库从而进行负载压力测试;通过Kafka实现微服务中各个模块之间的消息传递。

所述的NoSQL数据库层包括4种NoSQL数据库,分别是:文档数据库MongoDB、宽列数据库HBase、键值数据库Memcached和键值数据库Redis。

所述操作区的具体操作包括:操作类型的选择、检索条件设定、NoSQL数据库的连接与断开、数据重置、结果展示。结果展示区可以展示数据库是否已经连接和负载执行结果。

操作类型的选择包括查询、删除和更新操作。

检索条件设定。用户预先设置好检索条件,可以是主键检索也可以是条件检索,同时用户还可以选择一个或多个数据库同时进行评测,这些评测都是并发的,可以同时对多个数据库进行检索。

NoSQL数据库的连接与断开。在测试开始之前,通过对连接进行测试来保证数据库的可用,同时在终止测试时,可以选择对数据库连接断开。

数据重置。在进行测试时,需要保证各个NoSQL数据库处于同一状态,需要对其进行数据重置,保证数据库里的数据一样。

一种面向传感器数据的NoSQL数据库评测系统的构建方法,具体包括以下步骤:

步骤1:基础设施虚拟化;利用服务器虚拟化技术,扩展出多个配置完全一致虚拟服务器,在虚拟服务器上安装所需要测评的NoSQL数据库数据库,每个NoSQL数据库对应一个虚拟机。

步骤2:开源云计算解决方案Apache CloudStack的安装。使用Apache CloudStack作为管理虚拟机群的软件。

步骤3:选用相同规模的虚拟机群,配置标准不得低于数据库能够运行的最低配置,然后分别安装部署HBase、Redis、MongoDB、Memcached以及MySQL数据库。

步骤4:基于Kafka,实现对不同NoSQL数据库的连接和传感器数据发送, 传感器数据发送是指通过Kafka向各个NoSQL数据库插入数据。算法如下:

输入:Nosql类型,Nosql数据,Kafka主题,Kafka分区,查询语言,Nosql连接信息

输出:Kafka流数据

步骤一:判断数据库类型,并将该种数据库进行连接;

步骤二:当Nosql数据库已连接时,根据查询语言从数据库中连续读取数据,并将数据初始化,按照规定格式输出;

步骤三:判断Kafka主题数,当Kafka中主题数不为空时,继续判断主题中分区数,当分区数大于0,并且所需分区数不大于Kafka中的默认分区数,则将信息按照Key(键)值计算分配到不同分区,通过Kafka生产者发送,若Kafka消费者不存在则将消息缓存在Kafka中,如果存在则将Kafka中缓存的消息进行消费端消费,并通过消费端逻辑将传感器数据拆分,以流的形式输出;

步骤5:实现相应的负载操作,包括:条件查询、删除操作、更新操作、计算最大值、计算最小值、计算平均值、日志清空、数据重置,并在评测系统界面显示操作结果,供用户参考。

条件查询:用户输入相关的查询条件,由NoSQL数据库执行相应查询操作,返回各个NoSQL数据库执行的时间及查询操作结果数据量,并在结果展示中显示,用于供用户测评各个NoSQL数据库查询操作执行性能。

删除操作:删除符合条件的数据,由NoSQL执行相应删除操作,返回各个NoSQL数据库执行的时间及删除的数据量,并在结果展示中显示,用于供用户测评各个NoSQL数据库删除操作执行性能。

更新操作:根据主键更新数据,覆盖原数据或者删除原数据并插入新数据,由NoSQL数据库执行相应更新操作,返回各个NoSQL执行的时间及更新操作的数据量,在结果展示中显示,用于供用户测评各个NoSQL数据库更新操作执行性能。

计算最大值:根据输入的计算条件,计算出符合该条件的所有数值中的最大值;

计算最小值:根据输入的计算条件,计算出符合该条件的所有数值中的最小值;

计算平均值:根据输入的计算条件,计算出符合该条件的所有数值的平均值;

步骤6:评测系统界面的设计与实现,为用户提供操作NoSQL数据库的界面。

(1)第一部分是全局查询选项。用户需要根据已有的数据集先去确定评测数据库的种类。

(2)第二部分是所有数据库的操作。第一列是数据库名称。第二列是数据库服务的状态,只有该数据库服务的状态为开启状态时,才可以进行后面的操作,例如检索,添加,更新等。第三列是清空数据操作,清空数据操作指的是将测试数据库中的数据全部删除。第四列是重置数据操作,重置数据时,先执行清空表操作,然后从MySQL里读取传感器数据,最后插入到对应的NoSQL数据库里。第五列是统计数量操作,会统计所选NoSQL数据库表所有的数据的个数。第六列是操作类型,可以选择是查询操作、更新操作还是删除操作。后面的两列分别是原来的值和更新后的值。如果是查询操作,只需要写原值。如果是更新操作,需要写原值和更新后的值。最后一列是执行操作。第二部分下方是最值统计,只有查询时,才会对最大值,最小值和平均值进行统计。

(3)第三部分是结果展示,对NoSQL数据库的所有操作,通过日志记录,并在结果展示部分里显示出来。显示的内容有:执行的操作,耗时,操作结果的数据量。

条件查询:用户输入相关的查询条件,点击条件查询按钮。日志会记录本次操作是条件查询操作,查询的条件,各个数据库的执行时间和查询出的数据量。

删除操作:删除符合条件的传感器数据,点击删除按钮。日志会记录本次操作是删除操作,删除的条件,各个NoSQL数据库的执行时间和删除的数据量。

更新操作:根据主键更新传感器数据,覆盖原数据或者删除原数据并插入新数据,点击更新按钮。日志会记录本次操作是更新操作,更新的条件,各个NoSQL数据库的执行时间和更新的数据量。

计算最大值:对查询出的结果计算出最大值。日志会记录本次操作是计算最大值操作,各个NoSQL数据库的执行时间和最大值。

计算最小值:对查询出的结果计算出最小值。日志会记录本次操作是计算最小值操作,各个NoSQL数据库的执行时间和最小值。

计算平均值:对查询出的结果计算出平均值。日志会记录本次操作是计算平均值操作,各个NoSQL数据库的执行时间和平均值。

附图说明

图1是本发明实施例的体系结构图;

图2是本发明实施例的系统用户界面图。

具体实施方式

下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

如图1为本发明的一种面向传感器数据的NoSQL数据库评测系统的体系架构图。其中,所述的评测系统分为三层,自底向上分别是:是NoSQL数据库层、中间件层和用户界面层。

NoSQL数据库层包括了4种NoSQL数据库,分别是:文档数据库MongoDB、宽列数据库HBase、键值数据库Memcached和键值数据库Redis。同时,也连接了MySQL数据库。为了公平地评测不同的NoSQL数据库,所述NoSQL数据库部署于云计算环境中构造的虚拟机上,并且这些虚拟机的配置完全一致。

为了公平地评测不同的NoSQL数据库,保证传感器数据可以以一致的方式提供给不同的NoSQL数据库,选择了Kafka的流数据技术。通过Kafka模拟真实情况下传感器数据的传输方式,以一致的方式提供给不同的NoSQL数据库从而进行负载压力测试;通过Kafka实现微服务中各个模块(4种Nosql数据库及kafka模块)之间的消息传递,虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此负载测试和功能请求选择使用Kafka消息队列代替REST请求/响应。

上述中间件层是核心,集成不同的NoSQL数据库,不仅在性能测试业务上提供了完善的支持,同时针对传感器的数据特点,在测试之前对待测试的数据库进行一个有效的筛选,提供一个合理的测评方案,提高了测试的效率。为了集成不同的NoSQL数据库,该层采用了微服务架构。该架构旨在通过将功能(不同数据库的各种操作)分解到各个离散的服务中以实现对解决方案的解耦,利用Spring Cloud技术来进行实现。每个NoSQL数据库就是一个独立的服务,利用Spring Cloud Eureka进行相关服务的注册和发现。由于各种NoSQL数据库之前存在各种各样很复杂的配置问题,因此通过SpringCloud Config进行统一的配置。在API调用方面,通过Spring Cloud Gateway为微服务架构提供一种简单而有效的统一的API路由管理。

用户界面层,采用所见即所得的风格,在界面上为用户提供了对MySQL数据库操作的操作区和结果展现区。操作区具体操作包括:操作类型的选择,操作条件设定、NoSQL数据库的连接与断开、数据重置、结果展示。结果展示区可以展示NoSQL数据库是否已经连接和负载执行结果。

操作类型的选择包括查询、删除和更新操作。

检索条件设定:用户预先设置好检索条件,可以是主键检索也可以是条件检索,同时用户还可以选择一个或多个数据库同时进行评测,这些评测都是并发的,可以同时对多个数据库进行操作。

NoSQL数据库的连接与断开:在测试开始之前,通过对连接进行测试来保证数据库的可用,同时在终止测试时,可以选择对数据库连接断开。

数据重置:在进行测试时,需要保证各个NoSQL数据库处于同一状态,需要对其进行数据重置,保证数据库里的数据量都保持一致。

结果展示:用于返回所做测试的评测结果,进行可视化展示。

在测评数据库之前需要将传感器数据提前导入进NoSQL数据库,传感器数据由用户自己提供,用户需提供此数据的相应数据关系以及导入的数据量等信息,系统会根据这些信息自动创建相应的脚本,不同的NoSQL数据库有着不同的导入机制,脚本会自行判断选择合适的导入方法来执行相应的导入操作。

本发明还公开了一种面向传感器数据的NoSQL数据库评测系统的构建方法,包括如下步骤:

步骤1:基础设施虚拟化。采用虚拟化技术能实现主机和存储资源的一体化整合和共享利用。主要从两个方面进行虚拟化,建立两个虚拟化池即计算虚拟化池和存储虚拟化池。计算虚拟化池主要实现应用虚拟化,在计算资源层面包括服务器虚拟化和应用中间件虚拟化。服务器虚拟化是指将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器。存储虚拟化池主要实现数据存储虚拟化,在存储层面包括存储硬件架构虚拟化和存储软件虚拟化。本发明按照上述思路搭建主机、管理节点、多台计算节点以及网络设备等硬件,评测不同的NoSQL数据库提供必需的、一致的基础设施基础。具体操作如下:租用或购买多台服务器,利用服务器虚拟化技术,扩展出多个虚拟服务器,确保虚拟服务器中配置完全一致。在虚拟服务器上安装Linux操作系统,规划网络节点,端口,下载并安装所需要测评的NoSQL数据库数据库。

步骤2:开源云计算解决方案Apache CloudStack的安装。使用Apache CloudStack作为管理虚拟机群的软件,使得用户可以快速方便地在现有的基础架构上创建私有的云计算平台并管理虚拟机集群,其安装过程主要包含以下几步:

(1)配置安装源(管理和计算节点均需要配置);

$ sudo sed -i s/us.archive.ubuntu.com/mirrors.163.com/g /etc/apt/sources.list

$ sudo sed -i s/security.ubuntu.com/mirrors.163.com/g /etc/apt/sources.list

配置CloudStack官方源

$ sudo vim /etc/apt/sources.list.d/cloudstack.list

deb http://cloudstack.apt-get.eu/ubuntu precise 4.0

配置CloudStack官方源证书

$ wget -O - http://cloudstack.apt-get.eu/release.asc| sudo apt-key add -

更新系统的安装源

$ sudo apt-get update

(2)安装CloudStack Management Server;

(3)安装HOST主机;

进行完(2)(3)的操作后,便可以实现多个虚拟服务器之间的相互通信。

(4)配置安全策略、网桥、防火墙、NFS共享等。

配置安全策略。

$ sudo dpkg --list "apparmor"

配置网桥,将物理网卡设置为manual,然后在虚拟网卡上设置IP并桥接到物理网卡上。

$ sudo vim /etc/network/interfaces

配置防火墙,关闭防火墙以防止无法通信。

$ sudo ufw disable

NFS共享,CloudStack 需要一个地方来存放Primar和Secondary Storage,官方推荐使用NFS共享。

$ sudo apt-get install nfs-common nfs-kernel-server

步骤3:选用相同规模的虚拟机群,配置标准不得低于数据库能够运行的最低配置,然后分别安装部署HBase、Redis、MongoDB、Memcached以及MySQL数据库。

步骤4:基于Kafka,利用Java编程,实现对不同NoSQL数据库的连接和传感器数据发送, 传感器数据发送是指通过Kafka向各个NoSQL数据库插入数据。算法如下。

/*** NoSQL 统一接口**/

Input:nosql data x,Kafka_topic t,Kafka_Pation p,QuerySql q,NosqlConnection c;

Output:Kafka Stream z;

GetConnect(Nosql){

switch(Nosql){

case nosqltype:

return c;

}

}

//Determine types of NoSQL and Get different connections

while(c is connected){

x <-GetData(q,c)

//Continuously read messages from the current NoSQL database

x'<-Serialization(x);//Serialized message

if(x'.next is true){

message=format(x');

}

if(t is none){

throw Error;

p=None; //Judge whether kafka topic exists or not

}

if(p not none){

if(p<0 or partion>=numPartions){

throw Error; // Determine partitioning

}

else(){

p<-hash(key)%numPartions;

// If the partition is normal, the partition is

// determined by passing in a message key value

KafkaProducer<-message;

//Messages are passed into kafkaProducer to form kafka Stream

if(kafkaConsumer is none){

Kafka<-kafkaProducer.message;

//If there is no consumer, the message is cached to Kafka

}

else(){

kafkaConsumer<-kafka.message;

// send the kakfa message to the consumer

message'=split(kafkaConsumer.message);

z=message';

//Message splitting and form data stream

}

}

}

}

输入:Nosql类型,Nosql数据,Kafka主题,Kafka分区,查询语言,Nosql连接信息

输出:Kafka流数据

步骤一:判断数据库类型,并将该种数据库进行连接;

步骤二:当Nosql数据库已连接时,根据查询语言从数据库中连续读取数据,并将数据初始化,按照规定格式输出;

步骤三:判断Kafka主题数,当Kafka中主题数不为空时,继续判断主题中分区数,当分区数大于0,并且所需分区数不大于Kafka中的默认分区数,则将信息按照Key值计算分配到不同分区,通过Kafka生产者发送,若Kafka消费者不存在则将消息缓存在Kafka中,如果存在则将Kafka中缓存的消息进行消费端消费,并通过消费端逻辑将传感器数据拆分,以流的形式输出;

步骤5:基于Java编程开发,实现相应的负载操作,包括:条件查询、删除操作、更新操作、计算最大值、计算最小值、计算平均值、日志清空、数据重置。

条件查询:用户输入相关的查询条件,由NoSQL数据库执行相应查询操作,返回各个NoSQL数据库执行的时间及查询操作结果数据量,并在结果展示中显示,用于供用户测评各个NoSQL数据库查询操作执行性能。

删除操作:删除符合条件的数据,由NoSQL执行相应删除操作,返回各个NoSQL数据库执行的时间及删除的数据量,并在结果展示中显示,用于供用户测评各个NoSQL数据库删除操作执行性能。

更新操作:根据主键更新数据,覆盖原数据或者删除原数据并插入新数据,由NoSQL数据库执行相应更新操作,返回各个NoSQL执行的时间及更新操作的数据量,在结果展示中显示,用于供用户测评各个NoSQL数据库更新操作执行性能。

计算最大值:根据输入的计算条件,计算出符合该条件的所有数值中的最大值;

计算最小值:根据输入的计算条件,计算出符合该条件的所有数值中的最小值;

计算平均值:根据输入的计算条件,计算出符合该条件的所有数值的平均值;

步骤5:基于Java编程开发,实现相应的负载操作,包括:条件查询、删除操作、更新操作、计算最大值、计算最小值、计算平均值、日志清空、数据重置。

步骤6:评测系统界面的设计与实现,如图2所示。

(1)第一部分是最上方的全局查询选项。用户需要根据已有的数据集先去确定评测数据库的种类。因为传感器数据集有多种类型,比如键值型,文档型,时间序列型等,用户输入数据集类型,评测系统会根据此来推荐相对应的几种数据库。以水文传感器数据为例,用户需要提供查询的条件,比如站点,地点编号,时间区间等,之后在查询MongoDB和HBase时,会将这三个选项的输入的值添加到查询条件里。由于Memcached和Redis不支持复杂的查询,所以该选项不支持Memcached和Redis。地点编号如果未输入,表示默认查询所有传感器站点。如果输入了,就按输入的值查询。时间范围既可以是闭区间,也可以是开区间。

(2)第二部分是所有数据库的操作。第一列是数据库名称。第二列是数据库服务的状态,只有该数据库服务的状态为开启状态时,才可以进行后面的操作,例如检索,添加,更新等。第三列是清空数据操作。第四列是重置数据操作,重置数据时,先执行清空表操作,然后从MySQL里读取传感器数据,最后插入到对应的NoSQL数据库里。第五列是统计数量操作,会统计所选NoSQL数据库表所有的数据的个数。第六列是操作类型,可以选择是查询操作、更新操作还是删除操作。后面的两列分别是原来的值和更新后的值。如果是查询操作,只需要写原值。如果时更新操作,需要写原值和更新后的值。最后一列是执行操作。第二部分下方是最值统计,只有查询时,才会对最大值,最小值和平均值进行统计。

(3)第三部分是结果展示,对NoSQL数据库的每个操作,通过日志记录,并在结果展示部分里显示出来。显示的内容有:执行的操作,耗时,操作结果的数据量。

条件查询:用户输入相关的查询条件,点击条件查询按钮。日志会记录本次操作是条件查询操作,查询的条件,各个数据库的执行时间和查询出的数据量。

删除操作:删除符合条件的传感器数据,点击删除按钮。日志会记录本次操作是删除操作,删除的条件,各个NoSQL数据库的执行时间和删除的数据量。

更新操作:根据主键更新传感器数据,覆盖原数据或者删除原数据并插入新数据,点击更新按钮。日志会记录本次操作是更新操作,更新的条件,各个NoSQL数据库的执行时间和更新的数据量。

计算最大值:对查询出的结果计算出最大值。日志会记录本次操作是计算最大值操作,各个NoSQL数据库的执行时间和最大值。

计算最小值:对查询出的结果计算出最小值。日志会记录本次操作是计算最小值操作,各个NoSQL数据库的执行时间和最小值。

计算平均值:对查询出的结果计算出平均值。日志会记录本次操作是计算平均值操作,各个NoSQL数据库的执行时间和平均值。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号