导航:首页 > 净水问答 > 协同过滤

协同过滤

发布时间:2021-01-20 07:03:58

Ⅰ 协同过滤中的可扩展性问题是什么

协同过滤算法能够容易地为几千名用户提供较好的推荐,但是对于电子商务网站,往往需要给成百上千万的用户提供推荐,这就一方面需要提高响应时间的要求,能够为用户实时地进行推荐;另一方面还应考虑到存储空间的要求,尽量减少推荐系统运行的负担。

1.3 可扩展性问题

在协同过滤推荐算法中,全局数值算法能及时利用最新的信息为用户产生相对准确的用户兴趣度预测或进行推荐,但是面对日益增多的用户,数据量的急剧增加,算法的扩展性问题(即适应系统规模不断扩大的问题)成为制约推荐系统实施的重要因素。虽然与基于模型的算法相比,全局数值算法节约了为建立模型而花费的训练时间,但是用于识别“最近邻居”算法的计算量随着用户和项的增加而大大增加,对于上百万的数目,通常的算法会遇到严重的扩展性瓶颈问题。该问题解决不好,直接影响着基于协同过滤技术的推荐系统实时向用户提供推荐问题的解决,而推荐系统的实时性越好,精确度越高,该系统才会被用户所接受。

基于模型的算法虽然可以在一定程度上解决算法的可扩展性问题,但是该类算法往往比较适于用户的兴趣爱好比较稳定的情况,因为它要考虑用户模型的学习过程以及模型的更新过程,对于最新信息的利用比全局数值算法要差些。

分析以上协同过滤在推荐系统实现中面临的两个问题,它们的共同点是均考虑到了最近邻居的形成问题(包括用户信息获得的充分性、计算耗费等)。但是应该看到协同过滤在推荐系统的实现中,要获得最近邻居用户,必须通过一定的计算获得用户之间的相似度,然后确定最佳的邻居个数,形成邻居用户集。而在这一过程中,如果对全部数据集进行相似性计算,虽然直接,但是运算量和时间花费都极大,无法适应真实的商务系统。如果通过对训练集数据(整个数据集的某一子集)进行实验获得,虽然不必对整个数据集进行计算,但是必须通过将多次实验结果统计出来才可能得到,这无疑也增加了推荐结果获得的代价和误差。并且如果考虑到数据集的动态变化,这一形成最近邻居用户集技术的实际应用价值越来越小。因此,考虑使用更为有效的最近邻居用户形成办法,对于协同过滤的应用非常必要。

Ⅱ 协同过滤算法有哪些 slope

协同过滤算法是这一领域的主流。作为基于内容的算法执行方式内,协同过滤在准确性上具容有相当的优势,但无法冷启动、同质化和运算效率低使其依然存在很多不足。
协同过滤算法的名称来源于化学上的过滤操作。
原理
利用物质的溶解性差异,将液体和不溶于液体的固体分离开来的一种方法。如用过滤法除去粗食盐中少量的泥沙

过滤实验仪器
漏斗、烧杯、玻璃棒、铁架台(含铁圈)、滤纸。

过滤操作要领
要做到“一贴、二低、三靠”。
一贴
即使滤纸润湿,紧贴漏斗内壁,中间不要留下气泡。(防止气泡减慢过滤速度。)
二低
1.滤纸边缘略低于漏斗边缘。
2.液面低于滤纸边缘。(防止液体过滤不净。)
三靠
1.倾倒时烧杯杯口要紧靠玻璃棒上。
2.玻璃棒下端抵靠在三层滤纸处。
3.漏斗下端长的那侧管口紧靠烧杯内壁。

过滤注意事项
1.烧杯中的混合物在过滤前应用玻璃棒搅拌,然后进行过滤。
2.过滤后若溶液还显浑浊,应再过滤一次,直到溶液变得透明为止。
3.过滤器中的沉淀的洗涤方法:用烧瓶或滴管向过滤器中加蒸馏水,使水面盖没沉淀物,待溶液全部滤出后,重复2~3次。
希望我能帮助你解疑释惑。

