首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

从 LinkedIn 的数据处理机制学习数据架构

LinkedIn.com是当今最流行的专业社交网站之一,本文描述了LinkedIn.com是如何管理数据的。如你对文中的观点有异议亦或文中有遗漏的部分请随时告诉我。 LinkedIn.com数据用例 下面是一些数据用例,可能我们在浏览LinkedIn网页时都已经看到过了。 更新后的个人资料后几乎可以实时的出现在招聘搜索页面 更新后的个人资料后几乎可以实时的出现在人脉网页 分享一个更新,可以近实时的出现在新闻feed页面 然后会更新到其他只读页面,像”你可能认识的人“、”看过我资料的人“、”相关搜索“等。 令人震惊的是,如果我们使用较好的宽带,这些页面可以在数毫秒内完成加载!让我们向LinkedIn工程师团队致敬! 早期的LinkedIn数据架构 像其它初创公司一样,LinkedIn 早期也是通过单个的RDBMS (关系型数据库管理系统)的几张表来保存用户资料和人脉关系。是不是很原始?后来这个RDMBS扩展出两个额外的数据库系统,其中一个用来支撑用户个人资 料的全文搜索,另一个用来实现社交图。这两个数据库通过Databus来取得最新数据。Databus是一个变化捕捉系统,它的主要目标就是捕捉那些来至 可信源(像Oracle)中数据集的变更,并且把这些变化更新到附加数据库系统中。 但是,没过多久这种架构就已经很难满足网站的数据需求了。因为按照Brewerd的CAP理论想要同时满足下面的条件看似不太可能: 一致性:所有应用在同一时刻看到相同的数据 可用性:保证每个请求都能收到应答,无论成功或失败 分区容错性:部分系统的消息丢失或失败不影响系统系统整体的正常运行 根据上面的法则,LinkedIn工程师团队实现了他们称作为时间线一致性(或者说近线系统的最终一致性,下面会解释)以及另外两个特性:可用性和分区容错性。下面介绍目前LinkedIn的数据架构。 LinkedIn如今的数据架构 如果要支撑在不到一秒钟内处理数百万用户的相关事务,上面的数据架构已经明显不足了。因此,LinkedIn 工程师团队提出了三段式(three-phase)数据架构,由在线、离线以及近线数据系统组成。总体上讲,LinkedIn数据被存储在如下几种不同形 式的数据系统中(看下面的图): RDBMS Oracle MySQL(作为Espresso的底层数据存储) RDBMS Espresso(LinkedIn自己开发的文档型NoSQL数据存储系统) Voldemart (分布式Key-value存储系统) HDFS (存放Hadoop map-reduce任务的数据) Caching Memcached 基于Lucene的索引 存放查询、关系图等功能数据的Lucene 索引 Espresso使用的索引 图:LinkedIn数据库系统包括了DataBus、NoSQL、RDBMS以及Indexes 上面提到的数据存储库被归为三种不同类型的系统,下面会逐一解释: 在线数据库系统 在线系统处理用户的实时互动;主数据库像Oracle就属于这一类别。主数据存储用来支撑用户的写操作和少量的读操作。以Orcale为 例,Oracle master会执行所有的写操作。最近,LinkedIn正在开发另一个叫做“Espresso”的数据系统来满足日益复杂的数据需求,而这些数据看似不 应从像Oracle这类的RDBMS中获取。他们能否淘汰所有或大部分的Oracle并将数据完全转移到像Espresso这类的NoSQL数据存储系统 中去?让我们拭目以待。 Espresso是一个支持水平扩展、索引、时间线一致性、基于文档且高可用的NoSQL数据仓库,旨在代替支撑公司网页操作所使用的传统Oracle数据库。设计它的初衷是为了提高LinkedIn的InMail消息服务的可用性。目前有如下一些应用在使用Espresso作为可信源系统。能够看到NoSQL数据存储是如果被用来处理如此众多应用的数据需求很是神奇! 成员间消息, 社交动作,如:更新 文章分享 用户个人资料 公司资料 新闻文章 离线数据库系统 离线系统主要包括Hadoop和一个Teradata数据仓库,用来执行批处理和分析类的工作。之所以被称为离线是因为它对数据执行的的批处理操作。 Apache Azkaban被用来管理Hadoop和ETL任务,这些任务从主可信源系统获取数据后交由map-reduce处理,处理结果被保存在HDFS,然后通知’消费者‘(例如:Voldemart)通过合适的方式来获取这些数据并切换索引来保证能获取到最新的数据。 近线数据库系统(时间线一致性) 近线系统的目标是为了实现时间线一致性(或最终一致性),它处理类似’你可能认识的人(只读数据集)‘、搜索以及社交图这些功能,这些功能的数据会持续更新,但它们对延迟性的要求并不像在线系统那样高。下面是几种不同类型的近线系统: Voldemart,一个Key-Value存储系统,为系统中的只读页面提供服务。Voldemart的数据来源于Hadoop框架 (Hadoop Azkaban:编排Hadoop map-reduce任务的执行计划)。这就是近线系统,它们从类似Hadoop的离线系统获取数据。下面这些页面的数据都是来自于Vold emart: 你可能认识的人 看过本页面的人还在看 相关搜索 你可能感兴趣的工作 你可能感兴趣的事件 下面是几种不同的索引,这些索引由Databus-一个变化数据捕捉系统-来更新的: 供SeaS(Search-as-a-Service)使用的’成员搜索索引‘。当你在LinkedIn上搜索不同的成员时,这些数据就是来自于搜索索引。通常这个功能对招聘人员的帮助很大。 社交图索引帮助在人们的人脉关系中显示成员以及关系。通过这个索引用户几乎可以实时的得到网络关系的变化。 通过读复制集获取到的成员资料数据。这些数据会被’标准化服务‘访问。读复制集是对源数据库的复制,这样能使源数据库的更新同步到这些复制集上面。增加读复制集的最主要原因是能够通过将读操查询分散到读复制集上来减轻源数据库(执行用户发起的写操作)的压力。 下图展示了数据变化捕获事件是如何利用Databus更新到近线系统的: 用数据用例来展示它们是如何工作的 假如你更新了你个人资料中的最新技能和职位。你还接受了一个连接请求。那么在系统内部到底发生了什么: 将更新写入Oracle Master数据库 然后Databus做了如下一系列奇妙的工作来实现时间线一致性: 将资料变更,如最新技能和职位信息,更新到标准化服务。 将上面提到的变更更新到搜索索引服务。 将关系变更更新到图索引服务。 数据架构经验 如果要设计一个像LinkedIn.com一样的支持数据一致性、高扩展性且高可用性的数据架构,可以借鉴下面的经验: 数据库读写分离:你应当计划两种数据库,一种用来执行写操作的可以称为“可信源”系统,另一种执行读操作的可以称为派生数据库系统。这里的经验法则就是将由用户发起的写操作和用户读操作使用的数据库区分开来。 派生数据库系统:用户的读操作应该被分配到派生数据库或者读复制集上去。而派生数据库系统则可以建立在下面的系统之上: - Lucene 索引 NoSQL数据存储,例如:Voldemart、Redis、Cassandra、MongoDB等。 对于用户的读操作,应该尽量从主可信源数据库系统创建索引或者基于key-value的数据(来源于Hadoop map-reduce之类的系统),并且将每次由用户发起的被写入主可信源系统的变更一并更新到这些索引或派生数据(key-value)。 为确保派生数据库系统的数据是最新的,你可以选择应用复写(application-dual writes),即在应用层同时写入主数据库和派生数据库系统,或日志挖掘(读取通过批处理任务得到的主数据存储系统的事务提交日志)。 创建派生数据时,你可以针对主数据集或者变更数据集执行基于Hadoop的map-reduce任务,然后更新HDFS并且通知派生数据存储系统(类似Voldemart的NoSQL存储)来取走数据。 U对于数据一致性来说,你可以以将这些数据存储库创建为分布式系统,集群中的每个节点又都包含主从节点。所有节点都可以创建水平扩展的数据Shards。 为了保证这些分布式数据存储系统正常运行时间最大化,你可以使用像Apache Helix这一类的集群管理工具。

