CN106294769B - 同步工程数据的方法、***和装置 - Google Patents
同步工程数据的方法、***和装置 Download PDFInfo
- Publication number
- CN106294769B CN106294769B CN201610658456.6A CN201610658456A CN106294769B CN 106294769 B CN106294769 B CN 106294769B CN 201610658456 A CN201610658456 A CN 201610658456A CN 106294769 B CN106294769 B CN 106294769B
- Authority
- CN
- China
- Prior art keywords
- engineering
- engineering equipment
- equipment information
- information
- memory database
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000001360 synchronised effect Effects 0.000 claims abstract description 91
- 230000004048 modification Effects 0.000 claims description 30
- 238000012986 modification Methods 0.000 claims description 30
- 230000001965 increasing effect Effects 0.000 claims description 13
- 238000012217 deletion Methods 0.000 claims description 8
- 230000037430 deletion Effects 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 7
- 230000037431 insertion Effects 0.000 claims description 7
- 238000010977 unit operation Methods 0.000 abstract description 9
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 230000008859 change Effects 0.000 description 5
- 238000004378 air conditioning Methods 0.000 description 4
- 239000002304 perfume Substances 0.000 description 4
- 235000013599 spices Nutrition 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 101100289995 Caenorhabditis elegans mac-1 gene Proteins 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000002224 dissection Methods 0.000 description 2
- JLYXXMFPNIAWKQ-UHFFFAOYSA-N γ Benzene hexachloride Chemical compound ClC1C(Cl)C(Cl)C(Cl)C(Cl)C1Cl JLYXXMFPNIAWKQ-UHFFFAOYSA-N 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
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
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- 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/23—Updating
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
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)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种同步工程数据的方法、***和装置。其中,该方法包括:在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在内存数据库中存储任意一条工程设备信息;将内存数据库中的所有工程设备信息同步至存储数据库,和/或,将内存数据库中发生更新的工程设备信息实时同步至存储数据库,其中,存储在内存数据库中的任意一条工程设备信息作为一条工程记录存储至存储数据库。本发明解决了现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的技术问题。
Description
技术领域
本发明涉及数据库技术领域,具体而言,涉及一种同步工程数据的方法、***和装置。
背景技术
格力远程智能服务中心对分布在全国各地的中央空调机组进行监控,实现了数据采集、存储、分析应用等功能。随着中央空调需求的不断加大,监控机组数量也随之快速增长。因此,数据存储与分析面临着巨大的挑战。
智能服务中心将每一个中央空调作为一个工程,空调所包含的机组作为一个设备。当前,数据库中包含机组基础数据(工程、设备信息)、机组运行数据、客户端用户操作信息、机组分析信息等数据。机组运行数组的急剧增长会降低数据库的性能,尤其当客户端或者服务器直接对数据库进行增加、删除、修改、查询等操作时,更增加了数据库的运行压力。而频繁的工程、设备信息的操作则往往出现延时等问题,使得服务器无法快速、准确地获得信息;工程设备信息不能及时的进行修改,存储的数据不正确、有延时等,又进一步地影响了客户端向用户展示数据的正确性和实时性。
针对现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种同步工程数据的方法、***和装置,以至少解决现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的技术问题。
根据本发明实施例的一个方面,提供了一种同步工程数据的方法,包括:
在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在内存数据库中存储任意一条工程设备信息;将内存数据库中的所有工程设备信息同步至存储数据库,和/或,将内存数据库中发生更新的工程设备信息实时同步至存储数据库,其中,存储在内存数据库中的任意一条工程设备信息作为一条工程记录存储至存储数据库。
根据本发明实施例的另一方面,还提供了一种同步工程数据的***,包括:
存储器,用于存储工程设备信息的实时更新数据;实时更新设备,用于获取存储器的实时更新数据,并解析实时更新数据,获取解析后的操作指令,并根据操作指令更新存储数据库中的工程设备信息;启动更新设备,用于获取内存数据库的队列中所有工程设备信息,并将工程设备信息更新到存储数据库中。
根据本发明实施例的另一方面,还提供了一种同步工程数据的装置,包括:
读取模块,用于在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在内存数据库中存储任意一条工程设备信息;更新模块,用于将内存数据库中的所有工程设备信息同步至存储数据库,和/或,将内存数据库中发生更新的工程设备信息实时同步至存储数据库,其中,存储在内存数据库中的任意一条工程设备信息作为一条工程记录存储至存储数据库。
在本发明实施例中,通过当同步工程设备信息启动后,读取的内存数据库中以键值对方式存储的工程设备信息,并将该内存数据库中的所有工程设备信息同步到存储数据库中或将内存数据库发生更新的工程设备信息更新到存储数据库中,达到了内存数据库与存储数据库的同步的目的,从而实现了加快服务器的访问速度,提升服务器的性能的技术效果,进而解决了现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的同步工程数据的方法流程图;
图2是根据本发明实施例的一种可选的同步工程数据的启动更新流程图;
图3是根据本发明实施例的一种可选的同步工程数据的实时更新流程图;
图4是根据本发明实施例的一种可选的同步工程数据的实时更新流程图;
图5是根据本发明实施例的一种可选的同步工程数据的***结构示意图;
图6是根据本发明实施例的一种可选的同步工程数据的装置结构示意图;
图7是根据本发明实施例的一种可选的同步工程数据的装置结构示意图;
图8是根据本发明实施例的一种可选的同步工程数据的装置结构示意图;
图9是根据本发明实施例的一种可选的同步工程数据的装置结构示意图;
图10是根据本发明实施例的一种可选的同步工程数据的装置结构示意图;
图11是根据本发明实施例的一种可选的同步工程数据的装置结构示意图;
图12是根据本发明实施例的一种可选的同步工程数据的装置结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种同步工程数据的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的同步工程数据方法,如图1所示,该方法包括如下步骤:
步骤S102,在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在内存数据库中存储任意一条工程设备信息。
具体的,在上述步骤中,所有的工程设备信息以键值对的形式存于内存数据库中,查询关键字所对应的值可以从内存数据库中读取工程设备信息。
需要说明的是,上述内存数据库可以是redis存储数据库,从redis存储数据库中存取数据的方式均为:关键字+关键字对应的值。
作为一种可选的实施例,以上述内存数据库为redis存储数据库为例进行说明,在启动同步工程设备信息之前,需要使用键值对的方式存储工程设备信息,可以使用hmset命令存储工程设备信息,如执行语句“hmset project_id 1工程名称中央花园”,可以将工程标识为“1”,工程名称为“中央花园”的工程信息存储在redis存储数据库中,上述语句中,“project”代表工程信息,唯一标识“_id”为第一个域,“1”为第一个值,“工程名称”为第二个域,“中央花园”为第二个值。在启动同步工程设备信息的情况下,可以读取内存数据库中的工程设备信息,可以使用hmget命令读取工程设备信息,如执行语句“hmget project_1_id工程名”,可以得到工程标识为“1”的唯一标识与工程名称信息。
步骤S104,将内存数据库中的所有工程设备信息同步至存储数据库,和/或,将内存数据库中发生更新的工程设备信息实时同步至存储数据库,其中,存储在内存数据库中的任意一条工程设备信息作为一工程记录存储至存储数据库。
具体的,在上述步骤中,在启动同步工程设备信息的情况下,为了防止服务器已经启动了一段时间,此时需要使用启动更新,即将内存数据库中的所有工程设备信息同步至存储数据库;将内存数据库中发生更新的工程设备信息实时同步至存储数据库的过程为实时更新的过程。
需要说明的是启动更新和实时更新是双线程同时进行的,两者的区别在于启动更新需要从内存数据库中读取所有的工程设备信息,并将这些工程设备信息存储到存储数据库中,当遍历完所有的工程设备信息后,启动更新便停止不再运行;而实时更新是从内存数据库的列表中获取工程设备信息,得到的是更删改的操作信息,这些信息由上层服务器即应用服务器提供的,而且实时更新的线程会一直运行。特别的,同步程序与实时更新程序会同时启动。
作为一种可选的实施例,上述存储数据库可以为mongodb数据库,以上述内存数据库为redis存储数据库为例进行说明,当两种更新同时启动时,数据实时性可能会存在一些特殊情况,比如现在hash表中的数据为:
(project_1工程名test1定位省广东省mac 123456781模块地址1时间2016+07+01+13+32+16,
project_2工程名test2定位省广东省mac 123456782模块地址2时间2016+07+01+13+32+16,
…
project_300工程名test3定位省广东省mac 123456783模块地址2时间2016+07+01+13+32+18,
…)
而redis列表sync_proj的数据为:
(….
insert project 300工程名珠海市格力电器定位省广东省时间2016+07+01+13:32:18,
…
upsert project 300模块地址2)
当启动更新速度快于实时更新速度时,假设已经获取到了增加工程设备标识为300的数据,并写入了各个字段,此时实时更新数据开始处理队列中的(insertproject300…)数据,如果写入不成功,会执行两次写入操作,当得到返回值为nInsert=0且code=11000,说明已经写入,则不再处理。当再次处理时,会更新模块地址为2,而此时mongodb数据库的project集合中工程300的模块地址已经为2,mongodb对于更新为本身的数据值不会再做操作。
如果在服务器中已经删除了工程设备标识为300的数据,hash表中不存在该字段,但redis队列中存在对工程300的修改操作,当同步程序在redis队列中先检测到upsert时,会向mongodb写入upsert命令,mongodb判断是否已经存在该工程,如果不存在会重新构建这条工程设备信息;当从redis队列中获取到remove操作时,这条工程数据将被删除,此时redis与mongodb呈现一致。
如果hash表中已经更改了字段的工程设备信息,而且redis队列中也存在该工程设备信息,开始读取hash表时,会更改mongodb集合中对应的字段;当后期读取redis的队列时,mongodb的数据字段依旧为最新值。
如果是hash表中的文档已经删除某几个字段,redis队列中先操作这几个字段,后续再删除这些字段,则mongodb先构建这几个字段,然后再执行删除操作。
当实时更新速度大于启动更新速度时,实时更新数据已经更新了mongodb中的数据,从hash表中读到project的最新数据。同步程序更新mongodb数据库中的数据,由于更新后的数据与更新前的数据一致,mongodb数据库不再进行操作。需要说明的是,mongodb数据库一种操作叫做upsert,如果文档或者字段存在,则进行更新,如果不存在,则增加文档或字段。
由以上可知,当同步工程设备信息启动后,读取的内存数据库中以键值对方式存储的工程设备信息,并将该内存数据库中的所有工程设备信息同步到存储数据库中或将内存数据库发生更新的工程设备信息更新到存储数据库中,通过上述步骤可以实现内存数据库与存储数据库的同步,因此,可以加快服务器的访问速度,提升服务器的性能,进而解决了现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的技术问题。
可选地,在启动同步工程设备信息之前,方法还包括:
步骤S1020,实时或定时生成多个工程标识,并将多个工程标识依次写入预先创建的内存队列中。
具体的,在启动同步工程设备信息之前,在内存数据库的队列中生成一定数量的整数,这些整数作为工程的唯一标识,将这些作为工程唯一标识的整数写入到内存数据库的队列中。需要说明的是当同步工程设备信息重新启动时,并不会再重新生成这些整数,只是会在该队列的队尾***新的整数,新***的整数以上次队尾的最大值为基准进行递增,该队列不会因为同步工程设备信息的关闭而消失。
作为一种可选的实施例,以redis存储数据库作为内存数据库为例进行说明。假设在redis队列中生成了10个整数,将这10个整数***到redis的队列中,这些整数在redis队列中的结构如表1所示。
表1
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
其中,1为队头,10为队尾。需要说明的是,redis队列最多可存储4294967295列数据。
步骤S1022,在接收到至少一个工程设备上传的设备数据之后,从内存队列中依次读取工程标识。
具体的,在上述步骤中,当服务器接收到一个工程设备上传的数据后,从内存数据库的队列中取出队头数据作为该工程的唯一标识;如果服务器接收到多个工程设备上传的数据后,依次取出内存数据库队列中的队头数据作为每个工程的唯一标识。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,假设服务器只接收到了一个工程设备的数据,则从redis队列中取出队头数据1作为服务器接收到的工程设备的唯一标识,此时redis队列的结构如表2所示。
表2
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
步骤S1024,将每个设备数据依次与依次读取到的工程标识进行关联,并将设备数据***与关联的工程标识对应的位置,得到至少一条工程设备信息,其中,工程设备信息至少包括:工程设备数据以及与工程标识关联的唯一工程标识。
具体的,服务器将获得工程设备信息与从内存数据库队列中取到的工程标识进行一一对应,并将获得的工程设备数据依次***到与该工程设备信息所对应的工程标识所对应的位置,这样便可得到上述工程标识所对应的工程设备信息。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,通过步骤S1022和步骤S1024得到了该工程设备的hash表,该hash表命名为project_1,其工程标识为1,该hash表中存储的信息为该工程设备的工程设备信息。该hash表作为存储数据库表中的一条记录,而所有以project开头的hash表构成了存储数据库中project集合。
步骤S1026,保存至少一条工程设备信息得到内存数据库。
需要说明的是,将进行数据关联后的工程设备信息依次存入内存数据库中,方便后续步骤中使用。
由以上可知,上述方法充分利用了队列先进先出的特性,在队列的队尾添加数据,队头取出数据,这种方式既保证了标识的唯一性,又保证了标识的自增性,而且自增的标识还使得当前工程设备的信息能够更好地表现出来。
可选地,将内存数据库中的所有工程设备信息同步至存储数据库的方法包括:
步骤S202,基于工程关键词遍历内存数据库,得到与工程关键词匹配的所有关键词。
具体的,在上述步骤S202中,使用内存数据库的查询指令,根据输入的工程关键字,可以查询到与该关键字相同或相似的所有关键词。需要说明的是上述搜索关键词的方法可以为模糊搜索,也可以为准确搜索;在模糊搜索的情况下,输入的是不完整的关键词;在准确搜索的情况下,搜索的是完整的关键词。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,redis存储数据库的scan命令可以用来遍历数据库,匹配所有的工程设备信息。例如使用“scan 0match project_*”命令可以遍历整个redis存储数据库中所有以“project_”开头的hash表的键值。在上述命令中,“*”为通配符,“0”代表从第一个匹配项开始进行操作。上述命令执行完毕后的结果为一个数组,该数组中的元素即为与该工程关键词“project_”相匹配的所有关键词,该数组的元素组成可能为“project_1”,“project_2”,“project_3”……该数组元素的多少以及元素值与具体情况下redis数据库中存储的具体数据有关。
步骤S204,根据匹配得到的关键字确定对应的键值,得到存储的所有工程设备信息,其中,关键字用于表征工程标识,键值用于表征与工程标识关联的设备数据。
具体的,在上述步骤S204中,通过使用内存数据库的查询命令遍历整个内存数据库,根据遍历得到的关键字使用内存数据库的键值获取指令,可以得到该关键字所对应的工程设备信息。需要说明的是,关键字是工程设备的唯一标识,而键值代表了该工程设备信息。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,使用redis存储数据库的scan命令遍历完内存数据库后,得到一个关键词数组,假设该关键词数组的组成元素为“project_1”,“project_2”,“project_3”。然后再使用redis存储数据库的“hgetall”命令可以得到该数组中某个关键词所对应的工程设备信息,如执行命令“hgetall project_1”,可以得到工程设备“project_1”下的所有工程设备信息,“project_1”下的工程设备信息可能为“_id 1工程名中央花园”。
步骤S206,将所有工程设备信息同步至存储数据库。
具体的,在上述步骤S206中,在得到了所有的工程设备信息后,将这些工程设备信息更新到存储数据库中,便完成了工程设备信息的更新。
需要说明的是,步骤S202至步骤S206完成的是同步工程数据的启动更新过程,具体的流程图如图2所示。
可选地,工程设备信息包括如下至少之一:工程设备名称、定位省、MAC地址、模块类型以及时间。
具体的,工程设备名称代表区分该工程设备的标志;定位省代表该工程设备所在的省份;MAC地址代表了工程设备的物理地址;使用具体的数值代表模块类型,如使用1代表温度检测模块,2代表故障显示模块等。
可选地,将内存数据库中发生更新的工程设备信息实时同步至存储数据库,包括:
步骤S302,如果检测到内存数据库中的工程设备信息发生更新,读取发生了更新的工程设备信息所对应的更新指令,更新指令包括如下至少之一:增加指令、删除指令和修改指令。
具体的,在上述步骤S302中,在检测到内存数据库中的工程设备信息发生了更新后,发生更新的工程设备信息包含该工程设备发生的具体更新指令,包括增加工程设备信息、删除工程设备信息以及修改工程设备信息。
步骤S304,根据不同的更新指令解析发生了更新的工程设备信息。
具体的,在上述步骤S304中,根据内存数据库队列中的更新指令对已经发生了更新的工程设备信息进行解析处理。
步骤S306,根据解析结果同步更新存储数据库。
在上述步骤步骤S306中,根据步骤S304中的解析结果,将解析后的结果更新到存储数据库中保存更新后的工程设备信息。
需要说明的是,步骤S302至步骤S306完成的是同步工程数据的实时更新过程,具体的流程图如图3所示。
作为一种可选的实施例,如图3所示,在上述步骤S302至步骤S306中,以redis存储数据库作为内存数据库为例进行说明,实时更新命令将放在名为sync_projdev的队列中,同步程序首先从队列中使用“lindex”命令查看数据,根据查看的数据,针对不同的操作进行mongodb数据库更新,更新成功之后,从redis队列中将该条工程设备信息取出,即删除信息。
可选地,如图4所示,在读取发生了更新的工程设备信息所对应的更新操作之前,上述方法还包括:
步骤S3002,接收服务器对内存数据库进行更新的更新指令。
具体的,在对工程设备信息进行更新之前,服务器向内存数据库发送更新指令,内存数据库收到该更新指令后,根据更新指令对内存数据库进行增加、修改和删除操作。
步骤S3004,使用更新指令将内存数据库的内存队列中对应的工程设备信息进行更新,并将更新指令写入更新队列,其中,如果同步程序检测到更新队列中存在更新指令,则确定内存数据库中的工程设备信息发生了更新。
作为一种可选的实施例,在上述步骤S3004中,以redis存储数据库作为内存数据库为例进行说明,实时更新命令将放在名为sync_projdev的队列中,当检测到sync_projdev队列中的存在更新指令,如修改指令时,说明redis存储数据库中的工程设备信息发生了更新,此时,使用修改指令修改redis数据库中的工程设备信息,并将修改指令写入到sync_projdev队列中。之后再完成步骤S302至步骤S306的操作,来实现同步程序的实时更新。
可选地,根据不同的更新指令解析发生了更新的工程设备信息包括:
步骤S104102,解析更新指令的第一个字段,如果第一个字段的内容为***操作,则确定更新指令为增加指令。
步骤S104104,解析更新指令的其他字段,获取第一同步更新信息,其中,第一同步更新信息至少包括:新增的工程设备信息的工程标识和设备数据。
具体的,在上述步骤S104102和步骤S104104中,对已经发生了更新的工程设备信息进行解析,当解析第一个字段的内容为***操作时,以键值逐个加入字符串,如加入标识为3的工程设备信息,如表3所示。
表3
insert | project | 3 | 工程名 | name1 | 模块类型 | 2 | … |
其中,工程名、模块类型为该工程设备包含的字段信息。
作为一种可选的实施例,在上述步骤S104102和步骤S104104中,仍以redis存储数据库作为内存数据库为例进行说明,假设新增的工程设备信息为(insert project 3工程名珠海市格力电器定位省广东省时间2016+07+01+13:32:18)。同步程序从redis存储数据库中取得该工程设备信息,首先解析第一个字段insert,获知为增加指令,然后解析project,说明是操作工程信息,3代表的是工程设备标识,该工程设备标识为工程设备信息的唯一标识,再解析工程与定为省,得到字段珠海市格力电器及珠海市。
可选地,根据不同的更新指令解析发生了更新的工程设备信息包括:
步骤S104106,解析更新指令的第一个字段,如果第一个字段的内容为修改操作,则确定更新指令为修改指令。
步骤S104108,解析更新指令的其他字段,获取第二同步更新信息,其中,第二同步更新信息至少包括:修改后的工程设备信息的工程标识和设备数据。
具体的,在上述步骤S104106和步骤S104108中,对已经发生了更新的工程设备信息进行解析,当解析第一个字段的内容为修改操作时,以键值对的形式修改数据,如修改工程标识为3的信息,如表4所示。
表4
upsert | project | 3 | 工程名 | name2 | 模块类型 | 3 | … |
同步程序将对工程3的工程名由原来的name1改为name2,模块类型由2改为3。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,假设修改的工程设备信息为(upsert project 3工程名香洲百货),解析第一个字段upsert,获知为修改指令,(project 3)则代表是修改标识为3的工程设备信息,(工程名香洲百货)表示将该工程设备信息中的工程名字段换成香洲百货。
可选地,根据不同的更新指令解析发生了更新的工程设备信息包括:
步骤S104110,解析更新指令的第一个字段,如果第一个字段的内容为删除操作,则确定更新指令为删除指令。
步骤S104112,解析更新指令的其他字段,获取第三同步更新信息,其中,第三同步更新信息至少包括:需要删除的工程设备信息的工程标识和设备数据。
具体的,在上述步骤S104110和步骤S104112中,对已经发生了更新的工程设备信息进行解析,当解析第一个字段的内容为删除操作时,根据内存数据库与存储数据库的操作,将其分为对文档的删除及对字段的删除。
当解析第一个字段的内容为删除文档操作时,根据唯一标识删除某个文档,如:表5所示。
表5
remove | project | 3 |
该操作将删除工程标识为3的所有信息。
当解析第一个字段的内容为删除字段操作时,详细操作字符串中列出需要删除的字段名称,如表6所示。
表6
unset | project | 3 | 工程名 | MAC地址 | 模块类型 | 定位省 | … |
该操作将删除工程3的工程名,MAC地址,模块类型,定位省等信息。
作为一种可选的实施例,在上述步骤S104106和步骤S104108中,仍以redis存储数据库作为内存数据库为例进行说明,假设删除文档的工程设备信息为(remove project3),首先解析remove字段确定该条工程设备信息为删除文档操作,然后根据(project3)确定需要删除工程3的记录。假设删除字段的工程设备信息为(unset project 3 MAC模块地址),首先解析出unset字段确定该条工程设备信息为删除字段操作,然后根据(project 3)确定需要删除工程3中的字段,最后根据(MAC,模块地址),删除为需要删除mac和模块地址这两个字段。
可选地,如图4所示,根据解析结果同步更新存储数据库的方法包括:
步骤S3010,根据解析结果组成写入命令。
步骤S3012,将写入命令同步至存储数据库,使得存储数据库根据写入命令执行更新操作。
具体的,在上述步骤S3010和步骤S3012中,在根据更新指令解析已经发生了更新的设备信息后,将解析结果组成写入命令,存储数据库根据写入命令更新数据库。
作为一种可选的实施例,以redis数据库作为内存数据库,mongodb数据库作为存储数据库为例进行说明,假设解析后的结果为(insert project 3珠海市格力电器广东省2016+07+01+13:32:18),将上述解析后的结果组成写入命令,mongodb数据库执行***操作,将(project 3珠海市格力电器广东省2016+07+01+13:32:18)***到mongodb数据库表所对应的列中,完成了mongodb数据库的更新。
可选地,在根据解析结果同步更新存储数据库之后,如图4所示,确定存储数据库是否更新成功的方法包括:
步骤S3014,在写入命令指示需要增加工程设备信息的情况下,如果返回的参数值为非负数,则确定存储数据库中成功增加工程设备信息;在写入命令指示需要修改工程设备信息的情况下,如果返回的参数值为非负数,则确定存储数据库中成功修改工程设备信息;在写入命令指示需要删除工程设备信息的情况下,如果返回的参数值为非负数,则确定存储数据库中成功删除工程设备信息;其中,在任意一个参数值非负数的情况下,确定存储数据库是否更新失败。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,对redis队列中的命令进行解析后,组成mongodb数据库的写入命令,更新mongodb。对于不同的操作,如果连接mongodb正常,执行命令后会返回不同的操作结果:WriteResult:
在写入命令指示需要增加工程设备信息的情况下,执行Insert指令,返回nInserted参数,如果nInserted>=0,则判断增加操作成功;
在写入命令指示需要修改工程设备信息的情况下,执行IUpsert指令,返回nMatched参数,如果nMatched>=0,判断修改操作成功;
在写入命令指示需要删除工程设备信息的情况下,执行Remove指令,返回nRemoved参数,如果nRemoved>=0,判断删除文档操作成功;
在写入命令指示需要删除工程设备信息的情况下,执行Unset指令,返回nMatched参数,如果nMatched>=0,判断删除字段操作成功。
实施例2
根据本发明实施例,提供了一种同步工程数据的***实施例,图5是根据本发明实施例的同步工程数据的***结构示意图,包括存储器401、实时更新设备403和启动更新设备405,如图5所示。
存储器401,用于存储工程设备信息的实时更新数据。
需要说明的是,存储器用于存储实时更新设备和启动更新设备的更新工程设备信息,存储器可以为mongodb数据库,用来长期存放工程设备信息,也可以为redis数据库用来临时存放工程设备信息。
实时更新设备403,用于获取存储器的实时更新数据,并解析实时更新数据,获取解析后的操作指令,并根据操作指令更新存储数据库中的工程设备信息。
具体的,在对工程设备信息进行更新之前,服务器向内存数据库发送更新指令,内存数据库收到该更新指令后,根据更新指令对内存数据库进行增加、修改和删除操作;当同步程序检测到更新队列中存在更新指令时,说明内存数据库中的工程设备信息发生了更新,此时,根据更新指令更新内存队列中的工程设备信息,并将更新指令写入更新队列中;在检测到内存数据库中的工程设备信息发生了更新后,发生更新的工程设备信息包含该工程设备发生的具体更新指令,包括增加工程设备信息、删除工程设备信息以及修改工程设备信息;根据内存数据库队列中的更新指令对已经发生了更新的工程设备信息进行解析处理;将解析后的工程设备信息更新到存储数据库中,便完成了工程设备信息的实时更新。
启动更新设备405,用于获取内存数据库的队列中所有工程设备信息,并将工程设备信息更新到存储数据库中。
具体的,使用内存数据库的查询指令,根据输入的工程关键字,可以查询到与该关键字相同或相似的所有关键词;根据遍历得到的关键字使用内存数据库的键值获取指令,可以得到该关键字所对应的工程设备信息;在得到了所有的工程设备信息后,将这些工程设备信息更新到存储数据库中,便完成了工程设备信息的启动更新。
需要说明的是启动更新和实时更新是双线程同时进行的,两者的区别在于启动更新需要从内存数据库中读取所有的工程设备信息,并将这些工程设备信息存储到存储数据库中,当遍历完所有的工程设备信息后,启动更新便停止不再运行;而实时更新是从内存数据库的列表中获取工程设备信息,得到的是更删改的操作信息,这些信息由上层服务器即应用服务器提供的,而且实时更新的线程会一直运行。特别的,同步程序与实时更新程序会同时启动。
由以上可知,当同步工程设备信息启动后,读取的内存数据库中以键值对方式存储的工程设备信息,并将该内存数据库中的所有工程设备信息同步到存储数据库中或将内存数据库发生更新的工程设备信息更新到存储数据库中,通过上述***可以实现内存数据库与存储数据库的同步,因此,可以加快服务器的访问速度,提升服务器的性能,进而解决了现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的技术问题。
实施例3
根据本发明实施例,提供了一种同步工程数据的装置实施例,图6是根据本发明实施例的同步工程数据的装置结构示意图,包括读取模块501和更新模块503,如图6所示。
读取模块501,用于在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在内存数据库中存储任意一条工程设备信息。
具体的,所有的工程设备信息以键值对的形式存于内存数据库中,查询关键字所对应的值可以从内存数据库中读取工程设备信息。
需要说明的是,上述内存数据库可以是redis存储数据库,从redis存储数据库中存取数据的方式均为:关键字+关键字对应的值。
作为一种可选的实施例,以上述内存数据库为redis存储数据库为例进行说明,在启动同步工程设备信息之前,需要使用键值对的方式存储工程设备信息,可以使用hmset命令存储工程设备信息,如执行语句“hmset project_id 1工程名称中央花园”,可以将工程标识为“1”,工程名称为“中央花园”的工程信息存储在redis存储数据库中,上述语句中,“project”代表工程信息,唯一标识“_id”为第一个域,“1”为第一个值,“工程名称”为第二个域,“中央花园”为第二个值。在启动同步工程设备信息的情况下,可以读取内存数据库中的工程设备信息,可以使用hmget命令读取工程设备信息,如执行语句“hmget project_1_id工程名”,可以得到工程标识为“1”的唯一标识与工程名称信息。
更新模块503,用于将内存数据库中的所有工程设备信息同步至存储数据库,和/或,将内存数据库中发生更新的工程设备信息实时同步至存储数据库,其中,存储在内存数据库中的任意一条工程设备信息作为一工程记录存储至存储数据库。
具体的,在启动同步工程设备信息的情况下,为了防止服务器已经启动了一段时间,此时需要使用启动更新,即将内存数据库中的所有工程设备信息同步至存储数据库;将内存数据库中发生更新的工程设备信息实时同步至存储数据库的过程为实时更新的过程。
需要说明的是启动更新和实时更新是双线程同时进行的,两者的区别在于启动更新需要从内存数据库中读取所有的工程设备信息,并将这些工程设备信息存储到存储数据库中,当遍历完所有的工程设备信息后,启动更新便停止不再运行;而实时更新是从内存数据库的列表中获取工程设备信息,得到的是更删改的操作信息,这些信息由上层服务器即应用服务器提供的,而且实时更新的线程会一直运行。特别的,同步程序与实时更新程序会同时启动。
作为一种可选的实施例,上述存储数据库可以为mongodb数据库,以上述内存数据库为redis存储数据库为例进行说明,当两种更新同时启动时,数据实时性可能会存在一些特殊情况,比如现在hash表中的数据为:
(project_1工程名test1定位省广东省mac 123456781模块地址1时间2016+07+01+13+32+16,
project_2工程名test2定位省广东省mac 123456782模块地址2时间2016+07+01+13+32+16,
…
project_300工程名test3定位省广东省mac 123456783模块地址2时间2016+07+01+13+32+18,
…)
而redis列表sync_proj的数据为:
(….
insert project 300工程名珠海市格力电器定位省广东省时间2016+07+01+13:32:18,
…
upsert project 300模块地址2)
当启动更新速度快于实时更新速度时,假设已经获取到了增加工程设备标识为300的数据,并写入了各个字段,此时实时更新数据开始处理队列中的(insertproject300…)数据,如果写入不成功,会执行两次写入操作,当得到返回值为nInsert=0且code=11000,说明已经写入,则不再处理。当再次处理时,会更新模块地址为2,而此时mongodb数据库的project集合中工程300的模块地址已经为2,mongodb对于更新为本身的数据值不会再做操作。
如果在服务器中已经删除了工程设备标识为300的数据,hash表中不存在该字段,但redis队列中存在对工程300的修改操作,当同步程序在redis队列中先检测到upsert时,会向mongodb写入upsert命令,mongodb判断是否已经存在该工程,如果不存在会重新构建这条工程设备信息;当从redis队列中获取到remove操作时,这条工程数据将被删除,此时redis与mongodb呈现一致。
如果hash表中已经更改了字段的工程设备信息,而且redis队列中也存在该工程设备信息,开始读取hash表时,会更改mongodb集合中对应的字段;当后期读取redis的队列时,mongodb的数据字段依旧为最新值。
如果是hash表中的文档已经删除某几个字段,redis队列中先操作这几个字段,后续再删除这些字段,则mongodb先构建这几个字段,然后再执行删除操作。
当实时更新速度大于启动更新速度时,实时更新数据已经更新了mongodb中的数据,从hash表中读到project的最新数据。同步程序更新mongodb数据库中的数据,由于更新后的数据与更新前的数据一致,mongodb数据库不再进行操作。需要说明的是,mongodb数据库一种操作叫做upsert,如果文档或者字段存在,则进行更新,如果不存在,则增加文档或字段。
由以上可知,当同步工程设备信息启动后,读取的内存数据库中以键值对方式存储的工程设备信息,并将该内存数据库中的所有工程设备信息同步到存储数据库中或将内存数据库发生更新的工程设备信息更新到存储数据库中,通过上述步骤可以实现内存数据库与存储数据库的同步,因此,可以加快服务器的访问速度,提升服务器的性能,进而解决了现有技术中客户端或服务器直接对数据库进行操作时,机组运行数据的急剧增长使得内存数据库与存储数据库不能实时同步的技术问题。
可选地,在启动同步工程设备信息之前,如图7所示,上述装置还包括:
第一写入模块601,用于实时或定时生成多个工程标识,并将多个工程标识依次写入预先创建的内存队列中。
具体的,在启动同步工程设备信息之前,在内存数据库的队列中生成一定数量的整数,这些整数作为工程的唯一标识,将这些作为工程唯一标识的整数写入到内存数据库的队列中。需要说明的是当同步工程设备信息重新启动时,并不会再重新生成这些整数,只是会在该队列的队尾***新的整数,新***的整数以上次队尾的最大值为基准进行递增,该队列不会因为同步工程设备信息的关闭而消失。
作为一种可选的实施例,以redis存储数据库作为内存数据库为例进行说明。假设在redis队列中生成了10个整数,将这10个整数***到redis的队列中,这些整数在redis队列中的结构如表7所示。
表7
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
其中,1为队头,10为队尾。需要说明的是,redis队列最多可存储4294967295列数据。
第一读取模块603,用于在接收到至少一个工程设备上传的设备数据之后,从内存队列中依次读取工程标识。
具体的,当服务器接收到一个工程设备上传的数据后,从内存数据库的队列中取出队头数据作为该工程的唯一标识;如果服务器接收到多个工程设备上传的数据后,依次取出内存数据库队列中的队头数据作为每个工程的唯一标识。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,假设服务器只接收到了一个工程设备的数据,则从redis队列中取出队头数据1作为服务器接收到的工程设备的唯一标识,此时redis队列的结构如表8所示。
表8
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
第一匹配模块605,用于将每个设备数据依次与依次读取到的工程标识进行关联,并将设备数据***与关联的工程标识对应的位置,得到至少一条工程设备信息,其中,工程设备信息至少包括:工程设备数据以及与工程标识关联的唯一工程标识。
具体的,服务器将获得工程设备信息与从内存数据库队列中取到的工程标识进行一一对应,并将获得的工程设备数据依次***到与该工程设备信息所对应的工程标识所对应的位置,这样便可得到上述工程标识所对应的工程设备信息。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,通过步骤S1022和步骤S1024得到了该工程设备的hash表,该hash表命名为project_1,其工程标识为1,该hash表中存储的信息为该工程设备的工程设备信息。该hash表作为存储数据库表中的一条记录,而所有以project开头的hash表构成了存储数据库中project集合。
第一存储模块607,用于保存至少一条工程设备信息得到内存数据库。
需要说明的是,将进行数据关联后的工程设备信息依次存入内存数据库中,方便后续步骤中使用。
由以上可知,上述方法充分利用了队列先进先出的特性,在队列的队尾添加数据,队头取出数据,这种方式既保证了标识的唯一性,又保证了标识的自增性,而且自增的标识还使得当前工程设备的信息能够更好地表现出来。
可选地,如图8所示,更新模块503包括:
搜索模块701,用于基于工程关键词遍历内存数据库,得到与工程关键词匹配的所有关键词。
具体的,使用内存数据库的查询指令,根据输入的工程关键字,可以查询到与该关键字相同或相似的所有关键词。需要说明的是上述搜索关键词的方法可以为模糊搜索,也可以为准确搜索;在模糊搜索的情况下,输入的是不完整的关键词;在准确搜索的情况下,搜索的是完整的关键词。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,redis存储数据库的scan命令可以用来遍历数据库,匹配所有的工程设备信息。例如使用“scan 0 match project_*”命令可以遍历整个redis存储数据库中所有以“project_”开头的hash表的键值。在上述命令中,“*”为通配符,“0”代表从第一个匹配项开始进行操作。上述命令执行完毕后的结果为一个数组,该数组中的元素即为与该工程关键词“project_”相匹配的所有关键词,该数组的元素组成可能为“project_1”,“project_2”,“project_3”……该数组元素的多少以及元素值与具体情况下redis数据库中存储的具体数据有关。
第二匹配模块703,用于根据匹配得到的关键字确定对应的键值,得到存储的所有工程设备信息,其中,关键字用于表征工程标识,键值用于表征与工程标识关联的设备数据。
具体的,通过使用内存数据库的查询命令遍历整个内存数据库,根据遍历得到的关键字使用内存数据库的键值获取指令,可以得到该关键字所对应的工程设备信息。需要说明的是,关键字是工程设备的唯一标识,而键值代表了该工程设备信息。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,使用redis存储数据库的scan命令遍历完内存数据库后,得到一个关键词数组,假设该关键词数组的组成元素为“project_1”,“project_2”,“project_3”。然后再使用redis存储数据库的“hgetall”命令可以得到该数组中某个关键词所对应的工程设备信息,如执行命令“hgetall project_1”,可以得到工程设备“project_1”下的所有工程设备信息,“project_1”下的工程设备信息可能为“_id 1工程名中央花园”。
第一同步模块705,用于将所有工程设备信息同步至存储数据库。
具体的,在得到了所有的工程设备信息后,将这些工程设备信息更新到存储数据库中,便完成了工程设备信息的更新。
可选地,工程设备信息包括如下至少之一:工程设备名称、定位省、MAC地址、模块类型以及时间。
具体的,工程设备名称代表区分该工程设备的标志;定位省代表该工程设备所在的省份;MAC地址代表了工程设备的物理地址;使用具体的数值代表模块类型,如使用1代表温度检测模块,2代表故障显示模块等。
可选地,如图9所示,更新模块503还包括:
第一读取模块801,用于如果检测到内存数据库中的工程设备信息发生更新,读取发生了更新的工程设备信息所对应的更新指令,更新指令包括如下至少之一:增加指令、删除指令和修改指令。
具体的,在检测到内存数据库中的工程设备信息发生了更新后,发生更新的工程设备信息包含该工程设备发生的具体更新指令,包括增加工程设备信息、删除工程设备信息以及修改工程设备信息。
第一解析模块803,用于根据不同的更新指令解析发生了更新的工程设备信息。
具体的,根据内存数据库队列中的更新指令对已经发生了更新的工程设备信息进行解析处理。
第二同步模块805,用于根据解析结果同步更新存储数据库。
作为一种可选的实施例,以redis存储数据库作为内存数据库为例进行说明,实时更新命令将放在名为sync_projdev的队列中,同步程序首先从队列中使用“lindex”命令查看数据,根据查看的数据,针对不同的操作进行mongodb数据库更新,更新成功之后,从redis队列中将该条工程设备信息取出,即删除信息。
可选地,如图10所示,上述装置还包括:
接收模块901,用于接收服务器对内存数据库进行更新的更新指令。
具体的,在对工程设备信息进行更新之前,服务器向内存数据库发送更新指令,内存数据库收到该更新指令后,根据更新指令对内存数据库进行增加、修改和删除操作。
第二写入模块903,用于使用更新指令将内存数据库的内存队列中对应的工程设备信息进行更新,并将更新指令写入更新队列,其中,如果同步程序检测到更新队列中存在更新指令,则确定内存数据库中的工程设备信息发生了更新。
具体的,当同步程序检测到更新队列中存在更新指令时,说明内存数据库中的工程设备信息发生了更新,此时,根据更新指令更新内存队列中的工程设备信息,并将更新指令写入更新队列中。
作为一种可选的实施例,以redis存储数据库作为内存数据库为例进行说明,实时更新命令将放在名为sync_projdev的队列中,当检测到sync_projdev队列中的存在更新指令,如修改指令时,说明redis存储数据库中的工程设备信息发生了更新,此时,使用修改指令修改redis数据库中的工程设备信息,并将修改指令写入到sync_projdev队列中。之后再完成步骤S10406至步骤S10410的操作,来实现同步程序的实时更新。
可选地,如图11a所示,根据不同的更新指令解析发生了更新的工程设备信息更新模块503包括:
***模块1001,用于解析更新指令的第一个字段,如果第一个字段的内容为***操作,则确定更新指令为增加指令;解析更新指令的其他字段,获取第一同步更新信息,其中,第一同步更新信息至少包括:新增的工程设备信息的工程标识和设备数据。
具体的,对已经发生了更新的工程设备信息进行解析,当解析第一个字段的内容为***操作时,以键值逐个加入字符串,如加入标识为3的工程设备信息如表9所示。
表9
insert | project | 3 | 工程名 | name1 | 模块类型 | 2 | … |
其中,工程名,模块类型为该工程设备包含的字段信息。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,假设新增的工程设备信息为(insert project 3工程名珠海市格力电器定位省广东省时间2016+07+01+13:32:18)。同步程序从redis存储数据库中取得该工程设备信息,首先解析第一个字段insert,获知为增加指令,然后解析project,说明是操作工程信息,3代表的是工程设备标识,该工程设备标识为工程设备信息的唯一标识,再解析工程与定为省,得到字段珠海市格力电器及珠海市。
可选地,如图11b所示,更新模块503包括:
修改模块1003,用于解析更新指令的第一个字段,如果第一个字段的内容为修改操作,则确定更新指令为修改指令;解析更新指令的其他字段,获取第二同步更新信息,其中,第二同步更新信息至少包括:修改后的工程设备信息的工程标识和设备数据。
具体的,对已经发生了更新的工程设备信息进行解析,当解析第一个字段的内容为修改操作时,以键值对的形式修改数据,如修改工程标识为3的信息,如表10所示。
表10
upsert | project | 3 | 工程名 | name2 | 模块类型 | 3 | … |
同步程序将对工程3的工程名由原来的name1改为name2,模块类型由2改为3。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,假设修改的工程设备信息为(upsert project 3工程名香洲百货),解析第一个字段upsert,获知为修改指令,(project 3)则代表是修改标识为3的工程设备信息,(工程名香洲百货)表示将该工程设备信息中的工程名字段换成香洲百货。
可选地,如图11c所示,更新模块503包括:
删除模块1005,用于解析更新指令的第一个字段,如果第一个字段的内容为删除操作,则确定更新指令为删除指令;解析更新指令的其他字段,获取第三同步更新信息,其中,第三同步更新信息至少包括:需要删除的工程设备信息的工程标识和设备数据。
具体的,对已经发生了更新的工程设备信息进行解析,当解析第一个字段的内容为删除操作时,根据内存数据库与存储数据库的操作,将其分为对文档的删除及对字段的删除。
当解析第一个字段的内容为删除文档操作时,根据唯一标识删除某个文档,如表11所示。
表11
remove | project | 3 |
该操作将删除工程标识为3的所有信息。
当解析第一个字段的内容为删除字段操作时,详细操作字符串中列出需要删除的字段名称,如表12所示。
表12
unset | project | 3 | 工程名 | MAC地址 | 模块类型 | 定位省 | … |
该操作将删除工程3的工程名,MAC地址,模块类型,定位省等信息。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,假设删除文档的工程设备信息为(remove project 3),首先解析remove字段确定该条工程设备信息为删除文档操作,然后根据(project 3)确定需要删除工程3的记录。假设删除字段的工程设备信息为(unset project 3 MAC模块地址),首先解析出unset字段确定该条工程设备信息为删除字段操作,然后根据(project 3)确定需要删除工程3中的字段,最后根据(MAC,模块地址),删除为需要删除mac和模块地址这两个字段。
可选地,如图12所示,第二同步模块805包括:
第三写入模块1101,用于根据解析结果组成写入命令;将写入命令同步至存储数据库,使得存储数据库根据写入命令执行更新操作。
具体的,在根据更新指令解析已经发生了更新的设备信息后,将解析结果组成写入命令,存储数据库根据写入命令更新数据库。
作为一种可选的实施例,以redis数据库作为内存数据库,mongodb数据库作为存储数据库为例进行说明,假设解析后的结果为(insert project 3珠海市格力电器广东省2016+07+01+13:32:18),将上述解析后的结果组成写入命令,mongodb数据库执行***操作,将(project 3珠海市格力电器广东省2016+07+01+13:32:18)***到mongodb数据库表所对应的列中,完成了mongodb数据库的更新。
可选地,在根据解析结果同步更新存储数据库之后,确定存储数据库是否更新成功的方法包括:在写入命令指示需要增加工程设备信息的情况下,如果返回的参数值为非负数,则确定存储数据库中成功增加工程设备信息;在写入命令指示需要修改工程设备信息的情况下,如果返回的参数值为非负数,则确定存储数据库中成功修改工程设备信息;在写入命令指示需要删除工程设备信息的情况下,如果返回的参数值为非负数,则确定存储数据库中成功删除工程设备信息;其中,在任意一个参数值非负数的情况下,确定存储数据库是否更新失败。
作为一种可选的实施例,仍以redis存储数据库作为内存数据库为例进行说明,对redis队列中的命令进行解析后,组成mongodb数据库的写入命令,更新mongodb。对于不同的操作,如果连接mongodb正常,执行命令后会返回不同的操作结果:WriteResult:
在写入命令指示需要增加工程设备信息的情况下,执行Insert指令,返回nInserted参数,如果nInserted>=0,则判断增加操作成功;
在写入命令指示需要修改工程设备信息的情况下,执行IUpsert指令,返回nMatched参数,如果nMatched>=0,判断修改操作成功;
在写入命令指示需要删除工程设备信息的情况下,执行Remove指令,返回nRemoved参数,如果nRemoved>=0,判断删除文档操作成功;
在写入命令指示需要删除工程设备信息的情况下,执行Unset指令,返回nMatched参数,如果nMatched>=0,判断删除字段操作成功。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种同步工程数据的方法,其特征在于,包括:
在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在所述内存数据库中存储所述至少一条工程设备信息;
将所述内存数据库中的所有工程设备信息同步至存储数据库,和/或,将所述内存数据库中发生更新的工程设备信息实时同步至所述存储数据库,其中,存储在所述内存数据库中的所述至少一条工程设备信息作为一条工程记录存储至所述存储数据库;
在启动同步工程设备信息之前,所述方法包括:实时或定时生成多个工程标识,并将所述多个工程标识依次写入预先创建的内存队列中;在接收到至少一个工程设备上传的设备数据之后,从所述内存队列中依次读取工程标识;将每个设备数据依次与所述依次读取到的工程标识进行关联,并将设备数据***与关联的工程标识对应的队列位置,得到所述至少一条工程设备信息,其中,所述工程设备信息至少包括:所述设备数据以及与所述设备数据关联的唯一工程标识;保存所述至少一条工程设备信息得到所述内存数据库。
2.根据权利要求1所述的方法,其特征在于,将所述内存数据库中的所有工程设备信息同步至存储数据库,包括:
基于工程关键词遍历所述内存数据库,得到与所述工程关键词匹配的所有关键字;
根据匹配得到的关键字确定对应的键值,得到存储的所有工程设备信息,其中,所述关键字用于表征工程标识,所述键值用于表征与所述工程标识关联的设备数据;
将所述所有工程设备信息同步至所述存储数据库。
3.根据权利要求2所述的方法,其特征在于,所述工程设备信息包括如下至少之一:工程设备名称、定位省、MAC地址、模块类型以及时间。
4.根据权利要求1所述的方法,其特征在于,将所述内存数据库中发生更新的工程设备信息实时同步至所述存储数据库,包括:
如果检测到所述内存数据库中的工程设备信息发生更新,读取发生了更新的工程设备信息所对应的更新指令,所述更新指令包括如下至少之一:增加指令、删除指令和修改指令;
根据不同的更新指令解析所述发生了更新的工程设备信息;
根据解析结果同步更新所述存储数据库。
5.根据权利要求4所述的方法,其特征在于,在读取发生了更新的工程设备信息所对应的更新操作之前,所述方法还包括:
接收服务器对所述内存数据库进行更新的更新指令;
使用所述更新指令将所述内存数据库的内存队列中对应的工程设备信息进行更新,并将所述更新指令写入更新队列;
其中,如果同步程序检测到所述更新队列中存在所述更新指令,则确定所述内存数据库中的工程设备信息发生了更新。
6.根据权利要求5所述的方法,其特征在于,根据不同的更新指令解析所述发生了更新的工程设备信息包括:
解析所述更新指令的第一个字段,如果所述第一个字段的内容为***操作,则确定所述更新指令为所述增加指令;
解析所述更新指令的其他字段,获取第一同步更新信息,其中,所述第一同步更新信息至少包括:新增的工程设备信息的工程标识和设备数据。
7.根据权利要求5所述的方法,其特征在于,根据不同的更新指令解析所述发生了更新的工程设备信息包括:
解析所述更新指令的第一个字段,如果所述第一个字段的内容为修改操作,则确定所述更新指令为所述修改指令;
解析所述更新指令的其他字段,获取第二同步更新信息,其中,所述第二同步更新信息至少包括:修改后的工程设备信息的工程标识和设备数据。
8.根据权利要求5所述的方法,其特征在于,根据不同的更新指令解析所述发生了更新的工程设备信息包括:
解析所述更新指令的第一个字段,如果所述第一个字段的内容为删除操作,则确定所述更新指令为所述删除指令;
解析所述更新指令的其他字段,获取第三同步更新信息,其中,所述第三同步更新信息至少包括:需要删除的工程设备信息的工程标识和设备数据。
9.根据权利要求4所述的方法,其特征在于,根据解析结果同步更新所述存储数据库,包括:
根据解析结果组成写入命令;
将所述写入命令同步至所述存储数据库,使得所述存储数据库根据所述写入命令执行更新操作。
10.根据权利要求9所述的方法,其特征在于,在根据解析结果同步更新所述存储数据库之后,所述方法包括:确定所述存储数据库是否更新成功,步骤包括:
在所述写入命令指示需要增加工程设备信息的情况下,如果返回的参数值为非负数,则确定所述存储数据库中成功增加工程设备信息;
在所述写入命令指示需要修改工程设备信息的情况下,如果返回的参数值为非负数,则确定所述存储数据库中成功修改工程设备信息;
在所述写入命令指示需要删除工程设备信息的情况下,如果返回的参数值为非负数,则确定所述存储数据库中成功删除工程设备信息;
其中,在任意一个参数值非负数的情况下,确定所述存储数据库是否更新失败。
11.一种同步工程数据的***,其特征在于,包括:
存储器,用于存储工程设备信息的实时更新数据;
实时更新设备,用于获取所述存储器的所述实时更新数据,并解析所述实时更新数据,获取解析后的操作指令,并根据所述操作指令更新存储数据库中的所述工程设备信息;
启动更新设备,用于获取内存数据库的队列中所有所述工程设备信息,并将所述工程设备信息更新到所述存储数据库中;
在启动同步工程设备信息之前,所述***还用于实时或定时生成多个工程标识,并将所述多个工程标识依次写入预先创建的内存队列中;在接收到至少一个工程设备上传的设备数据之后,从所述内存队列中依次读取工程标识;将每个设备数据依次与所述依次读取到的工程标识进行关联,并将设备数据***与关联的工程标识对应的队列位置,得到至少一条工程设备信息,其中,所述工程设备信息至少包括:所述设备数据以及与所述设备数据关联的唯一工程标识;保存所述至少一条工程设备信息得到所述内存数据库。
12.一种同步工程数据的装置,其特征在于,包括:
读取模块,用于在启动同步工程设备信息的情况下,从内存数据库中读取至少一条工程设备信息,其中,以键值对的方式在所述内存数据库中存储所述至少一条工程设备信息;
更新模块,用于将所述内存数据库中的所有工程设备信息同步至存储数据库,和/或,将所述内存数据库中发生更新的工程设备信息实时同步至所述存储数据库,其中,存储在所述内存数据库中的所述至少一条工程设备信息作为一条工程记录存储至所述存储数据库;
在启动同步工程设备信息之前,所述装置还包括:第一写入模块,用于实时或定时生成多个工程标识,并将所述多个工程标识依次写入预先创建的内存队列中;第一读取模块,用于在接收到至少一个工程设备上传的设备数据之后,从所述内存队列中依次读取工程标识;第一匹配模块,用于将每个设备数据依次与所述依次读取到的工程标识进行关联,并将设备数据***与关联的工程标识对应的队列位置,得到所述至少一条工程设备信息,其中,所述工程设备信息至少包括:
所述设备数据以及与所述设备数据关联的唯一工程标识;第一存储模块,用于保存所述至少一条工程设备信息得到所述内存数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610658456.6A CN106294769B (zh) | 2016-08-11 | 2016-08-11 | 同步工程数据的方法、***和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610658456.6A CN106294769B (zh) | 2016-08-11 | 2016-08-11 | 同步工程数据的方法、***和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106294769A CN106294769A (zh) | 2017-01-04 |
CN106294769B true CN106294769B (zh) | 2019-08-27 |
Family
ID=57668929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610658456.6A Active CN106294769B (zh) | 2016-08-11 | 2016-08-11 | 同步工程数据的方法、***和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106294769B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109614442B (zh) * | 2018-11-02 | 2020-12-25 | 东软集团股份有限公司 | 数据同步的数据表维护方法、装置、存储介质和电子设备 |
CN109828994A (zh) * | 2018-12-05 | 2019-05-31 | 深圳市双合电气股份有限公司 | 一种政府能源管理平台的数据管理方法和*** |
CN110597910A (zh) * | 2019-09-12 | 2019-12-20 | 聚好看科技股份有限公司 | 一种异地数据同步方法、装置和*** |
CN111984663B (zh) * | 2020-08-21 | 2024-03-12 | 西安寰宇卫星测控与数据应用有限公司 | Redis数据库更新方法、装置、计算机设备、存储介质 |
CN113064913A (zh) * | 2021-03-26 | 2021-07-02 | 北京深思数盾科技股份有限公司 | 交互语句处理方法、电子设备及计算机可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778225B (zh) * | 2015-03-27 | 2017-12-12 | 浙江大学 | 一种非结构化数据多存储***中同步数据的方法 |
CN105262831B (zh) * | 2015-10-30 | 2019-02-22 | 北京奇艺世纪科技有限公司 | 一种存储***间同步数据的方法、装置及同步*** |
CN105589959A (zh) * | 2015-12-22 | 2016-05-18 | 北京京东尚科信息技术有限公司 | 表单处理方法和表单*** |
-
2016
- 2016-08-11 CN CN201610658456.6A patent/CN106294769B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN106294769A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106294769B (zh) | 同步工程数据的方法、***和装置 | |
US10237295B2 (en) | Automated event ID field analysis on heterogeneous logs | |
CN105243067B (zh) | 一种实现实时增量同步数据的方法及装置 | |
CN108536752B (zh) | 一种数据同步方法、装置和设备 | |
CN109189852B (zh) | 一种数据同步的方法及用于数据同步的装置 | |
US11481440B2 (en) | System and method for processing metadata to determine an object sequence | |
CN106407360B (zh) | 一种数据的处理方法及装置 | |
US20170031948A1 (en) | File synchronization method, server, and terminal | |
CN106874281B (zh) | 实现数据库读写分离的方法和装置 | |
CN104679847B (zh) | 一种构建在线实时更新海量音频指纹库的方法和设备 | |
CN103034735A (zh) | 一种大数据分布式文件导出方法 | |
CN106709066B (zh) | 数据同步方法及装置 | |
CN105760380A (zh) | 数据库查询方法、装置及*** | |
CN106250476B (zh) | 一种更新和同步白名单的方法、装置和*** | |
US20090132607A1 (en) | Techniques for log file processing | |
CN114116762A (zh) | 一种离线数据模糊搜索方法、装置、设备和介质 | |
CN113672692B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN105760485A (zh) | 财务数据抽取方法及*** | |
CN104463460B (zh) | 用于网络数据投放的排期信息的处理方法及装置 | |
US20180240053A1 (en) | System and Method for Associating a Multi-segment Component Transaction | |
CN109101368A (zh) | 一种数据处理方法及装置 | |
CN106569986B (zh) | 字符串替换方法和装置 | |
CN117240943A (zh) | 接口数据解析方法和装置 | |
CN103220355B (zh) | 内容分发网络中的多用户配置方法 | |
CN105893445A (zh) | 数据处理的方法、服务器和终端设备 |
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 |