转自http://www.csdn.net/article/2013-10-29/2817333-under-the-hood-building-posts-search

近日,Facebook为post搜索添加了Graph Search。我们来看几个惊人的数字:Facebook每天约产生10亿条post,post索引总数已上万亿条,数据量超700TB。为这些post建立索引和构建实时查询系统在工程上存在非常大的挑战,那么Facebook又是如何应对这一挑战的?以下为译文:

数据收集

Facebook的底层数据结构是为了满足快速迭代网络服务的需要,这却也成为构建实时查询系统所面临的最大挑战。增加新功能往往需要改动这些数据结构,而Facebook一贯的作风是变动不要给工程师平添烦恼。然而,由于wall post、photo、check-in等功能采用不同的数据存储机制,对底层数据结构进行改动增加了以时间、地点和标签进行排序的难度。当前,排序和索引的数据约有70种,其中很多种都是基于特定post类型的。此外,数据存储在一个用于生产环境的MySQL数据库中。这也就意味着,当数据库同时支撑生产传输及数据收集时,负载将大幅度增加,因此这些过程必须被严格监控。

索引建立

数据收集来后,我们将其存储在HBase集群中,然后执行Hadoop map-reduce任务,高并行地为之建立索引。为原始数据建立索引后,然后便传输给搜索的基础Unicorn。我们将数据分为两块——文档数据和反向索引(inverted index)。每条post的文档数据包含用于排序的相关信息。传统意义上搜索索引有什么,反向索引就有什么。要建反向索引需要遍历每一条post,并确定与假设中的哪种搜索过滤器相匹配。

索引更新

为了更新索引,我们使用Wormhole技术订阅MySQL数据库中的变更。一旦有新post,现有post被修改、删除或与post有关的相关数据被编辑等情况发生时,我们就会都对相关post进行更新操作。为了减少重复代码,我们使用与在“数据收集”部分提到的相同逻辑来进行更新操作。不同之处在于,我们在收集数据时有意避开缓存,因为我们想尽量避免请求没有缓存过的数据。当我们更新索引时,我们将会命中缓存,因为我们希望该数据是最近被访问过,并且还在缓存中。

索引存储

post索引要比Facebook维护的其他搜索索引大得多。在开始搜索post之前,Facebook 所有的搜索索引都存储在RAM中。对于快速查询来说,这再好不过了。对小型的搜索索引来说也是可行的。然而,将700多TB的数据存储在RAM中所带来系统开销是难以想象的,因为它需要维护分布在多台机器上的索引。协调存储索引的多台机器使它们有序地工作给系统带来了巨大的性能损耗,Unicorn团队为此不得不寻找存储post索引的新方法。我们最终敲定的解决方案是用固态闪存存储大部分的索引,用RAM存储存取最为频繁的数据结构,性能得以维持。

结果排序

由于索引了1万亿条post,绝大多数查询返回的结果数量之多是任何人都读不完的。为此,Facebook开始设计对结果进行排序。为了使对用户有价值并与用户相关的内容浮到上面,主要采用了两种主要策略:查询重写和结果动态打分。在执行前,先重写查询,灵活增加子句,以确保查询结果对用户价值更大。为搜索结果进行打分,包括基于一系列用于排序的特征进行排序和选择文档。排序特征是从文档中抽取出来的,目前一共抽取了100多项特征,结合排序模型,用于寻找最佳搜索结果。随着用户量的增长和用户反馈的增多,排序模型必将得到进一步改善。

项目简史

像 Facebook 的很多其他产品一样,post搜索功能也是诞生于一个编程马拉松项目。而在过去的一年中,Graph Search 团队的几十个人实现了post搜索的大部分功能——基础架构、排序和产品化。