Ⅲ 基于消费者的协同过滤与基于产品的协同过滤有何不同

协同过滤(Collaborative Filtering)的基本抄概念就是把这袭种推荐方式变成自动化的流程

协同过滤主要是以属性或兴趣相近的用户经验与建议作为提供个性化推荐的基础。透过协同过滤,有助于搜集具有类似偏好或属性的用户,并将其意见提供给同一集群中的用户作为参考,以满足人们通常在决策之前参考他人意见的心态。

Ⅳ 协同过滤的算法简介

电子商务推荐系统的一种主要算法。
协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。
与传统文本过滤相比,协同过滤有下列优点:
(1)能够过滤难以进行机器自动基于内容分析的信息。如艺术品、音乐;
(2)能够基于一些复杂的,难以表达的概念(信息质量、品位)进行过滤;
(3)推荐的新颖性。
正因为如此,协同过滤在商业应用上也取得了不错的成绩。Amazon,CDNow,MovieFinder,都采用了协同过滤的技术来提高服务质量。
缺点是:
(1)用户对商品的评价非常稀疏,这样基于用户的评价所得到的用户间的相似性可能不准确(即稀疏性问题);
(2)随着用户和商品的增多,系统的性能会越来越低;
(3)如果从来没有用户对某一商品加以评价,则这个商品就不可能被推荐(即最初评价问题)。
因此,现在的电子商务推荐系统都采用了几种技术相结合的推荐技术。
案例: AMAZON个性化推荐系统先驱 (基于协同过滤)
AMAZON是一个虚拟的网上书店,它没有自己的店面,而是在网上进行在线销售。它提供了高质量的综合节目数据库和检索系统,用户可以在网上查询有关图书的信息。如果用户需要购买的话,可以把选择的书放在虚拟购书篮中,最后查看购书篮中的商品,选择合适的服务方式并且提交订单,这样读者所选购的书在几天后就可以送到家。
AMAZON书店还提供先进的个性化推荐功能,能为不同兴趣偏好的用户自动推荐尽量符合其兴趣需要的书籍。 AMAZON使用推荐软件对读者曾经购买过的书以及该读者对其他书的评价进行分析后,将向读者推荐他可能喜欢的新书,只要鼠标点一下,就可以买到该书;AMAZON能对顾客购买过的东西进行自动分析,然后因人而异的提出合适的建议。读者的信息将被再次保存,这样顾客下次来时就能更容易的买到想要的书。此外,完善的售后服务也是AMAZON的优势,读者可以在拿到书籍的30天内,将完好无损的书和音乐光盘退回AMAZON,AMAZON将原价退款。当然AMAZON的成功还不止于此,如果一位顾客在AMAZON购买一本书,下次他再次访问时,映入眼帘的首先是这位顾客的名字和欢迎的字样。

Ⅳ Python实现协同过滤推荐算法,用的大一些的数据集就报错MemoryError

  1. python虽然易用,但是内存占用比较多;所以如果你有C/C++/Java基础,考虑用这些语专言来实现;

  2. CF算法属需要计算大量的相似度,如果能把中间结果存起来,或者简化计算过程(如,你可能会重复计算一个item的均值)可以省下不少内存;(个人试过计算1w个用户Pearson是没问题的)

  3. 如果内存实在不够用,那就用时间换空间,把中间计算结果分成小文件存到磁盘上,用的时候再读取。

    供参考。

Ⅵ 协同过滤,基于内容推荐有什么区别