优秀的个人博客,低调大师

从短句到长文,计算机如何学习阅读理解

(从左至右:崔磊、韦福如、周明、杨南) 在电影《她(HER)》中有这样一幕:主人公是一位信件撰写人,人工智能操作系统萨曼莎在得到他的允许后阅读他的邮件资料,总结出需要保留和删除的邮件,帮助他修改信件草稿中的错字,并且与他探讨她喜爱的信件片段。与此同时,萨曼莎通过阅读主人公的海量信息来了解他,也通过阅读互联网上的海量数据来了解世界。阅读这项人类的基本能力,在众多科幻作品中也成了人工智能的入门标配。 尽管人工智能的热点此起彼伏,但毫无疑问的是,自然语言处理始终是实现智能、自然人机交互愿景里一块重要的技术基石。而机器阅读理解则可以被视为是自然语言处理领域皇冠上的明珠,也是目前该领域的研究焦点之一。 做机器阅读理解研究的学者想必对由斯坦福大学自然语言计算组发起的SQuAD(Stanford Question Answering Datase

优秀的个人博客,低调大师

面向机器学习的自然语言标注2.2 背景研究

2.2 背景研究 既然你已经考虑了哪些语言学层次适合标注任务,那么可以对相关研究工作进行了解。虽然建立标注语料库要花费许多工夫,完全由自己单独地完成一个好的标注任务也是可能的,但是首先了解业界的相关研究与发展现状将可以节省大量的时间和精力。很可能已有的一些研究与你正在进行的工作有关,从而使你不必一切从头做起。 例如,如果对时间标注感兴趣,现在ISO-TimeML已成为时间与事件标注方面(包括时间关系)的国际标准化组织标准。这一事实并不要求所有的时间标注都必须原样不动地使用ISO-TimeML的标注方案。在诸如医学和生物医学文本分析的领域中,TimeML可作为有用的起点,但是在有些情况下它给标注人员提供了太多的选项,在另一些情况下则没有覆盖与所在领域相关的一些特殊用例。了解其他人在已有的标注方案中进行的工作,特别是与你的标注计划直接相关

优秀的个人博客,低调大师

面向机器学习的自然语言标注3.3 语言模型

3.3 语言模型 n元语法的好处是什么呢?多年来自然语言处理已经利用n元语法开发了预测序列行为的统计语言模型(language model)。序列行为涉及在包含多个X的序列中识别下一个X。例如,语音识别、机器翻译等。在给定前一个元素的前提下语言模型预测序列中的下一个元素。 让我们更仔细地看看它是如何工作的,以及如何使用前几章讨论的工具。假设有一个单词序列,w1,w2,?wn。预测序列中的任意“下一个单词”wi可以表示为下面的概率函数: 等价于: 请注意,这里涉及两个联合概率分布的计算。我们假定用语料库中的单词序列的频率来估计它的概率。即, P(w1,?wi-1) = Count(w1,?wi-1) P(w1,?wi) = Count(w1,?wi) 以下比率称为相对频率(relative frequency): 注意: 正如我们所看到的,n

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册