Facebook支撑万亿Post搜索背后的技术窥探的更多相关文章

  1. TOP100summit:【分享实录-QQ空间】10亿级直播背后的技术优化

    本篇文章内容来自2016年TOP100summit QQ空间客户端研发总监王辉的案例分享.编辑:Cynthia 王辉:腾讯SNG社交平台部研发总监.腾讯QQ空间移动客户端技术负责人高级工程师.09年起 ...

  2. 市值3万亿的facebook再出丑闻,你的数据,到底应该归谁?

    最近一则<Facebook隐私泄露事件继续发酵,黑客明码标价出售聊天信息>的新闻被爆出,一个用户的信息被标价10美分.让人不禁感慨,3万亿市值的facebook,用户数据竟然如此便宜. 在 ...

  3. 【DataMagic】如何在万亿级别规模的数据量上使用Spark

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 作者:张国鹏 | 腾讯 运营开发工程师 一.前言 Spark作为大数据计算引擎,凭借其快速.稳定. ...

  4. 日调度万亿次,微服务框架TSF大规模应用——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲者:张浩 腾讯云中间件产品负责人 背景:众多开发者中,一定经历类似的甜蜜烦恼,就是当线上业务规模越来越大,系统分支发展越来越多的时候,初 ...

  5. 支撑百亿级应用的 NewSQL

    支撑百亿级应用的 NewSQL https://zhuanlan.zhihu.com/newsql/ 项目背景 初次接触 TiDB,是通过同程网首席架构师王晓波先生的分享,当时同程网正在使开发和数据库 ...

  6. 如何在万亿级别规模的数据量上使用Spark

    一.前言 Spark作为大数据计算引擎,凭借其快速.稳定.简易等特点,快速的占领了大数据计算的领域.本文主要为作者在搭建使用计算平台的过程中,对于Spark的理解,希望能给读者一些学习的思路.文章内容 ...

  7. 如何基于MindSpore实现万亿级参数模型算法?

    摘要:近来,增大模型规模成为了提升模型性能的主要手段.特别是NLP领域的自监督预训练语言模型,规模越来越大,从GPT3的1750亿参数,到Switch Transformer的16000亿参数,又是一 ...

  8. 口护万亿市场杀出的实力派 Oclean欧可林

    撰文 |懂懂 编辑 | 秦言 来源:懂懂笔记 在"青年必去的电影节"上,发现了一个跟他们打成一片的智能护齿"新星". 25日,备受关注的第15届FIRST青年电 ...

  9. 日吞吐万亿,腾讯云时序数据库CTSDB解密

    一.背景 随着移动互联网.物联网.大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联 ...

随机推荐

  1. SpringMVC TaskExecutor线程池

    一.配置jdbc.properties添加: #------------ Task ------------ task.core_pool_size=5 task.max_pool_size=50 t ...

  2. queue,stack的相互实现

    Implement Queue using Stacks [抄题]: [思维问题]: [一句话思路]: 取头部.取出来的时候,用一个output来倒序 [输入量]:空: 正常情况:特大:特小:程序里处 ...

  3. Java jdk 8 新特性

    list 统计(求和.最大.最小.平均) 第一种方式 int suma = listUsers.stream().map(e -> e.getAge()).reduce(Integer::sum ...

  4. phalcon框架安装

    Phalcon学习笔记 - 安装 原创 2014年10月23日 12:20:33 标签: phalcon / phalcon安装 5014 如何学习一个新的框架 1  明白工作原理 2  知道核心思想 ...

  5. php 框架选择

    背景 很多初级php甚至中级php都会陷入框架选择困难症,要么必须使用什么框架,要么一定不使用什么框架,而对框架的选择带来的效益和负担的成本并不是很清晰 框架大概分为以下这些 1. 简单轻量:tp,c ...

  6. dedecms目录说明

    1.有多个common.inc.php文件,注意引入的是哪一个,引入以后,里面的常量才可以用: 2.路径向上跳转 require_once('../../plus/phpexcel/PHPExcel. ...

  7. Mysql 查看表结构的命令

    创建数据库create database abc; 显示数据库 show databases; 使用数据库 use 数据库名; 直接打开数据库 mysql -h localhost -u root - ...

  8. 11 Maven 灵活的构建

    Maven 灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时 ...

  9. cxf soap rest webservice spring

    1. 导入 jar 包 2. 编写接口 3. 编写实现 4. 配置spring 配置文件 5. 配置web.xml servlet 6. 访问 package com.diancai.test; im ...

  10. 2018.07.03 POJ 2653 Pick-up sticks(简单计算几何)

    Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Description Stan has n sticks of various leng ...