酒店搜索动态数据建库系统设计与实现.pdfVIP

  • 1
  • 0
  • 约2.18千字
  • 约 2页
  • 2026-02-17 发布于北京
  • 举报

酒店搜索动态数据建库系统设计与实现.pdf

设计()简介

题目:酒店搜索的动态数据建库指导老师:

作者:软件工程一班

随着互联网和移动互联网时代的到来,使得预订酒店的用户量的越来越

多和上线的酒店数量越来越多,导致酒店搜索的正确性、稳定性、速度都将受到

。酒店搜索和的搜索引擎是不同的,各有各的特点,的搜索是大搜

索,更加注重广度;而酒店搜索更加注重深度,它是垂直搜索,要注重的细

节,数据也更加精细。

本系统(酒店搜索的动态数据建库系统,以下简称raw-index)是酒店产品

检索模块(以下简称ds)的数据源,ds模块的所有数据都来自于raw-index,

因此,raw-index系统能否正常、快速、及时地从各个数据库和http接口获取

数据,并将其序列化为protocolbuffer文件格式至关重要。

raw-index系统主要使用了c++多线程、protocolbuffer、c++多态

性等技术完成。

raw-index模块主要分为三个模块:总控模块、全量数据拉取模块、增量数

据拉取模块。

总控模块简介:

总控模块完成的功能:加载配置文件、控制全量数据拉取模块和增量数据拉

取模块的调用。

总控模块的实现:总控模块中设计了一个任务队列,程序中有三个线程,主

线程根据配置文件中设置的全量数据更新频率,每隔一段时间向任务队列中增加

一条任务;其他的两个线程(下面以thread1和thread2代替)一直在检查任务

队列中是否有任务,如果有的话,就拿去执行(假设thread1拿到任务),每一

次任务会进行一次全量数据的拉取,等全量数据拉取结束后,thread1一直进行

增量数据的拉取(增量数据拉取也有时间间隔,可通过配置文件配置),一直等

到thread2领取到任务,thread1结束任务的执行,继续去检查任务队列中是否

有任务。

全量数据拉取模块和增量数据拉取模块简介:

全量数据拉取模块和增量数据拉取模块的实现是非常相似的,只是拉取的数

据多少不同,全量数据每1小时更新一次,更新所有的数据;增量数据每分钟更

新一次,主要更新对实时性要求较高的数据。第一步是初始化环境,包括检查生

成相应的文件目录等(不同的分片目录不同,分片概念后面介绍);第二部确定

需要更新哪些数据,调用相应的save类第三部:save类调用相应的handler类

完成具体的任务。

一些总要的概念:

•分组:把raw-index分成两组,一组在偶数时间整点开始拉取全量,另一

组在奇数时间整点开始拉取全量。该需求是因为ds是分2组的,一组在

奇数小时进行服务,一组在偶数小时进行服务,每一组raw-index为一组

ds服务)。

•分片:由于数据量较大,如果一个部署了ds的服务器把所有的数据加载

到内存可能会把内存。因此对数据进行分片,酒店id是偶数的相关

数据是0分片,酒店id是奇数的相关数据是1分片,(如果数据继续增加

可以增加的分片)。ds模块在拉取时,根据自己本机的ip地址(如果

ip地址是偶数就拉取0分片数据,如果ip是奇数就拉取1分片数据)拉

取相应分片的数据。

与ds模块的交互:

•1、raw-index模块每一次生成新的文件,都会在本地pubsequence.pb文

件中生成一个记录,ds模块每从raw-index拉取一个文件,也会在其本

地的pubsequence.pb文件中生成一条记录。

•2、ds每5秒检查一次本地的pubsequence.pb文件和raw-index的

pubsequence.pb文件,如果有新文件生成,就用scp命令将文件拉取到

本地并加载到内存,更新本地的pubsequence.pb文件。

当前的效果:

当一组服务器进行服务时,部署在不同服务器上的该组ds都使用同一个

r

文档评论(0)

1亿VIP精品文档

相关文档