举个简单的小例子,我们已知道
用户u1喜欢的电影是A,B,C
用户u2喜欢的电影是A, C, E, F
用户u3喜欢的电影是B,D
我们需要解决的问题是:决定对u1是不是应该推荐F这部电影
基于内容的做法:要分析F的特征和u1所喜欢的A、B、C的特征,需要知道的信息是A(战争片),B(战争片),C(剧情片),如果F(战争片),那么F很大程度上可以推荐给u1,这是基于内容的做法,你需要对item进行特征建立和建模。
协同过滤的办法:那么你完全可以忽略item的建模,因为这种办法的决策是依赖user和item之间的关系,也就是这里的用户和电影之间的关系。我们不再需要知道ABCF哪些是战争片,哪些是剧情片,我们只需要知道用户u1和u2按照item向量表示,他们的相似度比较高,那么我们可以把u2所喜欢的F这部影片推荐给u1。
根据数据源的不同推荐引擎可以分为三类
1、基于人口的统计学推荐(Demographic-based Recommendation)
2、基于内容的推荐(Content-based Recommendation)
3、基于协同过滤的推荐(Collaborative Filtering-based Recommendation)
基于内容的推荐:
根据物品或内容的元数据,发现物品或内容的相关性,然后基于用户以前的喜好记录推荐给用户相似的物品
基于内容推荐的一个典型的例子,电影推荐系统,首先我们需要对电影的元数据有一个建模,这里只简单的描述了一下电影的类型;然后通过电影的元数据发现电影间的相似度,因为类型都是“爱情,浪漫”电影 A 和 C 被认为是相似的电影(当然,只根据类型是不够的,要得到更好的推荐,我们还可以考虑电影的导演,演员等等);最后实现推荐,对于用户 A,他喜欢看电影 A,那么系统就可以给他推荐类似的电影 C。

Ⅶ 协同过滤和基于内容推荐有什么区别

基于物品的协同过滤,首先从数据库里获取他之前喜欢的东西,然后从剩下的物品中找到和专他历史兴趣近属似的物品推荐给他。核心是要计算两个物品的相似度。

内容过滤的基本思想是,给用户推荐和他们之前喜欢的物品在内容上相似的其他物品。核心任务就是计算物品的内容相似度。

Ⅷ 协同过滤算法和聚类算法有什么区别

协同过滤多处理的是异构数据,数据差别大种类多;聚类多处理的是同构数据

Ⅸ 协同过滤中的实时性定义及解决思路

自从第一台IoT设备于年问世以来,物联网已经有了长足的发展,这是一种可以在互联网上开启和关闭的烤面包机。27年之后,联网设备已经从新奇产品变成了日常生活中必不可少的一部分。

最近的预估显示,成年人平均每天花在智能手机上的时间超过4个小时,只能手机也是一种装有物联网传感器数据的设备。目前,81%的成年人拥有智能手机。想象一下,当81%的成年人拥有智能汽车和智能家居时,我们将会收到多少数据。
今天,IoT设备的大部分数据都在云中处理,这意味着全球所有角落产生的数据都被集中发送到数据中心的少数计算机上。然而,随着IoT设备的数量预计将在2020年猛增至200亿,通过互联网发送数据的体积和速度对云计算方法提出了严峻的挑战。

越来越多的设备连接将迫使IoT制造商在2018年将云计算模式从云计算模式转移到一种称为“雾计算”的新模式。

越来越多的数据访问,云计算问题明显
物联网和人工智能的发展将带来价值数以亿计的数据。分布广泛的传感器、智能终端等每时每刻都在产生大量的数据。尽管云计算拥有“无限”的计算和存储资源池,但云数据中心往往是集中化的且距离终端设备较远,当面对大量的分布广泛的终端设备及所采集的海量数据时,云不可避免地遇到了三大难题:
网络拥塞,如果大量的物联网和人工智能应用部署在云中,将会有海量的原始数据不间断地涌入核心网络,造成核心网络拥塞;
高延迟,终端设备与云数据中心的较远距离将导致较高的网络延迟,而对实时性要求高的应用则难以满足需求;
可靠性无法保证,对可靠性和安全性要求较高的应用,由于从终端到云平台的距离远,通信通路长,因而风险大,云中备份的成本也高。

因此,为满足物联网和人工智能等应用的需求,作为云计算的延伸扩展,雾计算(Fog Computing)的概念应运而生。雾计算最早由思科提出,它是一种分布式的计算模型,作为云数据中心和物联网设备 / 传感器之间的中间层,它提供计算、网络和存储设备,让基于云的服务可以离物联网设备和传感器更近。
雾计算主要使用边缘网络中的设备,可以是传统网络设备,如网络中的路由器、交换机、网关等,也可以是专门部署的本地服务器。这些设备的资源能力都远小于一个数据中心,但是它们庞大的数量可以弥补单一设备资源的不足。
在物联网中,雾可以过滤、聚合用户消息,匿名处理用户数据以保证隐秘性,初步处理数据以便实时决策,提供临时存储以提升用户体验,而云则可以负责大运算量或长期存储任务,与雾计算优势互补。通过雾计算,可以将一些并不需要放到云上的数据在网络边缘层直接进行处理和存储,提高数据分析处理的效率,降低时延,减少网络传输压力,提升安全性。雾计算以其广泛的地理分布、带有大量网络节点的大规模传感器网络、支持高移动性和实时互动以及多样化的软硬件设备和云在线分析等特点,迅速被物联网和人工智能应用领域的企业所接受并获得广泛应用,例如,M2M、人机协同、智能电网、智能交通、智能家居、智能医疗、无人驾驶等应用。
与边缘计算(Edge Computing)不同的是,雾计算可以将基于云的服务 , 如 IaaS、 PaaS、 SaaS,拓展到网络边缘,而边缘计算更多地专注于终端设备端。雾计算可以进行边缘计算,但除了边缘网络,雾计算也可以拓展到核心网络,也就是边缘和核心网络的组件都可以作为雾计算的基础设施。

“云”和“雾”典型案例和应用场景
融合云平台和雾计算,一方面可通过云降低传统 IT采购、管理和运维的开支,将 IaaS、 PaaS、 SaaS作为云服务输出;另一方面,通过雾计算可保证边缘端数据的实时搜集、提取和分析速度,提高网络资源部署使用和管理效率,有助于提高人机协同效率,为企业业务创新、服务品质提升提供技术支持。以下是四个行业“云”和“雾”的典型案例和应用场景。

工业
GE基于 Pivotal Cloud Foundry打造了 Predix 物联网 PaaS平台,结合戴尔智能仿真技术,实现了“数据双胞胎”。基于云计算,GE 实现了飞机发动机生产过程中的调优,同时,基于雾计算,GE 实现了飞机飞行过程中的“自愈”。
GE Predix 作为物联网 PaaS 平台,还助力制造企业将大数据、物联网和人工智能转化为智能制造能力,实现数据创新。GE Predix 平台,融合云计算和雾计算以及”数字双胞胎“,帮助制造企业实现“虚拟 - 现实”的设计生产融合,并为其提供云计算服务。
农业
Chitale Dairy是一家乳制品厂。基于戴尔科技虚拟化技术,Chitale Dairy实现了 ERP云部署。他们基于雾计算,通过为奶牛装上传感器,进行近实时数据采集分析、处理,实现精细化运营,保证乳制品生产全流程的监控、管理、优化。同时,Chitale Dairy 通过基于云的乳业生命周期管理平台,实现了乳制品生产流程自动化管理,通过物联网和大数据分析,对每头奶牛从食料、喂养、健康、牛奶质量和产量进行全流程监控分析,实现精细化和自动化乳业生产。
将云的整体业务管理和雾端的优化农场间协作以及奶源监控管理紧密连接起来,在提高乳制品生命周期管理效率的同时,提升了协同和协作效率,加速企业业务创新的速度。

服务业
TopGolf 是一家高尔夫俱乐部。通过采用戴尔科技的虚拟化和超融合技术,形成了高尔夫数字化高端服务输出能力。他们通过向数字化转型,打破了传统高尔夫的业务模式。通过物联网,将 RFID 芯片嵌入高尔夫球里,实现对每次击球、每个队员和赛事进行实时监控,并基于雾计算,实时跟踪和分析每个击球动作和球的路径,实现实时积分。
TopGolf 的业务模式融合了云计算和雾计算,实现了跨数据中心、云和边缘应用的实时数据监控、交互和管理,满足赛事实时监控、场上场下互动、赛前球员积分分析、社交媒体、会员个性化数据管理等大数据分析的需求。

交通业
在智能交通中,可通过传感器搜集信息,进行实时数据分析和交通部署,以提高公共安全。通过雾计算,智能交通控制系统中的一个雾节点可以共享收集到的交通信息,以缓解高峰时段的交通拥堵、定位交通事故,并可以通过远程控制缓解交通拥堵区域的交通状况。同时,在每个用户的电话和公共交通中,基于雾计算的应用程序允许用户在没有持续网络连接的情况下,共享并通过附近的用户下载内容。
此外,自动化车辆的安全系统、道路上的监控系统以及公共交通的票务系统,都可以从传感器和视频数据中收集大量信息。聚合后的数据将传输到云上,根据用户的需求进行数据提取和分析,再基于雾计算实现边缘数据实时分析,从而为用户快速提供精准信息,以保障公共交通的畅通和安全。

未来雾计算将扮演重大角色
从商业运营模式到工作生活方式,智能物联网技术正深刻改变着人类社会。要让物联网拥有无处不在的智能,就必须充分利用网络环境中分散存在的计算、存储、通信和控制等能力,通过资源共享机制和协同服务架构来有效提升生产效率或用户体验。

当前,雾计算技术的研究和标准化工作刚刚起步。我们面临的主要技术挑战和研究热点为:如何在雾计算节点之间建立信任关系,如何在它们之间推动资源充分共享,如何在云—雾—边缘等多层次之间实现高效通信和紧密协作,如何在异构节点之间完成复杂任务的公平按需分配等。
可以预见,随着雾计算技术的不断发展成熟和普及应用,智能物联网将越来越便捷、越来越真实地借鉴和映射人类社会的组织架构和决策机制,从而能用更自然和更熟悉的方式为每个人提供触手可及、无处不在的智能服务。

Ⅹ 协同过滤java用什么实现

众所周知,java在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,在做数据处理中,我们常见的手段是分解,压缩,并行,临时文件等方法;例如,我们要将数据库(不论是什么数据库)的数据导出到一个文件,一般是Excel或文本格式的CSV;对于Excel来讲,对于POI和JXL的接口,你很多时候没有法去控制内存什么时候向磁盘写入,很恶心,而且这些API在内存构造的对象大小将比数据原有的大小要大很多倍数,所以你不得不去拆分Excel,还好,POI开始意识到这个问题,在3.8.4的版本后,开始提供cache的行数,提供了SXSSFWorkbook的接口,可以设置在内存中的行数,不过可惜的是,他当你超过这个行数,每添加一行,它就将相对行数前面的一行写入磁盘(如你设置2000行的话,当你写第20001行的时候,他会将第一行写入磁盘),其实这个时候他些的临时文件,以至于不消耗内存,不过这样你会发现,刷磁盘的频率会非常高,我们的确不想这样,因为我们想让他达到一个范围一次性将数据刷如磁盘,比如一次刷1M之类的做法,可惜现在还没有这种API,很痛苦,我自己做过测试,通过写小的Excel比使用目前提供刷磁盘的API来写大文件,效率要高一些,而且这样如果访问的人稍微多一些磁盘IO可能会扛不住,因为IO资源是非常有限的,所以还是拆文件才是上策;而当我们写CSV,也就是文本类型的文件,我们很多时候是可以自己控制的,不过你不要用CSV自己提供的API,也是不太可控的,CSV本身就是文本文件,你按照文本格式写入即可被CSV识别出来;如何写入呢?下面来说说。。。在处理数据层面,如从数据库中读取数据,生成本地文件,写代码为了方便,我们未必要1M怎么来处理,这个交给底层的驱动程序去拆分,对于我们的程序来讲我们认为它是连续写即可;我们比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意的时候每次buffer的数据,在用outputstream写入的时候,最好flush一下,将缓冲区清空下;接下来,执行一个没有where条件的SQL,会不会将内存撑爆?是的,这个问题我们值得去思考下,通过API发现可以对SQL进行一些操作,例如,通过:PreparedStatementstatement=connection.prepareStatement(sql),这是默认得到的预编译,还可以通过设置:PreparedStatementstatement=connection.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);来设置游标的方式,以至于游标不是将数据直接cache到本地内存,然后通过设置statement.setFetchSize(200);设置游标每次遍历的大小;OK,这个其实我用过,oracle用了和没用没区别,因为oracle的jdbcAPI默认就是不会将数据cache到java的内存中的,而mysql里头设置根本无效,我上面说了一堆废话,呵呵,我只是想说,java提供的标准API也未必有效,很多时候要看厂商的实现机制,还有这个设置是很多网上说有效的,但是这纯属抄袭;对于oracle上面说了不用关心,他本身就不是cache到内存,所以java内存不会导致什么问题,如果是mysql,首先必须使用5以上的版本,然后在连接参数上加上useCursorFetch=true这个参数,至于游标大小可以通过连接参数上加上:defaultFetchSize=1000来设置,例如:jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeconvertToNull&useCursorFetch=true&defaultFetchSize=1000上次被这个问题纠结了很久(mysql的数据老导致程序内存膨胀,并行2个直接系统就宕了),还去看了很多源码才发现奇迹竟然在这里,最后经过mysql文档的确认,然后进行测试,并行多个,而且数据量都是500W以上的,都不会导致内存膨胀,GC一切正常,这个问题终于完结了。我们再聊聊其他的,数据拆分和合并,当数据文件多的时候我们想合并,当文件太大想要拆分,合并和拆分的过程也会遇到类似的问题,还好,这个在我们可控制的范围内,如果文件中的数据最终是可以组织的,那么在拆分和合并的时候,此时就不要按照数据逻辑行数来做了,因为行数最终你需要解释数据本身来判定,但是只是做拆分是没有必要的,你需要的是做二进制处理,在这个二进制处理过程,你要注意了,和平时read文件不要使用一样的方式,平时大多对一个文件读取只是用一次read操作,如果对于大文件内存肯定直接挂掉了,不用多说,你此时因该每次读取一个可控范围的数据,read方法提供了重载的offset和length的范围,这个在循环过程中自己可以计算出来,写入大文件和上面一样,不要读取到一定程序就要通过写入流flush到磁盘;其实对于小数据量的处理在现代的NIO技术的中也有用到,例如多个终端同时请求一个大文件下载,例如视频下载吧,在常规的情况下,如果用java的容器来处理,一般会发生两种情况:其一为内存溢出,因为每个请求都要加载一个文件大小的内存甚至于,因为java包装的时候会产生很多其他的内存开销,如果使用二进制会产生得少一些,而且在经过输入输出流的过程中还会经历几次内存拷贝,当然如果有你类似nginx之类的中间件,那么你可以通过send_file模式发送出去,但是如果你要用程序来处理的时候,内存除非你足够大,但是java内存再大也会有GC的时候,如果你内存真的很大,GC的时候死定了,当然这个地方也可以考虑自己通过直接内存的调用和释放来实现,不过要求剩余的物理内存也足够大才行,那么足够大是多大呢?这个不好说,要看文件本身的大小和访问的频率;其二为假如内存足够大,无限制大,那么此时的限制就是线程,传统的IO模型是线程是一个请求一个线程,这个线程从主线程从线程池中分配后,就开始工作,经过你的Context包装、Filter、拦截器、业务代码各个层次和业务逻辑、访问数据库、访问文件、渲染结果等等,其实整个过程线程都是被挂住的,所以这部分资源非常有限,而且如果是大文件操作是属于IO密集型的操作,大量的CPU时间是空余的,方法最直接当然是增加线程数来控制,当然内存足够大也有足够的空间来申请线程池,不过一般来讲一个进程的线程池一般会受到限制也不建议太多的,而在有限的系统资源下,要提高性能,我们开始有了newIO技术,也就是NIO技术,新版的里面又有了AIO技术,NIO只能算是异步IO,但是在中间读写过程仍然是阻塞的(也就是在真正的读写过程,但是不会去关心中途的响应),还未做到真正的异步IO,在监听connect的时候他是不需要很多线程参与的,有单独的线程去处理,连接也又传统的socket变成了selector,对于不需要进行数据处理的是无需分配线程处理的;而AIO通过了一种所谓的回调注册来完成,当然还需要OS的支持,当会掉的时候会去分配线程,目前还不是很成熟,性能最多和NIO吃平,不过随着技术发展,AIO必然会超越NIO,目前谷歌V8虚拟机引擎所驱动的node.js就是类似的模式,有关这种技术不是本文的说明重点;将上面两者结合起来就是要解决大文件,还要并行度,最土的方法是将文件每次请求的大小降低到一定程度,如8K(这个大小是经过测试后网络传输较为适宜的大小,本地读取文件并不需要这么小),如果再做深入一些,可以做一定程度的cache,将多个请求的一样的文件,cache在内存或分布式缓存中,你不用将整个文件cache在内存中,将近期使用的cache几秒左右即可,或你可以采用一些热点的算法来配合;类似迅雷下载的断点传送中(不过迅雷的网络协议不太一样),它在处理下载数据的时候未必是连续的,只要最终能合并即可,在服务器端可以反过来,谁正好需要这块的数据,就给它就可以;才用NIO后,可以支持很大的连接和并发,本地通过NIO做socket连接测试,100个终端同时请求一个线程的服务器,正常的WEB应用是第一个文件没有发送完成,第二个请求要么等待,要么超时,要么直接拒绝得不到连接,改成NIO后此时100个请求都能连接上服务器端,服务端只需要1个线程来处理数据就可以,将很多数据传递给这些连接请求资源,每次读取一部分数据传递出去,不过可以计算的是,在总体长连接传输过程中总体效率并不会提升,只是相对相应和所开销的内存得到量化控制,这就是技术的魅力,也许不要太多的算法,不过你得懂他。类似的数据处理还有很多,有些时候还会将就效率问题,比如在HBase的文件拆分和合并过程中,要不影响线上业务是比较难的事情,很多问题值得我们去研究场景,因为不同的场景有不同的方法去解决,但是大同小异,明白思想和方法,明白内存和体系架构,明白你所面临的是沈阳的场景,只是细节上改变可以带来惊人的效果。

阅读全文

与协同过滤相关的资料

热点内容
一部电影开头给小男孩洗澡 浏览:901
peta混合树脂 浏览:48
污水处理手续是什么样的 浏览:296
洗碗机先除垢还是先清洁 浏览:406
树脂小天使工艺品 浏览:309
为什么要控制蒸馏速度加热速度过快或 浏览:843
蒸馏系统示意图 浏览:632
露下体电影 浏览:311
涂装废水中水回用 浏览:703
家乐事牌子净水器怎么样 浏览:698
粤语之家 浏览:186
污水处理泵房图纸怎么看 浏览:362
饮水机的排水阀有什么用 浏览:341
米酒过滤器小的 浏览:81
饮水机保温后水多少度 浏览:129
tcl净化器怎么打开 浏览:653
污水人才求职 浏览:570
泰州污水处理用什么标准 浏览:922
看2d电影坐第几排最好 浏览:376
古力井冒污水怎么办 浏览:931