CN102929943A - 数据输出方法及装置 - Google Patents
数据输出方法及装置 Download PDFInfo
- Publication number
- CN102929943A CN102929943A CN2012103718965A CN201210371896A CN102929943A CN 102929943 A CN102929943 A CN 102929943A CN 2012103718965 A CN2012103718965 A CN 2012103718965A CN 201210371896 A CN201210371896 A CN 201210371896A CN 102929943 A CN102929943 A CN 102929943A
- Authority
- CN
- China
- Prior art keywords
- output data
- data
- time
- output
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据输出方法及装置。该方法包括:步骤1,获取数据输出请求,判断存储空间中是否存在相应合法的输出数据,如果存在,则发送输出数据,否则,判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果存在,则从数据文件中获取该输出数据并发送,否则,从数据库中读取该输出数据并发送,并根据从数据库中读取的输出数据异步更新存储空间以及数据文件;步骤2,根据缓存时间戳、以及哈希表判断保存在存储空间和/或数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从数据库中读取相应的输出数据,并根据从数据库中读取的输出数据更新存储空间和/或数据文件,如果判断为是,结束操作。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种数据输出方法及装置。
背景技术
在现有技术中,普通网页在处理时会尽可能的减少输出内容,以确保良好的用户体验,但是,在进行大数据量的网页输出时,例如,团购导航输出的数据量会随团购业务的不断扩展而逐步增加。如何保证数据的高时效性,减少输出时间,保证系统的高可靠性,是急需解决的问题。
目前,在现有技术中,在网页输出数据量比较少的情况下,读取缓存时,会判断缓存状态,如果失效或不存在,将访问数据库获取新数据,并同时更新缓存。
在输出数据量比较少时,这种解决方案是可以接受的,但当输出数据量不断增加后,输出消耗总时间显著增加,缓存访问并发访问次数增大,尤其是遇到并发访问加大时,同时缓存又失效,系统随时有宕机的可能性。
发明内容
本发明提供一种数据输出方法及装置,以在进行大数据量的网页输出时,保证数据的高时效性,减少输出时间,保证系统的高可靠性。
本发明提供一种数据输出方法,包括步骤1和步骤2,其中,步骤1和步骤2为异步操作,具体地:步骤1,获取数据输出请求,判断预先设置的存储空间中是否存在相应合法的输出数据,如果存在,则发送输出数据,如果不存在,则判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果数据文件中存在该输出数据,则从数据文件中获取该输出数据并发送,如果数据文件中不存在该输出数据,则从数据库中读取该输出数据并发送,并根据从数据库中读取的输出数据异步更新存储空间以及数据文件;步骤2,根据预先设置的缓存时间戳、以及存储在存储空间中的哈希表判断保存在存储空间和/或数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从数据库中读取相应的输出数据,并根据从数据库中读取的输出数据更新存储空间和/或数据文件,如果判断为是,结束操作,其中,哈希表中包括:各个输出数据的标识信息和最后更新时间。
优选地,存储空间具体包括:内存、以及分布式缓存;缓存时间戳为预先设置的更新时间间隔;哈希表存储在内存中。
优选地,步骤1具体包括:步骤100,根据缓存时间戳、以及哈希表判断内存中是否存在相应合法的输出数据,如果存在,执行步骤107,否则,执行步骤101;步骤101,根据缓存时间戳、以及哈希表判断分布式缓存中是否存在相应合法的输出数据,如果存在,执行步骤107,否则,执行步骤103;步骤103,根据缓存时间戳、以及哈希表判断数据文件中是否存在相应合法的输出数据,如果存在,执行步骤107,否则,执行步骤104;步骤104,从数据库中读取相应的输出数据,判断输出数据是否合法,如果合法,则执行步骤105,否则,结束操作;步骤105,判断输出数据是否已发送,如果判断为是,异步执行步骤106,否则,执行步骤107;步骤106,跟据从数据库中读取的输出数据更新存储空间以及数据文件;步骤107;发送输出数据。
优选地,根据缓存时间戳、以及哈希表判断内存、分布式缓存或数据文件中是否存在相应的合法的输出数据具体包括:根据输出数据的标识信息判断内存、分布式缓存、或数据文件中是否存在相应的输出数据;如果存在,则从内存中读取哈希表,并根据标识信息查询哈希表,获取相应的输出数据的最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定输出数据不合法;如果时间和大于当前时间,则确定输出数据合法。
优选地,步骤106具体包括:步骤1061,启动同步锁机制,其中,同步锁机制为:在同一时间内,只允许一个线程更新存储空间以及数据文件中相应的输出数据,其他线程等待;步骤1062,判断输出数据的大小是否大于或等于预先设置的阈值,如果判断为是,执行步骤1603,否则,执行步骤1604;步骤1603,根据从数据库中读取的输出数据更新内存,执行步骤1605;步骤1604,根据从数据库中读取的输出数据更新分布式缓存,执行步骤1605;步骤1605,根据从数据库中读取的输出数据更新数据文件。
优选地,根据预先设置的缓存时间戳、以及存储在存储空间中的哈希表判断保存在存储空间和/或数据文件中的各个输出数据是否处于有效期内具体包括:从内存中读取哈希表,获取各个输出数据的标识信息和最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定与标识信息相对应的输出数据已不在有效期内,需要进行更新;如果时间和大于当前时间,则确定与标识信息相对应的输出数据在有效期内,不需要进行更新。
优选地,上述方法还包括:设置输出数据发送阈值;将发送的输出数据的大小与输出数据发送阈值进行比较,如果发送的输出数据的大小大于或等于输出数据发送阈值,则禁止发送输出数据;否则,继续发送输出数据。
本发明还提供了一种数据输出装置,包括:输出模块,用于获取数据输出请求,判断预先设置的存储空间中是否存在相应合法的输出数据,如果存在,则发送输出数据,如果不存在,则判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果数据文件中存在该输出数据,则从数据文件中获取该输出数据并发送,如果数据文件中不存在该输出数据,则从数据库中读取该输出数据并发送,并根据从数据库中读取的输出数据异步更新存储空间以及数据文件;更新模块,用于根据预先设置的缓存时间戳、以及存储在存储空间中的哈希表判断保存在存储空间和/或数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从数据库中读取相应的输出数据,并根据从数据库中读取的输出数据更新存储空间和/或数据文件,如果判断为是,结束操作,其中,哈希表中包括:各个输出数据的标识信息和最后更新时间。
优选地,存储空间具体包括:内存、以及分布式缓存;缓存时间戳为预先设置的更新时间间隔;哈希表存储在内存中。
优选地,输出模块具体用于:根据缓存时间戳、以及哈希表判断内存中是否存在相应合法的输出数据,如果存在,发送输出数据,否则,根据缓存时间戳、以及哈希表判断分布式缓存中是否存在相应合法的输出数据,如果存在,发送输出数据,否则,根据缓存时间戳、以及哈希表判断数据文件中是否存在相应合法的输出数据,如果存在,发送输出数据,否则,从数据库中读取相应的输出数据,判断输出数据是否合法,如果不合法,结束操作,否则,判断输出数据是否已发送,如果判断为是,异步跟据从数据库中读取的输出数据更新存储空间以及数据文件,否则,发送输出数据;输出模块具体用于:根据输出数据的标识信息判断内存、分布式缓存、或数据文件中是否存在相应的输出数据;如果存在,则从内存中读取哈希表,并根据标识信息查询哈希表,获取相应的输出数据的最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定输出数据不合法;如果时间和大于当前时间,则确定输出数据合法;输出模块具体用于:启动同步锁机制,其中,同步锁机制为:在同一时间内,只允许一个线程更新存储空间以及数据文件中相应的输出数据,其他线程等待;判断输出数据的大小是否大于或等于预先设置的阈值,如果判断为是,根据从数据库中读取的输出数据更新内存,并根据从数据库中读取的输出数据更新数据文件,否则,根据从数据库中读取的输出数据更新分布式缓存,并根据从数据库中读取的输出数据更新数据文件;更新模块具体用于:从内存中读取哈希表,获取各个输出数据的标识信息和最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定与标识信息相对应的输出数据已不在有效期内,需要进行更新;如果时间和大于当前时间,则确定与标识信息相对应的输出数据在有效期内,不需要进行更新。
优选地,输出模块进一步用于:设置输出数据发送阈值;将发送的输出数据的大小与输出数据发送阈值进行比较,如果发送的输出数据的大小大于或等于输出数据发送阈值,则禁止发送输出数据;否则,继续发送输出数据。
本发明有益效果如下:
通过直接读取内存、缓存或数据文件中的输出内容,即使系统服务重启,也能读取数据文件直接输出,极大的提高了数据的输出时间,降低了服务器的负载,通过异步数据更新机制,有效的保证了数据的时效性,进而降低了分布式缓存的读取次数,本发明实施例的技术方案能够在进行大数据量的网页输出时,保证数据的高时效性,减少输出时间,保证系统的高可靠性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例的数据输出方法的流程图;
图2是本发明实施例的数据输出方法的详细处理的流程图;
图3是本发明实施例的数据输出装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了在进行大数据量的网页输出时,保证数据的高时效性,减少输出时间,保证系统的高可靠性,本发明提供了一种数据输出方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
方法实施例
根据本发明的实施例,提供了一种数据输出方法,图1是本发明实施例的数据输出方法的流程图,如图1所示,根据本发明实施例的数据输出方法包括包括步骤11和步骤12,其中,步骤11和步骤12为异步操作,具体包括如下处理:
步骤11,获取数据输出请求,判断预先设置的存储空间中是否存在相应合法的输出数据,如果存在,则发送输出数据,如果不存在,则判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果数据文件中存在该输出数据,则从数据文件中获取该输出数据并发送,如果数据文件中不存在该输出数据,则从数据库中读取该输出数据并发送,并根据从数据库中读取的输出数据异步更新存储空间以及数据文件;
其中,存储空间具体包括:内存、以及分布式缓存;
具体地,在步骤11包括如下处理:
步骤110,根据缓存时间戳、以及哈希表判断内存中是否存在相应合法的输出数据,如果存在,执行步骤116,否则,执行步骤111;其中,上述哈希表可以存储在内存中。上述哈希表中包括:各个输出数据的标识信息和最后更新时间。在实际应用中,哈希表可以保存各输出数据的key值、输出数据的存放位置、以及输出数据的相关访问统计数据,哈希表可供实时页面监控时使用。
步骤111,根据缓存时间戳、以及哈希表判断分布式缓存中是否存在相应合法的输出数据,如果存在,执行步骤116,否则,执行步骤112;
步骤112,根据缓存时间戳、以及哈希表判断数据文件中是否存在相应合法的输出数据,如果存在,执行步骤116,否则,执行步骤113;需要说明的的是,在本发明实施例中,读取数据文件非常方便,只需要根据数据的标识信息从数据文件中查找相应的数据即可,与读取数据库相比,数据库的数据是分散保存的,需要根据多个表的查询才能找到一个用户所需要的完整的数据,而数据文件则可以一次性的读取用户所需要的完整的数据,因此,读取数据文件要比读取数据库节省许多的时间。
具体地,步骤110、111、112包括如下处理:根据输出数据的标识信息判断内存、分布式缓存、或数据文件中是否存在相应的输出数据;如果存在,则从内存中读取哈希表,并根据标识信息查询哈希表,获取相应的输出数据的最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定输出数据不合法;如果时间和大于当前时间,则确定输出数据合法。
步骤113,从数据库中读取相应的输出数据,判断输出数据是否合法,如果合法,则执行步骤114,否则,结束操作;
步骤114,判断输出数据是否已发送,如果判断为是,异步执行步骤115,否则,执行步骤116;
步骤115,跟据从数据库中读取的输出数据更新存储空间以及数据文件;
优选地,步骤115具体包括:
步骤1151,启动同步锁机制,其中,同步锁机制为:在同一时间内,只允许一个线程更新存储空间以及数据文件中相应的输出数据,其他线程等待;
步骤1152,判断输出数据的大小是否大于或等于预先设置的阈值,如果判断为是,执行步骤1153,否则,执行步骤1154;
步骤1153,根据从数据库中读取的输出数据更新内存,执行步骤1155;
步骤1154,根据从数据库中读取的输出数据更新分布式缓存,执行步骤1155;
步骤1155,根据从数据库中读取的输出数据更新数据文件。
步骤116;发送输出数据。
步骤12,根据预先设置的缓存时间戳、以及存储在存储空间中的哈希表判断保存在存储空间和/或数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从数据库中读取相应的输出数据,并根据从数据库中读取的输出数据更新存储空间和/或数据文件,如果判断为是,结束操作,
其中,缓存时间戳为预先设置的更新时间间隔;例如,20分钟、40分钟等。
优选地,步骤12具体包括如下处理:
步骤120,从内存中读取哈希表,获取各个输出数据的标识信息和最后更新时间;
步骤121,将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定与标识信息相对应的输出数据已不在有效期内,需要进行更新;如果时间和大于当前时间,则确定与标识信息相对应的输出数据在有效期内,不需要进行更新。例如,某个数据的最后更新时间是12:40,当前时间是13:00,缓存时间戳为30分钟,因此,将12:40加上30分钟后,得到时间和13:10,与当前时间13:00进行比较,因为13:10大于当前时间13:00,则确定相应的输出数据在有效期内,不需要进行更新。
优选地,在本发明实施例中,还可以预先设置一个输出数据发送阈值;在发送数据时,将发送的输出数据总数的大小与输出数据发送阈值进行比较,如果发送的输出数据的大小大于或等于输出数据发送阈值,则禁止发送输出数据;否则,继续发送输出数据。
以下结合附图,以团购导航网页数据输出为例,对本发明实施例的技术方案进行详细的说明。
图2是本发明实施例的数据输出方法的详细处理的流程图,如图2所示,根据本发明实施例的数据输出方法包括如下处理:
步骤201,获取团购导航网站访问请求,执行步骤202,异步执行步骤213;
步骤202,判断内存中是否有相应的合法数据,如果有且数据合法,执行步骤214;如果内存中数据不合法或者不存在相应的数据,则执行步骤203;
步骤203,判断分布式缓存中数据是否有相应的合法数据,如果有且数据合法,执行步骤214;如果分布式缓存中数据不合法或者不存在相应的数据,则执行步骤204;
步骤204,读取预先设置在预定服务器中的数据文件,如果数据文件存在,执行步骤214;如果数据文件不存在,执行步骤205;
步骤205,从数据库中读取相应的数据,执行步骤206;
步骤206,启动同步锁机制;执行步骤207;其中,同步锁机制是指:如果有多个线程需要更新同一个数据,在执行更新操作时,在同一时间内,只允许一个线程进行更新操作,其他线程等待,在其他线程进入更新操作时再判断缓存数据是否存在且合法,如果数据存在且合法,则直接读取数据,不再进行更新操作;
步骤207,验证从数据库中读取的数据是否合法,如果合法,执行步骤208;否则,结束操作;
步骤208,判断该数据是否已经输出,如果判断为是,执行步骤209,否则,执行步骤214;
步骤209,判断从数据库中读取的数据的大小是否大于或等于0.5M,如果判断为是,执行步骤210;否则,执行步骤211;
步骤210,更新内存中的相应数据,执行步骤212;
步骤211,更新分布式缓存中的相应数据,执行步骤212;
步骤212,更新数据文件中的相应数据,结束操作。
步骤213,判断缓存时间戳是否有效,如果判断为是,结束操作,否则,执行步骤205;优选地,在判断缓存时间戳是否有效时,首先需要在内存中建立一个哈希(hash)表,保存各缓存的数据的key值、存放位置、以及相关访问统计数据,可供实时页面监控,同时异步更新线程根据hash表和对应缓存时间戳来更新对应的缓存数据。
步骤214,输出数据。
优选地,在步骤214中,为了保证系统的稳定,设置了输出数据发送阈值,超过输出数据发送阈值时禁止数据输出,在实际应用中,输出数据发送阈值可以根据用户需要和系统的配置进行动态设置,现有系统仍在优化中,在今后将不断提高输出数据发送阈值。
综上所述,本发明实施例的技术方案能够保证99%的缓存数据直接读取缓存或数据文件并进行输出,即使系统服务重启,也能读取数据文件直接输出,极大的提高了缓存数据的输出时间;此外,同步锁机制和异步数据更新机制,有效的保证了数据的时效性,进而降低了分布式缓存的读取次数;表1为团购导航收录产品数量的统计表,表2为服务器负载统计表,如表1和表2所示,服务器在本发明实施例的技术方案上线后,服务器负载从评价4.5左右下降到0.5左右;极大地降低了服务器的负载。
表1
团购导航 | 城市 | 58团购 | 美团 | 窝窝团 | 大众点评团 | 拉手 |
百度 | 北京 | 760 | 431 | 760 | 760 | 760 |
360 | 北京 | 2040 | 825 | 1470 | 1420 | 25 |
Tuan800 | 全国 | 19799 | 17273 | 12527 | 3900 | 29932 |
表2
团购导航 | 最长输出时间(ms) | 最短输出时间(ms) | 输出内容(M) |
百度 | 29146 | 98 | 17 |
360 | 32780 | 184 | 19 |
Tuan800 | 35671 | 354 | 40 |
90182 | 375 | 130 |
综上所述,借助于本发明实施例的技术方案,通过直接读取内存、缓存或数据文件中的输出内容,即使系统服务重启,也能读取数据文件直接输出,极大的提高了数据的输出时间,降低了服务器的负载,通过异步数据更新机制,有效的保证了数据的时效性,进而降低了分布式缓存的读取次数,本发明实施例的技术方案能够在进行大数据量的网页输出时,保证数据的高时效性,减少输出时间,保证系统的高可靠性。
装置实施例
根据本发明的实施例,提供了一种数据输出装置,图3是本发明实施例的数据输出装置的结构示意图,如图3所示,根据本发明实施例的数据输出装置包括:输出模块30、以及更新模块32,以下对本发明实施例的各个模块进行详细的说明。
输出模块30,用于获取数据输出请求,判断预先设置的存储空间中是否存在相应合法的输出数据,如果存在,则发送输出数据,如果不存在,则判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果数据文件中存在该输出数据,则从数据文件中获取该输出数据并发送,如果数据文件中不存在该输出数据,则从数据库中读取该输出数据并发送,并根据从数据库中读取的输出数据异步更新存储空间以及数据文件;
需要说明的是,存储空间具体包括:内存、以及分布式缓存;缓存时间戳为预先设置的更新时间间隔;哈希表存储在内存中。
输出模块30具体用于:根据缓存时间戳、以及哈希表判断内存中是否存在相应合法的输出数据,如果存在,发送输出数据,否则,根据缓存时间戳、以及哈希表判断分布式缓存中是否存在相应合法的输出数据,如果存在,发送输出数据,否则,根据缓存时间戳、以及哈希表判断数据文件中是否存在相应合法的输出数据,如果存在,发送输出数据,否则,从数据库中读取相应的输出数据,判断输出数据是否合法,如果不合法,结束操作,否则,判断输出数据是否已发送,如果判断为是,异步跟据从数据库中读取的输出数据更新存储空间以及数据文件,否则,发送输出数据;上述哈希表中包括:各个输出数据的标识信息和最后更新时间。在实际应用中,哈希表可以保存各输出数据的key值、输出数据的存放位置、以及输出数据的相关访问统计数据,哈希表可供实时页面监控时使用。
需要说明的的是,在本发明实施例中,读取数据文件非常方便,只需要根据数据的标识信息从数据文件中查找相应的数据即可,与读取数据库相比,数据库的数据是分散保存的,需要根据多个表的查询才能找到一个用户所需要的完整的数据,而数据文件则可以一次性的读取用户所需要的完整的数据,因此,读取数据文件要比读取数据库节省许多的时间。
输出模块30具体用于:根据输出数据的标识信息判断内存、分布式缓存、或数据文件中是否存在相应的输出数据;如果存在,则从内存中读取哈希表,并根据标识信息查询哈希表,获取相应的输出数据的最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定输出数据不合法;如果时间和大于当前时间,则确定输出数据合法;
输出模块30具体用于:启动同步锁机制,其中,同步锁机制为:在同一时间内,只允许一个线程更新存储空间以及数据文件中相应的输出数据,其他线程等待;判断输出数据的大小是否大于或等于预先设置的阈值,如果判断为是,根据从数据库中读取的输出数据更新内存,并根据从数据库中读取的输出数据更新数据文件,否则,根据从数据库中读取的输出数据更新分布式缓存,并根据从数据库中读取的输出数据更新数据文件;
优选地,输出模块30进一步用于:设置输出数据发送阈值;将发送的输出数据的大小与输出数据发送阈值进行比较,如果发送的输出数据的大小大于或等于输出数据发送阈值,则禁止发送输出数据;否则,继续发送输出数据。
更新模块32,用于根据预先设置的缓存时间戳、以及存储在存储空间中的哈希表判断保存在存储空间和/或数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从数据库中读取相应的输出数据,并根据从数据库中读取的输出数据更新存储空间和/或数据文件,如果判断为是,结束操作。
更新模块32具体用于:从内存中读取哈希表,获取各个输出数据的标识信息和最后更新时间;将最后更新时间加上缓存时间戳,获取时间和,将时间和与当前时间进行比较,如果时间和小于或等于当前时间,则确定与标识信息相对应的输出数据已不在有效期内,需要进行更新;如果时间和大于当前时间,则确定与标识信息相对应的输出数据在有效期内,不需要进行更新。
以下结合附图,以团购导航网页数据输出为例,对本发明实施例的技术方案进行详细的说明。
图2是本发明实施例的数据输出方法的详细处理的流程图,如图2所示,根据本发明实施例的数据输出方法包括如下处理:
步骤201,输出模块30获取团购导航网站访问请求,执行步骤202,异步执行步骤213;
步骤202,输出模块30判断内存中是否有相应的合法数据,如果有且数据合法,执行步骤214;如果内存中数据不合法或者不存在相应的数据,则执行步骤203;
步骤203,输出模块30判断分布式缓存中数据是否有相应的合法数据,如果有且数据合法,执行步骤214;如果分布式缓存中数据不合法或者不存在相应的数据,则执行步骤204;
步骤204,输出模块30读取预先设置在预定服务器中的数据文件,如果数据文件存在,执行步骤214;如果数据文件不存在,执行步骤205;
步骤205,输出模块30从数据库中读取相应的数据,执行步骤206;
步骤206,更新模块32启动同步锁机制;执行步骤207;其中,同步锁机制是指:如果有多个线程需要更新同一个数据,在执行更新操作时,在同一时间内,只允许一个线程进行更新操作,其他线程等待,在其他线程进入更新操作时再判断缓存数据是否存在且合法,如果数据存在且合法,则直接读取数据,不再进行更新操作;
步骤207,更新模块32验证从数据库中读取的数据是否合法,如果合法,执行步骤208;否则,结束操作;
步骤208,输出模块30判断该数据是否已经输出,如果判断为是,执行步骤209,否则,执行步骤214;
步骤209,更新模块32判断从数据库中读取的数据的大小是否大于或等于0.5M,如果判断为是,执行步骤210;否则,执行步骤211;
步骤210,更新模块32更新内存中的相应数据,执行步骤212;
步骤211,更新模块32更新分布式缓存中的相应数据,执行步骤212;
步骤212,更新模块32更新数据文件中的相应数据,结束操作。
步骤213,更新模块32判断缓存时间戳是否有效,如果判断为是,结束操作,否则,执行步骤205;优选地,在判断缓存时间戳是否有效时,首先需要在内存中建立一个哈希(hash)表,保存各缓存的数据的key值、存放位置、以及相关访问统计数据,可供实时页面监控,同时异步更新线程根据hash表和对应缓存时间戳来更新对应的缓存数据。
步骤214,输出模块30输出数据。
优选地,在步骤214中,为了保证系统的稳定,设置了输出数据发送阈值,超过输出数据发送阈值时禁止数据输出,在实际应用中,输出数据发送阈值可以根据用户需要和系统的配置进行动态设置,现有系统仍在优化中,在今后将不断提高输出数据发送阈值。
综上所述,本发明实施例的技术方案能够保证99%的缓存数据直接读取缓存或数据文件并进行输出,即使系统服务重启,也能读取数据文件直接输出,极大的提高了缓存数据的输出时间;此外,同步锁机制和异步数据更新机制,有效的保证了数据的时效性,进而降低了分布式缓存的读取次数;表1为团购导航收录产品数量的统计表,表2为服务器负载统计表,如表1和表2所示,服务器在本发明实施例的技术方案上线后,服务器负载从评价4.5左右下降到0.5左右;极大地降低了服务器的负载。
表1
团购导航 | 城市 | 58团购 | 美团 | 窝窝团 | 大众点评团 | 拉手 |
百度 | 北京 | 760 | 431 | 760 | 760 | 760 |
360 | 北京 | 2040 | 825 | 1470 | 1420 | 25 |
Tuan800 | 全国 | 19799 | 17273 | 12527 | 3900 | 29932 |
表2
团购导航 | 最长输出时间(ms) | 最短输出时间(ms) | 输出内容(M) |
百度 | 29146 | 98 | 17 |
360 | 32780 | 184 | 19 |
Tuan800 | 35671 | 354 | 40 |
90182 | 375 | 130 |
综上所述,借助于本发明实施例的技术方案,通过直接读取内存、缓存或数据文件中的输出内容,即使系统服务重启,也能读取数据文件直接输出,极大的提高了数据的输出时间,降低了服务器的负载,通过异步数据更新机制,有效的保证了数据的时效性,进而降低了分布式缓存的读取次数,本发明实施例的技术方案能够在进行大数据量的网页输出时,保证数据的高时效性,减少输出时间,保证系统的高可靠性。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据输出装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (10)
1.一种数据输出方法,其特征在于,包括步骤1和步骤2,其中,所述步骤1和步骤2为异步操作,具体地:
步骤1,获取数据输出请求,判断预先设置的存储空间中是否存在相应合法的输出数据,如果存在,则发送所述输出数据,如果不存在,则判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果所述数据文件中存在该输出数据,则从所述数据文件中获取该输出数据并发送,如果所述数据文件中不存在该输出数据,则从数据库中读取该输出数据并发送,并根据从所述数据库中读取的输出数据异步更新所述存储空间以及所述数据文件;
步骤2,根据预先设置的缓存时间戳、以及存储在所述存储空间中的哈希表判断保存在所述存储空间和/或所述数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从所述数据库中读取相应的输出数据,并根据从所述数据库中读取的输出数据更新所述存储空间和/或所述数据文件,如果判断为是,结束操作,其中,所述哈希表中包括:各个输出数据的标识信息和最后更新时间。
2.如权利要求1所述的方法,其特征在于,
所述存储空间具体包括:内存、以及分布式缓存;
所述缓存时间戳为预先设置的更新时间间隔;
所述哈希表存储在所述内存中。
3.如权利要求2所述的方法,其特征在于,所述步骤1具体包括:
步骤100,根据所述缓存时间戳、以及所述哈希表判断内存中是否存在相应合法的输出数据,如果存在,执行步骤106,否则,执行步骤101;
步骤101,根据所述缓存时间戳、以及所述哈希表判断分布式缓存中是否存在相应合法的输出数据,如果存在,执行步骤106,否则,执行步骤102;
步骤102,根据所述缓存时间戳、以及所述哈希表判断所述数据文件中是否存在相应合法的输出数据,如果存在,执行步骤106,否则,执行步骤103;
步骤103,从数据库中读取相应的输出数据,判断所述输出数据是否合法,如果合法,则执行步骤104,否则,结束操作;
步骤104,判断所述输出数据是否已发送,如果判断为是,异步执行步骤105,否则,执行步骤106;
步骤105,跟据从所述数据库中读取的输出数据更新所述存储空间以及所述数据文件;
步骤106;发送所述输出数据。
4.如权利要求3所述的方法,其特征在于,
根据所述缓存时间戳、以及所述哈希表判断内存、分布式缓存或数据文件中是否存在相应的合法的输出数据具体包括:
根据输出数据的标识信息判断所述内存、所述分布式缓存、或所述数据文件中是否存在相应的输出数据;如果存在,则从所述内存中读取所述哈希表,并根据所述标识信息查询所述哈希表,获取所述相应的输出数据的最后更新时间;将所述最后更新时间加上所述缓存时间戳,获取时间和,将所述时间和与当前时间进行比较,如果所述时间和小于或等于所述当前时间,则确定所述输出数据不合法;如果所述时间和大于所述当前时间,则确定所述输出数据合法;
所述步骤106具体包括:
步骤1061,启动同步锁机制,其中,所述同步锁机制为:在同一时间内,只允许一个线程更新所述存储空间以及所述数据文件中相应的输出数据,其他线程等待;
步骤1062,判断所述输出数据的大小是否大于或等于预先设置的阈值,如果判断为是,执行步骤1603,否则,执行步骤1604;
步骤1603,根据从所述数据库中读取的输出数据更新所述内存,执行步骤1605;
步骤1604,根据从所述数据库中读取的输出数据更新所述分布式缓存,执行步骤1605;
步骤1605,根据从所述数据库中读取的输出数据更新所述数据文件。
5.如权利要求3所述的方法,其特征在于,
根据预先设置的缓存时间戳、以及存储在所述存储空间中的哈希表判断保存在所述存储空间和/或所述数据文件中的各个输出数据是否处于有效期内具体包括:
从所述内存中读取所述哈希表,获取各个输出数据的标识信息和最后更新时间;
将所述最后更新时间加上所述缓存时间戳,获取时间和,将所述时间和与当前时间进行比较,如果所述时间和小于或等于所述当前时间,则确定与所述标识信息相对应的输出数据已不在有效期内,需要进行更新;如果所述时间和大于所述当前时间,则确定与所述标识信息相对应的输出数据在有效期内,不需要进行更新。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
设置输出数据发送阈值;
将发送的输出数据的大小与所述输出数据发送阈值进行比较,如果发送的输出数据的大小大于或等于所述输出数据发送阈值,则禁止发送所述输出数据;否则,继续发送所述输出数据。
7.一种数据输出装置,其特征在于,包括:
输出模块,用于获取数据输出请求,判断预先设置的存储空间中是否存在相应合法的输出数据,如果存在,则发送所述输出数据,如果不存在,则判断预先设置在预定服务器中的数据文件中是否存在相应合法的输出数据;如果所述数据文件中存在该输出数据,则从所述数据文件中获取该输出数据并发送,如果所述数据文件中不存在该输出数据,则从数据库中读取该输出数据并发送,并根据从所述数据库中读取的输出数据异步更新所述存储空间以及所述数据文件;
更新模块,用于根据预先设置的缓存时间戳、以及存储在所述存储空间中的哈希表判断保存在所述存储空间和/或所述数据文件中的各个输出数据是否处于有效期内,如果判断为否,则从所述数据库中读取相应的输出数据,并根据从所述数据库中读取的输出数据更新所述存储空间和/或所述数据文件,如果判断为是,结束操作,其中,所述哈希表中包括:各个输出数据的标识信息和最后更新时间。
8.如权利要求7所述的装置,其特征在于,
所述存储空间具体包括:内存、以及分布式缓存;
所述缓存时间戳为预先设置的更新时间间隔;
所述哈希表存储在所述内存中。
9.如权利要求8所述的装置,其特征在于,
所述输出模块具体用于:根据所述缓存时间戳、以及所述哈希表判断内存中是否存在相应合法的输出数据,如果存在,发送所述输出数据,否则,根据所述缓存时间戳、以及所述哈希表判断分布式缓存中是否存在相应合法的输出数据,如果存在,发送所述输出数据,否则,根据所述缓存时间戳、以及所述哈希表判断所述数据文件中是否存在相应合法的输出数据,如果存在,发送所述输出数据,否则,从数据库中读取相应的输出数据,判断所述输出数据是否合法,如果不合法,结束操作,否则,判断所述输出数据是否已发送,如果判断为是,异步跟据从所述数据库中读取的输出数据更新所述存储空间以及所述数据文件,否则,发送所述输出数据;
所述输出模块具体用于:根据输出数据的标识信息判断所述内存、所述分布式缓存、或所述数据文件中是否存在相应的输出数据;如果存在,则从所述内存中读取所述哈希表,并根据所述标识信息查询所述哈希表,获取所述相应的输出数据的最后更新时间;将所述最后更新时间加上所述缓存时间戳,获取时间和,将所述时间和与当前时间进行比较,如果所述时间和小于或等于所述当前时间,则确定所述输出数据不合法;如果所述时间和大于所述当前时间,则确定所述输出数据合法;
所述输出模块具体用于:启动同步锁机制,其中,所述同步锁机制为:在同一时间内,只允许一个线程更新所述存储空间以及所述数据文件中相应的输出数据,其他线程等待;判断所述输出数据的大小是否大于或等于预先设置的阈值,如果判断为是,根据从所述数据库中读取的输出数据更新所述内存,并根据从所述数据库中读取的输出数据更新所述数据文件,否则,根据从所述数据库中读取的输出数据更新所述分布式缓存,并根据从所述数据库中读取的输出数据更新所述数据文件;
所述更新模块具体用于:从所述内存中读取所述哈希表,获取各个输出数据的标识信息和最后更新时间;将所述最后更新时间加上所述缓存时间戳,获取时间和,将所述时间和与当前时间进行比较,如果所述时间和小于或等于所述当前时间,则确定与所述标识信息相对应的输出数据已不在有效期内,需要进行更新;如果所述时间和大于所述当前时间,则确定与所述标识信息相对应的输出数据在有效期内,不需要进行更新。
10.如权利要求7所述的装置,其特征在于,所述输出模块进一步用于:设置输出数据发送阈值;将发送的输出数据的大小与所述输出数据发送阈值进行比较,如果发送的输出数据的大小大于或等于所述输出数据发送阈值,则禁止发送所述输出数据;否则,继续发送所述输出数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210371896.5A CN102929943B (zh) | 2012-09-28 | 2012-09-28 | 数据输出方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210371896.5A CN102929943B (zh) | 2012-09-28 | 2012-09-28 | 数据输出方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929943A true CN102929943A (zh) | 2013-02-13 |
CN102929943B CN102929943B (zh) | 2016-03-30 |
Family
ID=47644741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210371896.5A Active CN102929943B (zh) | 2012-09-28 | 2012-09-28 | 数据输出方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929943B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063831A (zh) * | 2014-04-18 | 2014-09-24 | 北京交大思源科技有限公司 | 一种提供铁路行程方案的方法及装置 |
CN104573128A (zh) * | 2014-10-28 | 2015-04-29 | 北京国双科技有限公司 | 一种业务数据的处理方法、装置及服务器 |
CN104572845A (zh) * | 2014-12-12 | 2015-04-29 | 百度在线网络技术(北京)有限公司 | 文件分发方法、装置、设备及系统 |
CN105353988A (zh) * | 2015-11-13 | 2016-02-24 | 曙光信息产业(北京)有限公司 | 一种元数据读写方法及装置 |
CN105760413A (zh) * | 2015-12-07 | 2016-07-13 | 重庆川仪自动化股份有限公司 | 基于哈希表的rfid数据在mes系统中的管理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110088A (zh) * | 2007-04-17 | 2008-01-23 | 南京中兴软创科技有限责任公司 | 基于缓存技术的数据库访问接口方法 |
CN101127041A (zh) * | 2007-08-28 | 2008-02-20 | 激动集团股份有限公司 | 一种业务规则基础数据的缓冲方法 |
CN101127783A (zh) * | 2007-09-28 | 2008-02-20 | 北京金山软件有限公司 | 一种网站缓存方法和一种网站缓存的装置 |
-
2012
- 2012-09-28 CN CN201210371896.5A patent/CN102929943B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110088A (zh) * | 2007-04-17 | 2008-01-23 | 南京中兴软创科技有限责任公司 | 基于缓存技术的数据库访问接口方法 |
CN101127041A (zh) * | 2007-08-28 | 2008-02-20 | 激动集团股份有限公司 | 一种业务规则基础数据的缓冲方法 |
CN101127783A (zh) * | 2007-09-28 | 2008-02-20 | 北京金山软件有限公司 | 一种网站缓存方法和一种网站缓存的装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063831A (zh) * | 2014-04-18 | 2014-09-24 | 北京交大思源科技有限公司 | 一种提供铁路行程方案的方法及装置 |
CN104573128A (zh) * | 2014-10-28 | 2015-04-29 | 北京国双科技有限公司 | 一种业务数据的处理方法、装置及服务器 |
CN104573128B (zh) * | 2014-10-28 | 2019-02-19 | 北京国双科技有限公司 | 一种业务数据的处理方法、装置及服务器 |
CN104572845A (zh) * | 2014-12-12 | 2015-04-29 | 百度在线网络技术(北京)有限公司 | 文件分发方法、装置、设备及系统 |
CN104572845B (zh) * | 2014-12-12 | 2019-03-26 | 百度在线网络技术(北京)有限公司 | 文件分发方法、装置、设备及系统 |
CN105353988A (zh) * | 2015-11-13 | 2016-02-24 | 曙光信息产业(北京)有限公司 | 一种元数据读写方法及装置 |
CN105760413A (zh) * | 2015-12-07 | 2016-07-13 | 重庆川仪自动化股份有限公司 | 基于哈希表的rfid数据在mes系统中的管理方法 |
CN105760413B (zh) * | 2015-12-07 | 2018-10-23 | 重庆川仪自动化股份有限公司 | 基于哈希表的rfid数据在mes系统中的管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102929943B (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110674432B (zh) | 二级缓存方法、装置及计算机可读存储介质 | |
CN103856567B (zh) | 基于Hadoop分布式文件系统的小文件存储方法 | |
CN111414389B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN104462194A (zh) | 一种业务数据的处理方法、装置及服务器 | |
CN110909025A (zh) | 数据库的查询方法、查询装置及终端 | |
CN102902730A (zh) | 基于数据缓存的读数据方法及装置 | |
CN103678523B (zh) | 分布式高速缓存cache数据访问方法和装置 | |
CN105677580A (zh) | 访问缓存的方法和装置 | |
CN102929943B (zh) | 数据输出方法及装置 | |
US11567681B2 (en) | Method and system for synchronizing requests related to key-value storage having different portions | |
CN103957239A (zh) | Dns缓存信息处理方法、设备及系统 | |
CN103326958A (zh) | 监控数据缓存方法及系统 | |
US20150286671A1 (en) | Transaction system | |
CN104572845A (zh) | 文件分发方法、装置、设备及系统 | |
CN103401950A (zh) | 缓存异步刷新方法、缓存服务器处理请求方法和系统 | |
CN111291083B (zh) | 网页源码数据处理方法、装置及计算机设备 | |
CN105491078A (zh) | Soa系统中的数据处理方法及装置、soa系统 | |
CN103530420A (zh) | 数据文件的动态更新方法及装置 | |
CN103414693A (zh) | 打点方法及打点装置 | |
US11636112B2 (en) | Updating cache data | |
CN107247777A (zh) | 一种基于数据库逆向统计的报表展示方法及系统 | |
CN105915619A (zh) | 顾及访问热度的网络空间信息服务高性能内存缓存方法 | |
CN103559307A (zh) | 一种查询的缓存方法及装置 | |
US20200334258A1 (en) | Method and system for searching a key-value storage | |
EP3550446B1 (en) | Updating cache data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |