• 关于

    三法则是什么

    的搜索结果

回答

我的建议是:参考三次法则第一次不用在意什么原则,建议之类,怎么快怎么来。第二次,开始出现重复的时候提高警觉,但容忍一些违反原则的写法第三次重复的时候重构你的代码当然如果你在第一次解决问题的时候已经预见到问题会来三次,那直接按第三次的方式来写也ok,但如果你预测老不应验,那还是别设计那么多东西,遵循YAGNI吧

落地花开啦 2019-12-02 02:53:34 0 浏览量 回答数 0

回答

一个子程序(过程或函数)的定义中又直接或间接地调用该子程序本身,称为递归。递归是一种非常有用的程序设计方法。用递归算法编写的程序结构清晰,具有很好的可读性。递归算法的基本思想是:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。 利用递归算法解题,首先要对问题的以下三个方面进行分析: 一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些。把它们找出来。 二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解。这就是问题的边界条件及边界值。 三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现。这是解决递归问题的难点。把这些步骤或等式确定下来。 把以上三个方面分析好之后,就可以在子程序中定义递归调用。其一般格式为: if 边界条件 1 成立 then 赋予边界值 1 【 elseif 边界条件 2 成立 then 赋予边界值 2 ┇ 】 else 调用解决问题的通式 endif 例 1 : 计算勒让德多项式的值 x 、 n 由键盘输入。 分析: 当 n = 0 或 n = 1 时,多项式的值都可以直接求出来,只是当 n > 1 时,才使问题变得复杂,决定问题复杂程度的参数是 n 。根据题目提供的已知条件,我们也很容易发现,问题的边界条件及边界值有两个,分别是:当 n = 0 时 P n (x) = 1 和当 n = 1 时 P n (x) = x 。解决问题的通式是: P n (x) = ((2n - 1)P n - 1 (x) - (n - 1)P n - 2 (x)) / n 。 接下来按照上面介绍的一般格式定义递归子程序。 function Pnx(n as integer) if n = 0 then Pnx = 1 elseif n = 1 then Pnx = x else Pnx = ((2*n - 1)*Pnx(n - 1) - (n - 1)*Pnx(n - 2)) / n endif end function 例 2 : Hanoi 塔问题:传说印度教的主神梵天创造世界时,在印度北部佛教圣地贝拿勒斯圣庙里,安放了一块黄铜板,板上插着三根宝石针,在其中一根宝石针上,自下而上地放着由大到小的 64 个金盘。这就是所谓的梵塔( Hanoi ),如图。梵天要求僧侣们坚持不渝地按下面的规则把 64 个盘子移到另一根针上: (1) 一次只能移一个盘子; (2) 盘子只许在三根针上存放; (3) 永远不许大盘压小盘。 梵天宣称,当把他创造世界之时所安放的 64 个盘子全部移到另一根针上时,世界将在一声霹雳声中毁灭。那时,他的虔诚的信徒都可以升天。 要求设计一个程序输出盘子的移动过程。 分析: 为了使问题更具有普遍性,设共有 n 个金盘,并且将金盘由小到大依次编号为 1 , 2 ,…, n 。要把放在 s(source) 针上的 n 个金盘移到目的针 o(objective) 上,当只有一个金盘,即 n = 1 时,问题是比较简单的,只要将编号为 1 的金盘从 s 针上直接移至 o 针上即可。可定义过程 move(s,1,o) 来实现。只是当 n>1 时,才使问题变得复杂。决定问题规模的参数是金盘的个数 n ;问题的边界条件及边界值是:当 n = 1 时, move(s,1,o) 。 当金盘不止一个时,可以把最上面的 n - 1 个金盘看作一个整体。这样 n 个金盘就分成了两个部分:上面 n - 1 个金盘和最下面的编号为 n 的金盘。移动金盘的问题就可以分成下面三个子问题(三个步骤): (1) 借助 o 针,将 n - 1 个金盘(依照上述法则)从 s 针移至 i(indirect) 针上; (2) 将编号为 n 的金盘直接从 s 针移至 o 针上; (3) 借助 s 针,将 i 针上的 n - 1 个金盘(依照上述法则)移至 o 针上。如图 其中第二步只移动一个金盘,很容易解决。第一、第三步虽然不能直接解决,但我们已经把移动 n 个金盘的问题变成了移动 n - 1 个金盘的问题,问题的规模变小了。如果再把第一、第三步分别分成类似的三个子问题,移动 n - 1 个金盘的问题还可以变成移动 n - 2 个金盘的问题,同样可变成移动 n - 3 ,…, 1 个金盘的问题,从而将整个问题加以解决。 这三个步骤就是解决问题的通式,可以以过程的形式把它们定义下来: hanoi(n - 1,s,o,i) move(s,n,o) hanoi(n - 1,i,s,o) 参考程序如下: declare sub hanoi(n,s,i,o) declare sub move(s,n,o) input "How many disks?",n s = 1 i = 2 o = 3 call hanoi(n,s,i,o) end sub hanoi(n,s,i,o) rem 递归子程序 if n = 1 then call move(s,1,o) else call hanoi(n - 1,s,o,i) call move(s,n,o) call hanoi(n - 1,i,s,o) endif end sub sub move(s,n,o) print "move disk";n; print "from";s;"to";o end sub

小旋风柴进 2019-12-02 01:23:57 0 浏览量 回答数 0

问题

ODPS的使用性能比RDS的差,什么原因?

福利达人 2019-12-01 21:27:11 3799 浏览量 回答数 2

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

Re可以在赛程过半的时候改一次数据 简直就是调参大赛,,看那个队名,,,前面有几个,严重怀疑是马甲,真不知道这些马甲到了复赛,会不会成为僵尸帐号。到时候,500个帐号,400个僵尸帐号,我倒是看看alibaba面子往哪里搁。 最好成绩161.现在已经跌到300了。。。这个节奏,没几天就跌出500了。 昨天改了一下模型,名次没升,反而降了好多。决定拿最好的成绩,开始调参。。。 ------------------------- Re可以在赛程过半的时候改一次数据 最好成绩160多名,今天又从300多跌倒400多了。。。,这个节奏,明天就跌出前500了。 前面的排名非常接近。差%0.01都差好几名。在数据量不是很大的情况下,很容易好的算法被剔除前500(包含n个小号,你懂的)。 我还想进入S2,尝试一下我的算法在大树据下面的效果呢。。。看来没啥机会了。。。 这两天在研究ODPS,看这个趋势,看来派不上什么用场。 ------------------------- Re可以在赛程过半的时候改一次数据 巨数法则,大家都懂咯。。。500的S2名额,微弱的F1差距,N个马甲~ ------------------------- Re可以在赛程过半的时候改一次数据 最好分之和?我觉得不妥,现在你看前面的分数多么接近,昨天我改了一下阀值,比对了下结果。就多了一条记录,F1提高了0.07%。这0.07%提高了几十名。 对于小号的处理,我现在也没什么好想法。还是官方想办法吧。 我觉得比较好的方法是,增加S1的样本数量。新样本包含旧样本的所有结果(闭包,你懂的)。 每周增加10%,最后一周每天增加1%。 首先,把一些比较挫的,要跑好几天的算法排除掉了。 第二,如果大家不提交数据,以前数据仍然有效(闭包嘛)。 第三,对手动调数据(不是调参,而是直接调数据)的人士,予以打击。

好了,是我 2019-12-02 02:58:32 0 浏览量 回答数 0

问题

如何快速掌握性能知识体系,做好性能测试?

云效平台 2019-12-01 21:40:27 4526 浏览量 回答数 0

回答

第一讲打卡 A1 B A2 云平台相对传统的虚拟化容器来讲,有强大的技术支持,完全将底层硬件设备归为整体,再其之上进行整合处理,很好的利用当前系统内的资源,同时进行分配资源 A3 SaaS、PaaS、IaaS都属于云计算服务,也就是云计算+服务 IaaS:用户可以在云服务提供商提供的基础设施上部署和运行任何软件,包括操作系统和应用软件 PaaS:PaaS给用户提供的能力是使用由云服务提供商支持的编程语言、库、服务以及开发工具来创建、开发应用程序并部署在相关的基础设施上 SaaS:SaaS给用户提供的能力是使用在云基础架构上运行的云服务提供商的应用程序。 A4 Java,Devops。 第二讲打卡 A1 不需要 A2 轻量级web服务器/反向代理服务器 四层/七层负载均衡 占用内存少,并发强丰富的插件功能模块 ###A3 不可以,SLB的四层采用的是LVS A4 一次连接:对数据仅做转发作用 二次连接:要增加与后端服务的连接 应用场景:一次连接会使得整个负载均衡的性能得到一定的高度,而二次连接较一次连接多一中间一次数据包的处理以及增加一次tcp连接,性能方面不如一次的,但是安全等等应该会有所保障。(个人觉得适用场景:一次可以类似于udp一样的存在,二次相当于tcp一样存在) A5 I/O 5分钟法则,什么情况下适用:::个人看法觉得高访问数据,热点数据都需要放在缓存中,当然注意缓存时效性以及缓存穿透。 A6 关系型数据库(ACID模型)、BASE模型、非关系型数据库 关系型:Oracle、MySQL、SQL Server非关系:Redis、Memcache A7 2* 8C16G 15M 第三讲打卡 A1 云平台能够更好的进行业务的水平方向扩展,并且能够跟随业务的特性能够动态伸缩。 A2 DNS + 跨地域/跨平台 + 容器化 分布式架构 A3 四层。后端项目ECS、nginx配置都需要一致 A4 系统数据:Rsync,快照 文件数据:NFS,OSS 数据库:主从 A5 IO读写相关压力 单表数据量过大查询不便 第四讲打卡 A1 云端配置选型 云端网络架构云端负载均衡云端静态资源访问云端运维管理 A2 Zabbix的Server端数据是以关系型数据库为主,对云容器支持不太好; Prometheus属于容器监控体系技术,对云产品、站点、日志、代码监控问题无法解决; A3 云监控会成为未来监控的主要趋势。 云平台把常见的开源环境,Web、缓存、数据库等进行封装产品化,统一对外提供基础功能入口。 A4 轻量级容器启动可以秒级完成发布; 对固定的ECS没有依赖;Docker容器资源自定义配置,最大化提升资源利用率;可以结合JIRA+Confluence做项目管理及知识库管理;可以更好的进行服务的水平扩增;容器之间环境配置可以进行很好的隔离; A5 使用Docker+K8S+DNS+Rancher 第五讲打卡 A1 不可以,WAF针对的是OSI七层模型中的HTTP层的防御。 A2 SLB ###A3 DDoS+WAF A4 DDoS+ WAF+CDN+SLB+ECS(水平方向多节点)

montos 2020-06-09 23:42:12 0 浏览量 回答数 0

回答

你看的高性能mysql那本书么?我也测试过,要看下你的代码例子,如果你A事务insert提交了, B事务还是可以读取到的,如果你B在A提交之前先select一下,然后就不会读到了,一致性读  consistent read######你试试在同两个session窗中更改不同隔离级别测试,RC,RR都是乱的,RR有时候不能保证幻读,RC可重复读。set global transaction isolation level read committed或者repeatable read######Percona技术团队编写Taobao技术团队翻译的 高性能MySQL 开篇第一章就提到了ACID中的事务隔离性Isolation. my.cnf配置: [mysqld] transaction-isolation = REPEATABLE-READ 可选: READ-UNCOMMITTED(未提交读):其他事务可以看到当前事务中没有提交的修改,会导致脏读:一个事务读到另外一个事务还没有提交的数据. READ-COMMITTED(提交读):大多数数据库默认的隔离级别,避免了脏读,但会导致不可重复读:两次执行同样的查询,可能得到不一样的结果. REPEATABLE-READ(可重复读,默认):实现可重复读,保证同一事务多次读取同样的记录的结果是一致的.但仍避免不了幻读,不过InnoDB用多版本并发控制MVCC解决了幻读的问题. SERIALIZABLE(可串行化):通过强制事务串行化,避免出现幻读,简单说就是在读取的每一行数据上都加锁,所以可能会导致大量的超时和锁争用的问题,实际需要并发的场景很少使用. 所谓幻读,指的是当某个事务在读取某个范围的记录时,另外一个事务又在该范围内插入了新的记录. 当之前的事务再次读取该范围内的记录时,会产生幻行. InnoDB的MVCC,是通过在每行记录后保存两个隐藏的列来实现的. 这两个列,一个保存了行的创建时间,一个保存了行的过期时间(或删除时间). 其内存储的并不是实际的时间值,而是系统版本号. 每开始一个新的事务,系统版本号都会自动递增. 事务开始时刻的系统版本号会作为事务的版本号, 用来和查询到的每行记录的版本号进行比较. 下面看一下在默认的REPEATABLE-READ(可重复读)事务隔离级别下,MVCC的具体操作: ######回复 @炁月 : 同学,关于MVCC的版本可见性规则 你可以去查查资料了解下,并不是你说的那样,然后你再用show engine innodb status 看下事务那栏的信息,它会告诉你当前活跃事务 版本的可见性。。######你这个逼装的有弹性、有深度、有湿度,水也不少,可以说是非常漂亮、滑爽。但是少了那么一丝朴实,没有给我焕然一新的感觉,如果再加入那么一丝朴实的话,这个逼就无人能挡了,我希望在国际装逼总决赛的舞台上,看到焕然一新的你,好吗?我给你YES。 --via struct######eechen 自己对很多事情不了解就开始胡说八道,还不听对方的话。以德报怨,何以报德?我们尊重他,他却只会更加猖狂,还是先教会他社会的法则吧!via MikeManilone######OSC最讨厌的人: @eechen ,同意的右下角。via Bery http://my.oschina.net/bery/tweet/9658008######回复 @eechen : 不是什么东西都能粗略的呀,你这代码,真要拿来用的时候,那多出来的数据会加入你后续排序和计算欧几里得距离的过程,影响性能的呀。而且这种影响是毫无意义的浪费,要是写php都像你这么浪费,谁还敢用php. --via 张亦俊###### mvcc只是有版本号,具体幻不幻读得看实现。 要实现不幻读,需要加锁,影响并发性能,所以数据库在默认情况下允许幻读也是可以的。如果需要避免它,可以人工加锁select for update/lock table等 ######http://www.postgres.cn/docs/9.3/transaction-iso.html 。在PostgreSQL里,你可以请求四种可能的事务隔离级别中的任意一种。但是在内部, 实际上只有三种独立的隔离级别,分别对应读已提交,可重复读和可串行化。如果你选择了读未提交的级别, 实际上你获得的是读已提交,并且在PostgreSQL的可重复读实现中,幻读是不可能的,######回复 @Ambitor : 不过这种场景比较少,比如每增加一行,在触发器更新下统计结果。如果仅用数据库的mvcc,在统计的时候,如果有其它相关的DML,虽然确实没有幻读,但实际统计的结果是过时的,如果有其它计算需要依赖这个统计,就会造成错误。######回复 @Ambitor : 这样确实能在定义上避免幻读,但是实际使用的时候,多行操作如果不阻塞其它的DML语句,可能会出现过时的结果,所以一般都手动加锁来避免数据错误。###### 如果当前隔离级别 没有幻读 也就不是 repeatable-read了(不符合他的定义了) ###### Mysql从来没有实现过 MVVC######回复 @宏哥 : 我不是很精通这个,就说一些我观察到的片面,oracle是可以通过undo找回以前时间节点被DML的记录,如果开启archive log,就能找回任意时间节点的,但是唯独一个例外,如果一个表被DDL过,archive就丢失了。######回复 @宏哥 : oracle和mysql都不能回滚,都是隐式提交的 [抠鼻]######回复 @Ambitor : 查了一下, oracle不能回滚DDL######回复 @乌龟壳 : 查了一下,, 确实不可以, 好奇怪######回复 @宏哥 : 怎么回滚? [抠鼻]######那你为什么要用mysql?###### 引用来自“dy810810”的评论那你为什么要用mysql? 哈哈, mysql 和流感差不多, 搞web不来几次,都不行######就是因为mvcc,才有的幻读######mysql可重复读隔离模式下有间隙锁,但是还是没有完全解决幻读的问题.######这篇文章讲的还不错http://blog.sina.cn/dpool/blog/s/blog_499740cb0100ugs7.html?vt=4######呵呵,为嘛 可以解释清楚么?######MVCC是为了解决重复读的问题的,幻读是另外一回事了,因为每个DML操作都操作的是最新的page,而不会去更新MVCC中的undo快照去update,所以同时操作最新的page 只有锁能解决幻读问题啊。幻读其实是并发问题。而MVCC为什么能解决重复读,是因为当最新的page被某个事务锁了,那么另外一个事务在读的时候只会读之前当前可见最新的版本,并且始终读的是这个page 所以可以重复读###### MVCC也可以通过一些办法解决幻影读的问题,例如select之后将读取的范围映射为一个新的数据;这样当有另外一个事务去修改前事务查询范围时候,会检查到写冲突; 对于解决幻影读实现序列读的做法,mysql好像是基于严格的2PL协议做的,oracle好像是利用上面的办法解决; 其实不用上述方法,业务上在表定义的时候规避也是可以的,即一个事务中的操作如果存在因果关系,则原因为读的操作,只读一个记录,不读多条记录。

kun坤 2020-06-08 11:16:08 0 浏览量 回答数 0

回答

  定位(Positioning),是由著名的美国营销专家艾尔·列斯(AlRies)与杰克·特罗(Jack   Trout)于70年代早期提出来的,当时,他们在美国《广告时代》发表了名为《定位时代》系列文章,以后,他们又把这些观点和理论集中反映在他们的第一本著作《广告攻心战略》一书中,正如他们所言,这是一本关于传播沟通的教科书。1996年,杰克·特罗整理了25年来的工作经验,写出了《新定位》一书。也许是更加符合了时代的要求,但其核心思想却仍然源自于他们于1972年提出的定位论。定位理论的产生,源于人类各种信息传播渠道的拥挤和阻塞,可以归结为信息爆炸时代对商业运作的影响结果。科技进步和经济社会的发展,几乎把消费者推到了无所适从的境地。首先是媒体的爆炸:广播、电视、互联网,录音带、录像带、光盘使消费者目不暇接。其次是产品的爆炸:仅电视就有大屏幕的、小屏幕的,平面直角的、超平的、纯平的,从耐用消费品到日用品,都给人以眼花缭乱的感觉。再就是广告的爆炸:电视广告、广播广告、报刊广告、街头广告、楼门广告、电梯广告,真可谓无孔不入。因此,定位就显得非常必要。   按照艾尔·列斯与杰克·特罗的观点:定位,是从产品开始,可以是一件商品,一项服务,一家公司,一个机构,甚至于是一个人,也可能是你自己。定位并不是要你对产品做什么事情,定位是你对产品在未来的潜在顾客的脑海里确定一个合理的位置,也就是把产品定位在你未来潜在顾客的心目中。定位可以看成是对现有产品的一种创造性试。“改变的是名称、价格及包装,实际上对产品则完全没有改变,所有的改变,基本上是在作着修饰而已,其目的是在潜在顾客心中得到有利的地位”。   定位的前提   按照艾尔·列斯与杰克·特罗的理论,我们目前已成为一个传播过多的社会,而消费者只能接受有限的信息,消费者抵御这种“信息爆炸”的最有力武器就是最小努力法则--痛恨复杂,喜欢简单。现有产品在顾客心目中都有一定的位置,例如,人们认为可口可乐是世界上最大饮料生产商,格兰仕是中国最大的微波炉生产商,北京同仁医院是中国最著名的眼科医院等,这些产品和服务的提供者在与消费者长期的交易中所拥有的地位,是其他人很难取代的。也就是说,消费者对品牌的印象不会轻易改变。定位的基本原则不是去创造某种新奇的或与众不同的东西,而是去操纵人们心中原本的想法,去打开联想之结,目的是要在顾客心目中,占据有利的地位。唯其如此,方能在市场上赢得有利的竞争地位。   一般说来,企业在营销中的失策表现为两大类:一是在市场逐渐成熟后,如果企业不能及时构思新的定位,从而使其陷入困境。例如,在冰箱、电视机等已成为国内的成熟技术之时,再有一个厂家去宣传自己是第一个引进外国技术,就会让人笑掉大牙。而海尔、长虹等企业诉求“海尔,中国造”、“长虹,以振兴民族工业为已任”,则收到了极好的效果。二是随着企业不断扩张和进行多元化角逐,而使消费者对产品的印象愈来愈模糊。美国雪佛莱汽车公司就经历过这样的事情。过去,雪佛莱汽车是美国家庭汽车的代名词,但在雪佛莱将生产线扩大到涵盖卡车、跑车等车型后,消费者心中原有的“雪佛莱就是美国家庭房车”的印象焦点反而模糊了,而让福特站上了第一品牌的宝座。在我国,“三九胃泰”曾是著名的胃药生产商,而后,又扩张到啤酒的生产,这无疑是为厂家出了个大难题:饮酒对胃肠道是一个不良刺激,自己生产的产品又是治疗胃病,是酒好还是胃药好。这不正是“矛盾”这一古代寓言的现代翻版吗。然而,这也正是“定位”理论的用武之地。   定位的真谛就是“攻心为上”,消费者的心灵才是营销的终级战场。从广告传播的角度来看定位,它不是要琢磨产品,因为产品已是生出来的孩子,已经定型,不大容易改变,而容易改变的是消费者的“心”。   要抓住消费者的心,必须了解他们的思考模式,这是进行定位的前提。《新定位》一书列出了消费者的五大思考模式,以帮助企业占领消费者心目中的位置。   模式一:消费者只能接收有限的信息。在超载的信息中,消费者会按照个人的经验、喜好、兴趣甚至情绪,选择接受哪些信息,记忆哪些信息。因此,较能引起兴趣的产品种类和品牌,就拥有打入消费者记忆的先天优势。例如,我国的杭州娃哈哈集团,最初是以生产“娃哈哈”儿童营养液而一举成名。它的成功就是由于,产品定位准确,而广告定位更是让人过目不忘,因为它源于一首人人熟知的儿歌,很容易引进儿童与家长的共鸣。   模式二:消费者喜欢简单,讨厌复杂。在各种媒体广告的狂轰滥炸下,消费者最需要简单明了的信息。广告传播信息简化的诀窍,就是不要长篇大论,而是集中力量将一个重点清楚地打入消费者心中,突破人们痛恨复杂的心理屏障。在这一点上最令人称道是我国的一种驱虫药广告,只须服两片,治蛲虫是两片,治钩虫也是两片。人们也许记不住复杂的药品名称,但只需说“两片”,药店的售货员就知道你要的是什么药。反过来,如果厂家在广告中介绍它的产品如何如何先进,效果如何显著,其结果可想而知。   模式三:消费者缺乏安全感。由于缺乏安全感,消费者会买跟别人一样的东西,免除花冤枉钱或被朋友批评的危险。所以,人们在购买商品前(尤其是耐用消费品),都要经过缜密的商品调查。而广告定位传达给消费者简单而又易引进兴趣的信息,正好使自己的品牌易于在消费者中传播。如果一位消费者要买驱虫药,必然先向朋友打听,一说“两片”,既满足了消费者安全感的需要,也无须记一些专业名词。   模式四:消费者对品牌的印象不会轻易改变。虽然一般认为新品牌有新鲜感,较能引人注目,但是消费者真能记到脑子里的信息,还是耳熟能详的东西。比如,对可口可乐公司的员工而言,它是总部设在亚特兰大市的一个“公司”,一个“机构”,而在一般消费者心目中,可口可乐是一种甜美的、深色的、加了碳酸气的饮料,可口可乐是一个著名饮料品牌。如果,可口可乐公司那天心血来潮,去生产热门的香烟或者是啤酒,也许正是可口可乐的可叹可悲之时。   模式五:消费者的想法容易失去焦点。虽然盛行一时的多元化、扩张生产线增加了品牌多元性,但是却使消费者模糊了原有的品牌印象。美国舒洁公司在纸业的定位就是一例。舒洁原本是以生产舒洁卫生纸起家的,后来,它把自己的品牌拓展到舒洁纸面巾、舒洁纸餐巾以及其他纸产品,以至于在数十亿美元的市场中,拥有了最大的市场占有率。然而,正是这些盲目延伸的品牌,使消费者失去了对其注意的焦点,最终让宝洁公司乘虚而入。难怪一位营销专家以美国人幽默方式发问:舒洁餐巾纸,舒洁卫生纸,到底哪个牌子是为鼻子而设计的呢。   所以,企业在定位中一定要掌握好这些原则:消费者接受信息的容量是有限的,广告宣传“简单”就是美,一旦形成的定位很难在短时间内消除,盲目的品牌延伸会摧毁自己在消费者心目中的既有定位。所以,无论是产品定位,还是广告定位一定要慎之又慎。   定位的方法   在广告泛滥、信息爆炸,消费者必然要用尽心力筛选掉大部分垃圾。例如,尽管市场上饮料众多,人们只知道有可口可乐、娃哈哈、乐百氏等几种品牌,并且这些品牌在他们心目中还是有一定顺序的,不用说,可口可乐一定是第一,至于第二、第三就要看厂家的定位策略了。人们总是容易记住第一名,如谁都知道世界第一高峰是珠穆拉玛峰,但极少有人能说出第二大高峰,人们能很快说出体育比赛的冠军,亚军则不易给人留下印象。所以,在具体操作中营销人员要善于找出自己品牌所拥有的令人信服的某种重要属性或利益。通过一定的策略和方法,让自己的品牌给人们留下深刻的印象。这些方法一般有:   强化自己已有的定位。既然现有的产品和服务在消费者心目中都有一定的位置,如果这种定位对企业有利的话,就要反复向人们宣传这种定位,强化本企业的产品在消费者心目的形象,也就是自己的特色,而这种强化必须是实事求是的。如,在我国的冰箱生产厂家中,海尔反复强调自己的“高品质”,新飞则宣传自己是节能冰箱,而美菱把文章做在了“保鲜”上。   比附定位。使定位对象与竞争对象(已占有牢固位置)发生关联,并确立与竞争对象的定位相反的或可比的定位概念。如美国一家处于第二位的出租汽车公司,在广告中反复宣传:我们是第二,所以我们更加努力啊。这样,既强化了自己与第一的关系,又表明了自己处于弱者的位置,更易引起人们“同情弱者”的共鸣。   单一位置策略。处于领导地位者,要以另外的新品牌来压制竞争者。因为每一个品牌都在其潜在顾客心目中安置了独自所占据的一个特定处所。这是作为市场领导者所要采取的策略。既然自己是老大,“卧榻之侧,哪容他人酣睡”,因此,在各种场合宣传自己第一的形象自然就在情理之中。   寻找空隙策略。寻求消费者心目中的空隙,然后加以填补。其中有价格(高低),性别,年龄,一天中的时段,分销渠道,大量使用者的位置等各种空隙。如,万宝路在美国是著名的香烟品牌,而一个叫窈窕牌的香烟品牌,就是以女性抽烟者为突破口挑战万宝路而大获成功。   类别品牌定位。当一个强大的品牌名称成了产品类别名称的代表或代替物时,必须给公司一个真正成功的新产品以一个新的名称,而不能采用“搭便车”的做法,沿袭公司原有产品的名称。这像“跷跷板”原理,当一种上来时,另一种就下去。因为一个名称不能代表两个迥然不同的产品。宝洁公司的多品牌策略就大有可取之处。   再定位。也就是重新定位,意即打破事物(例如产品)在消费者心目中所保持的原有位置与结构,使事物按照新的观念在消费者心目中重新排位,调理关系,以创造一个有利于自己的新的秩序。这意味着必须先把旧的观念或产品搬出消费者的记忆,才能把另一个新的定位装进去。海尔在最初是以宣传自己冰箱的品质优良作为定位,而在产品延伸之后,很快就突出了“中国造”、“向国际营销商授权”等新的定位。   需要指出的是,由于艾尔·列斯与杰克·特罗都是广告人出身,他们的定位理论往往局限于一种广告传播策略,强调让产品占领消费者心目中的空隙。目前,定位理论对营销的影响远远超过了原先把它作为一种传播技巧的范畴,而演变为营销策略的一个基本步骤。这反映在营销大师科特勒对定位下的定义中。他认为,定位是对公司的提供物(原文是offer)和形象的策划行为,目的是使它在目标消费者的心目中占据一个独特的有价值的位置。因此,“营销人员必须从零开始,使产品特色确实符合所选择的目标市场。”科特勒把艾尔·列斯与杰克·特罗的定位理论归结为“对产品的心理定位和再定位”。显然,除此之外,还有对潜在产品的定位。这就给定位理论留下了更为广阔的发展空间。

寒凝雪 2019-12-02 01:17:15 0 浏览量 回答数 0

回答

定位(Positioning),由美国著名营销专家艾·里斯(AlRies)与杰克·特劳特(Jack Trout)于70年代早期提出。   2001年,定位被美国营销学会评为有史以来对美国营销业影响最大的观念。   2007年,美国权威媒体评选“全球十大顶尖商业战略大师”,艾·里斯与彼得·德鲁克、杰克·韦尔奇等并列其中。   2009年,美国《财富》杂志(Fortune,2009年2月刊)推出“历史上百本最佳商业经典著作”前十位介绍,由艾·里斯与杰克·特劳特合著的《定位》名列首位。   当时,他们在美国《广告时代》发表了名为《定位时代》系列文章。只后,他们将这些观点和理论集中反映在他们合作的第一本著作《广告攻心战略》一书中。正如他们所言,这是一本关于传播沟通的教科书。   1996年,杰克·特劳特整理了25年来的工作经验,写出了《新定位》一书。也许是更加符合了时代的要求,但其核心思想却仍然源自于他们于1972年提出的定位论。定位理论的产生,源于人类各种信息传播渠道的拥挤和阻塞,可以归结为信息爆炸时代对商业运作的影响结果。科技进步和经济社会的发展,几乎把消费者推到了无所适从的境地。首先是媒体的爆炸:广播、电视、互联网,录音带、录像带、光盘使消费者目不暇接。其次是产品的爆炸:仅电视就有大屏幕的、小屏幕的,平面直角的、超平的、纯平的,从耐用消费品到日用品,都给人以眼花缭乱的感觉。再就是广告的爆炸:电视广告、广播广告、报刊广告、街头广告、楼门广告、电梯广告,真可谓无孔不入。因此,定位就显得非常必要。   定位是对产品在未来的潜在顾客的脑海里确定一个合理的位置。定位的基本原则不是去创造某种新奇的或与众不同的东西,而是去操纵人们心中原本的想法,去打开联想之结。定位的真谛就是“攻心为上”,消费者的心灵才是营销的终级战场。消费者有五大思考模式:消费者只能接收有限的信息、消费者喜欢简单,讨厌复杂、消费者缺乏安全感、消费者对品牌的印象不会轻易改变、消费者的想法容易失去焦点。掌握这些特点有利于以帮助企业占领消费者心目中的位置。而定位的方法有多种,如强化自己已有的定位、比附定位、单一位置策略、寻找空隙策略、类别品牌定位、再定位等。   按照艾·里斯与杰克·特劳特的观点:定位,是从产品开始,可以是一件商品,一项服务,一家公司,一个机构,甚至于是一个人,也可能是你自己。定位并不是要你对产品做什么事情,定位是你对产品在未来的潜在顾客的脑海里确定一个合理的位置,也就是把产品定位在你未来潜在顾客的心目中。定位可以看成是对现有产品的一种创造性试验。“改变的是名称、价格及包装,实际上对产品则完全没有改变,所有的改变,基本上是在作着修饰而已,其目的是在潜在顾客心中得到有利的地位”。   所谓定位,就是令你的企业和产品与众不同,形成核心竞争力;对受众而言,即鲜明地建立品牌。   ——杰克·特劳特   所谓定位,就是让品牌在消费者的心智中占据最有利的位置,使品牌成为某个类别或某种特性的代表品牌。这样当消费者产生相关需求时,便会将定位品牌作为首选,也就是说这个品牌占据了这个定位。   —— 特劳特(中国)品牌战略咨询有限公司总裁 邓德隆 编辑本段定位的前提   按照艾·里斯与杰克·特劳特的理论,我们目前已成为一个传播过多的社会,而消费者只能接受有限的信息,消费者抵御这种“信息爆炸”的最有力武器就是最小努力法则--痛恨复杂,喜欢简单。现有产品在顾客心目中都有一定的位置,例如,人们认为可口可乐是世界上最大饮料生产商,格兰仕是中国最大的微波炉生产商,北京同仁医院是中国最著名的眼科医院等,这些产品和服务的提供者在与消费者长期的交易中所拥有的地位,是其他人很难取代的。也就是说,消费者对品牌的印象不会轻易改变。定位的基本原则不是去创造某种新奇的或与众不同的东西,而是去操纵人们心中原本的想法,去打开联想之结,目的是要在顾客心目中,占据有利的地位。唯其如此,方能在市场上赢得有利的竞争地位。   一般说来,企业在营销中的失策表现为两大类:   一是在市场逐渐成熟后,如果企业不能及时构思新的定位,从而使其陷入困境。例如,在冰箱、电视机等已成为国内的成熟技术之时,再有一个厂家去宣传自己是第一个引进外国技术,就会让人笑掉大牙。而海尔、长虹等企业诉求“海尔,中国造”、“长虹,以振兴民族工业为已任”,则收到了极好的效果。   二是随着企业不断扩张和进行多元化角逐,而使消费者对产品的印象愈来愈模糊。美国雪佛莱汽车公司就经历过这样的事情。过去,雪佛莱汽车是美国家庭汽车的代名词,但在雪佛莱将生产线扩大到涵盖卡车、跑车等车型后,消费者心中原有的“雪佛莱就是美国家庭房车”的印象焦点反而模糊了,而让福特站上了第一品牌的宝座。在我国,“三九胃泰”曾是著名的胃药生产商,而后,又扩张到啤酒的生产,这无疑是为厂家出了个大难题:饮酒对胃肠道是一个不良刺激,自己生产的产品又是治疗胃病,是酒好还是胃药好。这不正是“矛盾”这一古代寓言的现代翻版吗。然而,这也正是“定位”理论的用武之地。   定位的真谛就是“攻心为上”,消费者的心灵才是营销的终级战场。从广告传播的角度来看定位,它不是要琢磨产品,因为产品已是生出来的孩子,已经定型,不大容易改变,而容易改变的是消费者的“心”。 编辑本段消费者五大思考模式   要抓住消费者的心,必须了解他们的思考模式,这是进行定位的前提。《新定位》一书列出了消费者的五大思考模式,以帮助企业占领消费者心目中的位置。 模式一:消费者只能接收有限的信息。   在超载的信息中,消费者会按照个人的经验、喜好、兴趣甚至情绪,选择接受哪些信息,记忆哪些信息。因此,较能引起兴趣的产品种类和品牌,就拥有打入消费者记忆的先天优势。例如,我国的杭州娃哈哈集团,最初是以生产“娃哈哈”儿童营养液而一举成名。它的成功就是由于,产品定位准确,而广告定位更是让人过目不忘,因为它源于一首人人熟知的儿歌,很容易引进儿童与家长的共鸣。 模式二:消费者喜欢简单,讨厌复杂。   在各种媒体广告的狂轰滥炸下,消费者最需要简单明了的信息。广告传播信息简化的诀窍,就是不要长篇大论,而是集中力量将一个重点清楚地打入消费者心中,突破人们痛恨复杂的心理屏障。在这一点上最令人称道是我国的一种驱虫药广告,只须服两片,治蛲虫是两片,治钩虫也是两片。人们也许记不住复杂的药品名称,但只需说“两片”,药店的售货员就知道你要的是什么药。反过来,如果厂家在广告中介绍它的产品如何如何先进,效果如何显著,其结果可想而知。 模式三:消费者缺乏安全感。   由于缺乏安全感,消费者会买跟别人一样的东西,免除花冤枉钱或被朋友批评的危险。所以,人们在购买商品前(尤其是耐用消费品),都要经过缜密的商品调查。而广告定位传达给消费者简单而又易引进兴趣的信息,正好使自己的品牌易于在消费者中传播。如果一位消费者要买驱虫药,必然先向朋友打听,一说“两片”,既满足了消费者安全感的需要,也无须记一些专业名词。   模式四: 消费者对品牌的印象不会轻易改变 。 虽然一般认为新品牌有新鲜感,较能引人注目,但是消费者真能记到脑子里的信息,还是耳熟能详的东西。比如,对可口可乐公司的员工而言,它是总部设在亚特兰大市的一个“公司”,一个“机构”,而在一般消费者心目中,可口可乐是一种甜美的、深色的、加了碳酸气的饮料,可口可乐是一个著名饮料品牌。如果,可口可乐公司哪天心血来潮,去生产热门的香烟或者是啤酒,也许正是可口可乐的可叹可悲之时。 模式五:消费者的想法容易失去焦点。   虽然盛行一时的多元化、扩张生产线增加了品牌多元性,但是却使消费者模糊了原有的品牌印象。美国舒洁公司在纸业的定位就是一例。舒洁原本是以生产舒洁卫生纸起家的,后来,它把自己的品牌拓展到舒洁纸面巾、舒洁纸餐巾以及其他纸产品,以至于在数十亿美元的市场中,拥有了最大的市场占有率。然而,正是这些盲目延伸的品牌,使消费者失去了对其注意的焦点,最终让宝洁公司乘虚而入。难怪一位营销专家以美国人幽默方式发问:舒洁餐巾纸,舒洁卫生纸,到底哪个牌子是为鼻子而设计的呢。   所以,企业在定位中一定要掌握好这些原则:消费者接受信息的容量是有限的,广告宣传“简单”就是美,一旦形成的定位很难在短时间内消除,盲目的品牌延伸会摧毁自己在消费者心目中的既有定位。所以,无论是产品定位,还是广告定位一定要慎之又慎。 编辑本段定位方法   在广告泛滥、信息爆炸,消费者必然要用尽心力筛选掉大部分垃圾。例如,尽管市场上饮料众多,人们只知道有可口可乐、娃哈哈、乐百氏等几种品牌,并且这些品牌在他们心目中还是有一定顺序的,不用说,可口可乐一定是第一,至于第二、第三就要看厂家的定位策略了。   人们总是容易记住第一名,如谁都知道世界第一高峰是珠穆拉玛峰,但极少有人能说出第二大高峰,人们能很快说出体育比赛的冠军,亚军则不易给人留下印象。所以,在具体操作中营销人员要善于找出自己品牌所拥有的令人信服的某种重要属性或利益。通过一定的策略和方法,让自己的品牌给人们留下深刻的印象。这些方法一般有: 强化自己已有的定位   既然现有的产品和服务在消费者心目中都有一定的位置,如果这种定位对企业有利的话,就要反复向人们宣传这种定位,强化本企业的产品在消费者心目的形象,也就是自己的特色,而这种强化必须是实事求是的。如,在我国的冰箱生产厂家中,海尔反复强调自己的“高品质”,新飞则宣传自己是节能冰箱,而美菱把文章做在了“保鲜”上。 比附定位   使定位对象与竞争对象(已占有牢固位置)发生关联,并确立与竞争对象的定位相反的或可比的定位概念。如美国一家处于第二位的出租汽车公司,在广告中反复宣传:我们是第二,所以我们更加努力啊。这样,既强化了自己与第一的关系,又表明了自己处于弱者的位置,更易引起人们“同情弱者”的共鸣。 第一定位   处于领导地位者,要以另外的新品牌来压制竞争者。因为每一个品牌都在其潜在顾客心目中安置了独自所占据的一个特定处所。这是作为市场领导者所要采取的策略。既然自己是老大,“卧榻之侧,岂容他人酣睡”,因此,在各种场合宣传自己第一的形象自然就在情理之中。 市场空白   寻求消费者心目中的空隙,然后加以填补。其中有价格(高低),性别,年龄,一天中的时段,分销渠道,大量使用者的位置等各种空隙。如,万宝路在美国是著名的香烟品牌,而一个叫窈窕牌的香烟品牌,就是以女性抽烟者为突破口挑战万宝路而大获成功。 品类   当一个强大的品牌名称成了产品类别名称的代表或代替物时,必须给公司一个真正成功的新产品以一个新的名称,而不能采用“搭便车”的做法,沿袭公司原有产品的名称。这像“跷跷板”原理,当一种上来时,另一种就下去。因为一个名称不能代表两个迥然不同的产品。宝洁公司的多品牌策略就大有可取之处。 再定位   也就是重新定位,意即打破事物(例如产品)在消费者心目中所保持的原有位置与结构,使事物按照新的观念在消费者心目中重新排位,调理关系,以创造一个有利于自己的新的秩序。这意味着必须先把旧的观念或产品搬出消费者的记忆,才能把另一个新的定位装进去。海尔在最初是以宣传自己冰箱的品质优良作为定位,而在产品延伸之后,很快就突出了“中国造”、“向国际营销商授权”等新的定位。   需要指出的是,由于艾·里斯与杰克·特劳特都是广告人出身,他们的定位理论往往局限于一种广告传播策略,强调让产品占领消费者心目中的空隙。目前,定位理论对营销的影响远远超过了原先把它作为一种传播技巧的范畴,而演变为营销策略的一个基本步骤。这反映在营销大师科特勒对定位下的定义中。他认为,定位是对公司的提供物(原文是offer)和形象的策划行为,目的是使它在目标消费者的心目中占据一个独特的有价值的位置。因此,“营销人员必须从零开始,使产品特色确实符合所选择的目标市场。”科特勒把艾尔·列斯与杰克·特罗的定位理论归结为“对产品的心理定位和再定位”。显然,除此之外,还有对潜在产品的定位。这就给定位理论留下了更为广阔的发展空间。 编辑本段定位理论在中国的发展   定位的一个中心、两个基本点   定位理论传入中国后,定位理论和中国实践相结合,取得中部定位第一人、著名品牌定位专家鲁建华首次提出:定位理论的核心是一个中心、两个基本点,以打造品牌为中心,以竞争导向和进入顾客心智为基本点。 以打造品牌为中心    从根本的角度思考,营销的过程就是创造顾客、打造品牌的过程,营销就是打造品牌;从更广义的角度讲,创建伟大企业的过程其实就是创造顾客、打造品牌的过程,做企业就是做品牌,企业运营的本质就是打造品牌。   定位理论所有的概念、观点、体系都服务于打造品牌这个目的,是围绕打造品牌而展开的。离开打造品牌这个中心,谈论定位理论,必然会误入歧途,不得要领。 以竞争导向为基本点   顾客重要还是竞争重要。传统的营销理论认为,顾客更重要,没有顾客就不会有竞争,营销就是满足顾客的需要和需求。“顾客是上帝”观念至高无上,广为流传。至今顾客导向的观念仍然深入人心。   从纯理论的角度讲,顾客确实比竞争重要;但从实战的角度看,解决竞争才是最重要的。从满足、服务顾客的角度看营销,营销必然走向趋同,没有差异,最终只有沦落到打价格战的深渊;而从竞争角度看营销,营销就会有活力,营销必然走向创造顾客、创造需求的新境界,不断引领企业开创新的未来。   竞争导向要求营销者首先考虑的问题是如何让自己的品牌与竞争品牌区分开来,实现差异化,把生意从竞争对手那里转换过来。这是定位思考的起点。   营销就是战争,商场就是战场。定位就是在与竞争对手正式开战之前进入和占据一个最有利的位置。定位是建立在竞争之上,随着竞争的发展而发展的。   竞争导向的观念是定位理论的第一个基本点。 以进入顾客心智为基本点   营销中没有事实,只有认知。   这是商业中最隐秘、最基本的真理,三个方面的原因导致了这一点:   一是从事实到认知有一个过程,你不能跨越这个过程。这个过程就是事实要经过大脑的过滤、解读,最终体现事实的认知。   二是人们已经形成既有的认知和观念,他们认为自己的这些既有认知、观念就是事实。而这些既有的认知、观念会影响人们对新事物的认知。这表现在两个方面:其一,心智中既有的认知、观念会让人们有选择地接收信息,你“看到”、“听到”、“尝到”的事物往往是你“希望看到”、“希望听到”、“希望尝到”的事物;其二,心智中既有的认知、观念有时会误导你,比如在一个装满自来水的瓶子上贴上某纯净水品牌的商标,你对这个品牌既有的认知(纯净水)会影响到你对事实(自来水)的判断。   三是顾客的认知逻辑与企业的认知逻辑往往相反。虽然他们都认为质量更好的产品一定会胜出,企业判断质量的标准是产品的技术指标、最好的检测仪器(他们很自然地认为自己的产品质量更好),而顾客判断质量的标准是哪一种产品得到更多顾客青睐哪一种产品的质量就更好,顾客没有能力也没有精力去理会那些所谓的技术指标。这就是心智认知规律所揭示的事实。   其实所有的广告都是要影响你的认知,如果没有影响你,广告就是失败的;影响了你,那它就是成功的。离开认知,就没有办法谈营销。   营销之战不是事实之战,不是产品之战,不是市场之战,而是认知之战。商战的地点不是事实,不是产品,不是市场,而是心智。   商战的目的其实就是设法进入心智认知并占据一席之地。定位就是选择、占据心智认知上最有利的位置,通过商战实现这一目的。商战在顾客的心智中进行,心智是你获胜的地方,也是你落败的地方,心智决定成败。商战中没有事实,只有认知,认知即事实,认知决定成败。   坚持占据顾客心智是定位理论的第二个基本点。 辩证关系   心智是竞争的内容,竞争是进入心智的手段。竞争在心智中展开,心智是竞争的战场。心智为竞争开辟了全新的内容、提供了一个差异化的竞争角度,竞争是进入、占据心智的必由之路。心智认知规律决定竞争规律,竞争发现和提升了心智认知的价值和作用。竞争导向与占据心智这两个基本点有机结合,相互运动,共同服务于打造品牌。这就是定位理论的核心─一个中心、两个基本点的辩证关系。

青衫无名 2019-12-02 01:17:12 0 浏览量 回答数 0

问题

微服务开发的 10 个最佳实践

游客pklijor6gytpx 2020-01-03 14:59:12 147 浏览量 回答数 1

回答

tl; dr:您可能应该使用一维方法。 注意:在不填充书本的情况下比较动态1d或动态2d存储模式时,无法深入研究影响性能的细节,因为代码的性能取决于很多参数。如有可能,进行配置文件。 1.什么更快? 对于密集矩阵,一维方法可能更快,因为它提供了更好的内存局部性以及更少的分配和释放开销。 2.较小的是? 与2D方法相比,Dynamic-1D消耗的内存更少。后者还需要更多分配。 备注 我出于以下几个原因给出了一个很长的答案,但我想首先对您的假设做一些评论。 我可以想象,重新计算1D数组(y + x * n)的索引可能比使用2D数组(x,y)慢 让我们比较这两个函数: int get_2d (int **p, int r, int c) { return p[r][c]; } int get_1d (int *p, int r, int c) { return p[c + C*r]; } Visual Studio 2015 RC为这些功能(启用了优化功能)生成的(非内联)程序集是: ?get_1d@@YAHPAHII@Z PROC push ebp mov ebp, esp mov eax, DWORD PTR _c$[ebp] lea eax, DWORD PTR [eax+edx*4] mov eax, DWORD PTR [ecx+eax*4] pop ebp ret 0 ?get_2d@@YAHPAPAHII@Z PROC push ebp mov ebp, esp mov ecx, DWORD PTR [ecx+edx*4] mov eax, DWORD PTR _c$[ebp] mov eax, DWORD PTR [ecx+eax*4] pop ebp ret 0 区别是mov(2d)与lea(1d)。前者的延迟为3个周期,最大吞吐量为每个周期2个,而后者的延迟为2个周期,最大吞吐量为每个周期3个。(根据指令表-Agner Fog, 由于差异很小,我认为索引重新计算不会产生很大的性能差异。我希望几乎不可能将这种差异本身确定为任何程序的瓶颈。 这将我们带到下一个(也是更有趣的)点: ...但是我可以想象一维可能在CPU缓存中... 是的,但是2d也可能在CPU缓存中。有关为什么1d仍然更好的说明,请参见缺点:内存局部性。 长答案,或者为什么对于简单 /小的矩阵,动态二维数据存储(指针到指针或向量矢量)是“不好的” 。 注意:这是关于动态数组/分配方案[malloc / new / vector等]。静态2D数组是一个连续的内存块,因此不受我将在此处介绍的不利影响。 问题 为了能够理解为什么动态数组的动态数组或向量的矢量最有可能不是选择的数据存储模式,您需要了解此类结构的内存布局。 使用指针语法的示例案例 int main (void) { // allocate memory for 4x4 integers; quick & dirty int ** p = new int*[4]; for (size_t i=0; i<4; ++i) p[i] = new int[4]; // do some stuff here, using p[x][y] // deallocate memory for (size_t i=0; i<4; ++i) delete[] p[i]; delete[] p; } 缺点 内存位置 对于此“矩阵”,您分配一个包含四个指针的块和四个包含四个整数的块。所有分配都不相关,因此可以导致任意存储位置。 下图将使您了解内存的外观。 对于真正的二维情况: 紫色正方形是其p自身占据的存储位置。 绿色方块将存储区域p点组装为(4 x int*)。 4个连续的蓝色方块的4个区域是每个int*绿色区域所指向的区域 对于在1d情况下映射的2d: 绿色方块是唯一需要的指针 int * 蓝色方块组合了所有矩阵元素的存储区域(16 x int)。 实际2D与映射2D内存布局 这意味着(例如,使用左侧布局时)(例如,使用缓存),与连续存储模式(如右侧所示)相比,您可能会发现性能较差。 假设高速缓存行是“一次传输到高速缓存中的数据量”,并想象一个程序一个接一个地访问整个矩阵。 如果您具有正确对齐的32位值的4 4矩阵,则具有64字节高速缓存行(典型值)的处理器能够“一次性”读取数据(4 * 4 * 4 = 64字节)。如果您开始处理而缓存中还没有数据,则将面临缓存未命中,并且将从主内存中获取数据。由于且仅当连续存储(并正确对齐)时,此负载才能装入整个缓存行,因此可以立即读取整个矩阵。处理该数据时可能不会再有任何遗漏。 在动态的“真实二维”系统中,每行/列的位置都不相关,处理器需要分别加载每个内存位置。即使只需要64个字节,在最坏的情况下,为4个不相关的内存位置加载4条高速缓存行实际上会传输256个字节并浪费75%的吞吐量带宽。如果使用2d方案处理数据,您将再次在第一个元素上遇到缓存未命中(如果尚未缓存)。但是现在,从主内存中第一次加载后,只有第一行/列会在缓存中,因为所有其他行都位于内存中的其他位置,并且不与第一行/列相邻。一旦到达新的行/列,就会再次出现高速缓存未命中,并从主内存执行下一次加载。 长话短说:2d模式具有较高的缓存未命中率,而1d方案由于数据的局部性而具有更好的性能潜力。 频繁分配/取消分配 N + 1创建所需的NxM(4×4)矩阵需要多达(4 + 1 = 5)个分配(使用new,malloc,allocator :: allocate或其他方法)。 也必须应用相同数量的适当的各自的重新分配操作。 因此,与单个分配方案相比,创建/复制此类矩阵的成本更高。 随着行数的增加,情况变得更加糟糕。 内存消耗开销 我假设int的大小为32位,指针的大小为32位。(注意:系统依赖性。) 让我们记住:我们要存储一个4×4 int矩阵,表示64个字节。 对于NxM矩阵,使用提出的指针对指针方案存储,我们消耗了 NMsizeof(int) [实际的蓝色数据] + Nsizeof(int) [绿色指针] + sizeof(int**) [紫罗兰色变量p]字节。 444 + 44 + 4 = 84在本示例的情况下,这会使字节变多,使用时甚至会变得更糟std::vector<std::vector >。对于4 x 4 int ,它将需要N * M * sizeof(int)+ N * sizeof(vector )+ sizeof(vector<vector >)字节,即4 44 + 416 + 16 = 144总共字节,共64个字节。 另外-根据所使用的分配器-每个单独的分配可能(并且很可能会)还有16个字节的内存开销。(一些“信息字节”用于存储已分配的字节数,以进行适当的重新分配。) 这意味着最坏的情况是: N*(16+Msizeof(int)) + 16+Nsizeof(int*) + sizeof(int**) = 4*(16+44) + 16+44 + 4 = 164 bytes ! Overhead: 156% 开销的份额将随着矩阵大小的增加而减少,但仍然存在。 内存泄漏的风险 一堆分配需要适当的异常处理,以避免在其中一个分配失败的情况下发生内存泄漏!您需要跟踪分配的内存块,并且在释放内存时一定不要忘记它们。 如果new无法运行内存并且无法分配下一行(特别是在矩阵很大时),std::bad_alloc则抛出a new。 例: 在上面提到的new / delete示例中,如果要避免发生bad_alloc异常时的泄漏,我们将面临更多代码。 // allocate memory for 4x4 integers; quick & dirty size_t const N = 4; // we don't need try for this allocation // if it fails there is no leak int ** p = new int*[N]; size_t allocs(0U); try { // try block doing further allocations for (size_t i=0; i<N; ++i) { p[i] = new int[4]; // allocate ++allocs; // advance counter if no exception occured } } catch (std::bad_alloc & be) { // if an exception occurs we need to free out memory for (size_t i=0; i<allocs; ++i) delete[] p[i]; // free all alloced p[i]s delete[] p; // free p throw; // rethrow bad_alloc } /* do some stuff here, using p[x][y] */ // deallocate memory accoding to the number of allocations for (size_t i=0; i<allocs; ++i) delete[] p[i]; delete[] p; 摘要 在某些情况下,“真实的2d”内存布局适合并且有意义(即,如果每行的列数不是恒定的),但是在最简单和常见的2D数据存储情况下,它们只会使代码的复杂性膨胀,并降低性能和程序的内存效率。 另类 您应该使用连续的内存块,并将行映射到该内存块。 做到这一点的“ C ++方式”可能是编写一个类来管理您的内存,同时考虑诸如 什么是三法则? 资源获取是什么意思初始化(RAII)? C ++概念:容器(在cppreference.com上) 例 为了提供这样一个类的外观的想法,下面是一个具有一些基本功能的简单示例: 二维尺寸可构造 2d可调整大小 operator(size_t, size_t) 用于2行主要元素访问 at(size_t, size_t) 用于检查的第二行主要元素访问 满足容器的概念要求 资源: #include #include #include #include namespace matrices { template class simple { public: // misc types using data_type = std::vector ; using value_type = typename std::vector ::value_type; using size_type = typename std::vector ::size_type; // ref using reference = typename std::vector ::reference; using const_reference = typename std::vector ::const_reference; // iter using iterator = typename std::vector ::iterator; using const_iterator = typename std::vector ::const_iterator; // reverse iter using reverse_iterator = typename std::vector ::reverse_iterator; using const_reverse_iterator = typename std::vector ::const_reverse_iterator; // empty construction simple() = default; // default-insert rows*cols values simple(size_type rows, size_type cols) : m_rows(rows), m_cols(cols), m_data(rows*cols) {} // copy initialized matrix rows*cols simple(size_type rows, size_type cols, const_reference val) : m_rows(rows), m_cols(cols), m_data(rows*cols, val) {} // 1d-iterators iterator begin() { return m_data.begin(); } iterator end() { return m_data.end(); } const_iterator begin() const { return m_data.begin(); } const_iterator end() const { return m_data.end(); } const_iterator cbegin() const { return m_data.cbegin(); } const_iterator cend() const { return m_data.cend(); } reverse_iterator rbegin() { return m_data.rbegin(); } reverse_iterator rend() { return m_data.rend(); } const_reverse_iterator rbegin() const { return m_data.rbegin(); } const_reverse_iterator rend() const { return m_data.rend(); } const_reverse_iterator crbegin() const { return m_data.crbegin(); } const_reverse_iterator crend() const { return m_data.crend(); } // element access (row major indexation) reference operator() (size_type const row, size_type const column) { return m_data[m_cols*row + column]; } const_reference operator() (size_type const row, size_type const column) const { return m_data[m_cols*row + column]; } reference at() (size_type const row, size_type const column) { return m_data.at(m_cols*row + column); } const_reference at() (size_type const row, size_type const column) const { return m_data.at(m_cols*row + column); } // resizing void resize(size_type new_rows, size_type new_cols) { // new matrix new_rows times new_cols simple tmp(new_rows, new_cols); // select smaller row and col size auto mc = std::min(m_cols, new_cols); auto mr = std::min(m_rows, new_rows); for (size_type i(0U); i < mr; ++i) { // iterators to begin of rows auto row = begin() + i*m_cols; auto tmp_row = tmp.begin() + i*new_cols; // move mc elements to tmp std::move(row, row + mc, tmp_row); } // move assignment to this *this = std::move(tmp); } // size and capacity size_type size() const { return m_data.size(); } size_type max_size() const { return m_data.max_size(); } bool empty() const { return m_data.empty(); } // dimensionality size_type rows() const { return m_rows; } size_type cols() const { return m_cols; } // data swapping void swap(simple &rhs) { using std::swap; m_data.swap(rhs.m_data); swap(m_rows, rhs.m_rows); swap(m_cols, rhs.m_cols); } private: // content size_type m_rows{ 0u }; size_type m_cols{ 0u }; data_type m_data{}; }; template void swap(simple & lhs, simple & rhs) { lhs.swap(rhs); } template bool operator== (simple const &a, simple const &b) { if (a.rows() != b.rows() || a.cols() != b.cols()) { return false; } return std::equal(a.begin(), a.end(), b.begin(), b.end()); } template bool operator!= (simple const &a, simple const &b) { return !(a == b); } } 请注意以下几点: T需要满足使用的std::vector成员函数的要求 operator() 不执行任何“范围”检查 无需自己管理数据 不需要析构函数,复制构造函数或赋值运算符 因此,您不必费心为每个应用程序进行适当的内存处理,而只需为编写的类一次即可。 限制条件 在某些情况下,动态“真实”二维结构是有利的。例如,如果 矩阵非常大且稀疏(如果甚至不需要分配任何行,但可以使用nullptr对其进行处理),或者 这些行没有相同数量的列(也就是说,如果您根本没有矩阵,而只有另一个二维结构)。

保持可爱mmm 2020-02-09 13:47:55 0 浏览量 回答数 0

回答

首先“缓存”Cache这个东西是干什么的,我们应该先有些基本的了解。要是不太明白的可以看看网上的解释:http://baike.baidu.com/view/907.htm 简单讲,阿里云OCS提供的功能就是提供对热点数据的高速访问。在使用OCS之前(或者在使用任何一种缓存服务之前),我们都应该明白关于缓存的这么几点: 缓存里的数据不是持久化保存的,也就是说它像是电脑里的内存,而不像硬盘;我们不能指望OCS里的数据一直保存不丢失。如果你真的需要存储持久化的数据,也许你应该出门左转找阿里云OSS(开发存储服务); 缓存里存的应该是“热点”数据。遵循常常出现的“20-80法则”,通常程序应用中都有一定比例的数据常常被请求访问,这就是所谓的热点数据,OCS正是为这种数据设计存在的。假定我们的程序中有100个数据,每次访问这些数据的概率完全是均匀分布的1/100,那么使用缓存的效果就不会太好,因为这其中不存在热点数据。 数据逐出。我们可以决定哪些数据是热点数据被放到缓存当中,但是如果我们的缓存容量不够大,这些热点数据中某些最近较少被用到的数据还是会被“挤出去”,这种行为叫做数据逐出。如果想减少出现这种情况,我们可以购买更高容量的OCS。 -------------------------         在开始使用之前,关于阿里云OCS,我们还需要知道以下这些事: 阿里云OCS仅支持阿里云内网访问,不支持公网访问。也就是说,我们用办公室或者家里的电脑(都属于公网)是无法连上阿里云OCS的。为什么会这样呢?因为缓存服务的根本目标是要提供低延迟的高速访问,而从公网电脑来连接OCS服务器的场景下,公网的网络环境是不可控的,可能出现延迟很高甚至断连接的情况,这使得缓存服务无法保证“高速、低延迟”的基本特性,所以阿里云OCS是不支持公网直接访问的。如果觉得高延迟的情况对于我们的应用也能接受,那么我们应该去选择阿里云其他的产品(比如OSS开放存储服务),而不应该选择OCS缓存服务。 阿里云OCS需要与ECS(阿里云服务器)配合使用,而且只能与本地区节点的ECS连通。这一点与上一条相关。OCS只能从阿里云内网访问,也就是说我们只能从阿里云ECS上才能访问并使用OCS服务。所以我们在官网购买OCS的时候,会看到提示信息说需要至少有一台ECS才能买OCS。另外,阿里云ECS是分地区节点的,比如北京、杭州、青岛等,我们在购买OCS缓存的时候也要选相应的地区节点。北京的ECS只能访问北京的OCS,而不能访问杭州或青岛的OCS。 阿里云OCS是按购买量收费的,而不是按使用量收费。这点需要提醒新同学们注意,在我们购买了OCS缓存之后,计费就已经开始了,即使我们还没有真正使用缓存。也就是说,我们买了1G的OCS缓存后,即使目前使用量为0,系统也会按照1G的标准来计费。所以我们在购买OCS的时候,要选取适合我们业务数据需要的缓存档位。当然了,阿里云OCS也提供在线升降缓存容量的功能。也就是说,如果我们在使用了一段时间之后,发现购买的OCS缓存不够用了(或者缓存使用量太低),我们可以在线的对已有的OCS实例进行升档(或者降档),而OCS缓存服务不会被中断。 阿里云OCS对于存贮的对象大小是有限制的。缓存通常对其内部存储的数据尺寸是有限制的,阿里云OCS也一样。目前OCS支持存储的数据对象的上限是1,000,000Byte。如果要存的值超过这个限制,我们应该考虑把数据压缩,或从逻辑上分成不同键存储的几个值。 ------------------------- 现在我们开始在阿里云官网上购买OCS实例  http://buy.aliyun.com/ocs  首先我们需要已经有了一台阿里云ECS,否则我们无法在这个页面成功购买OCS。购买的第一步,我们先要确定选择买哪个地区的OCS;这个很重要,如上面所说,如果我们的ECS是属于北京,而我们在这里购买了杭州的OCS,那么这两者是无法配合协同工作的。所以,在购买OCS的时候一定要选择应用服务器ECS所在地区的OCS。下一步是要选择OCS缓存容量。我们要购买多大的缓存,这个取决于我们对自身业务应用中热点数据总量大小的判断。如果一时难以准确判断数据量,也不用担心:我们可以先买一个大致容量的OCS(比如1GB),随后在使用过程中,通过OCS控制台提供的监控功能,我们可以了解到目前OCS缓存的使用量等数据,然后可以自主的调整所需的缓存量,购买更大的缓存(比如升到5GB)或者减少已购的缓存量(比如降到512MB),阿里云会根据我们选择的新配置来调整对应的收费。此外在选择缓存容量的时候,要知道不同容量的缓存档位对应着不同的性能配额,具体来说包括两个指标:吞吐量带宽与每秒请求处理数(QPS)。比如以现在的配额标准,1GB的OCS缓存对应5MB/sec的吞吐量带宽和3000次/sec的请求处理峰值。当我们使用OCS的时候,如果数据量传输的带宽超过了5MB/s, 或者每秒的请求数超过了3000次,都会触发性能配额控制机制,导致某些请求无法返回正常结果。在确定了地区和缓存容量之后,我们就可以直接下单购买OCS了。 ------------------------- 在成功购买OCS之后,我们的联系邮箱和手机都会收到OCS创建成功的通知,里面会包括OCS的实例ID和初始密码(关于密码的用处后面会讲到)。我们现在登录OCS控制台, http://ocs.console.aliyun.com/ 就可以看到已经购买到的OCS实例列表。在列表页面上对应OCS实例的后面点击“管理”,就可以进入该OCS实例的详情页,看到更多的详细信息。 ------------------------- 我们现在已经有了一个OCS缓存实例,现在是时候试玩OCS了。要使用OCS就要写一点程序代码,不过不用担心,我们在这里采用“Happy-Path”的方法,从最简单的操作开始,让新上手的菜鸟们能马上就有一个能调用OCS缓存服务的程序。OCS提供缓存服务,它并不要求我们的程序是哪种语言来写的。我们这里先以Java程序为例,写一个最简单的“Hello World”。(其他编程语言的例子,我们随后附上。)第一步,登录你的阿里云ECS服务器,在上面安装Java JDK和你常用的IDE(比如Eclipse)。一定要记得我们之前说过的,只有在阿里云内网的ECS服务器上,才能访问我们的OCS实例。所以,用家里或是公司的电脑执行下面的代码示例是看不到结果的。 Java JDK和Eclipse都很容易从网上找到下载,比如 http://download.eclipse.org/ 或者 http://www.onlinedown.net/soft/32289.htm 第二步,在把Java开发环境准备好了之后,下载第一个代码示例(Sample-Code-1第三步,在Eclipse里面打开刚下载的OcsSample1.java,我们要根据自己的OCS实例信息修改几个地方。        我们每个人买到的OCS实例的ID都是不重复的,其对应的阿里云内网地址也是独一无二的,这些信息都在OCS控制台上显示出来。我们在同自己的OCS实例建立连接的时候,需要根据这些信息修改OcsSample1.java中的对应地方。         public static void main(String[] args) {                                        final String host = "b2fd2f89f49f11e3.m.cnqdalicm9pub001.ocs.aliyuncs.com"; //控制台上的“内网地址”                   final String port ="11211";       //默认端口 11211,不用改                   final String username = "b2fd2f89f49f11e3"; //控制台上的“访问账号”                   final String password = "my_password"; //邮件或短信中提供的“密码”                   …… …… ……       信息修改完毕,我们可以运行自己的程序了。运行main函数,我们会在Eclipse下面的console窗口看到下面这样的结果(请忽略可能出现的红色INFO调试信息): OCS Sample CodeSet操作完成!Get操作: Open Cache Service,  from www.Aliyun.com     OK,搞定!我们已经成功的连接上了阿里云的OCS并且调用缓存服务成功,就这么简单。-------------------------我们已经成功运行了第一个调用阿里云OCS缓存服务的Sample程序OcsSample1.java,现在我们看看这个程序里都做了什么。                                  …… …… ……                            System.out.println("OCS Sample Code");                                                        //向OCS中存一个key为"ocs"的数据,便于后面验证读取数据,                             //这个数据对应的value是字符串 Open Cache Service,  from www.Aliyun.com                            OperationFuture future = cache.set("ocs", 1000," Open Cache Service,  from www.Aliyun.com");                            //向OCS中存若干个数据,随后可以在OCS控制台监控上看到统计信息                            for(int i=0;i<100;i++){                                String key="key-"+i;                                String value="value-"+i;                                 //执行set操作,向缓存中存数据                                cache.set(key, 1000, value);                            }                             System.out.println("Set操作完成!");                             future.get();  //  确保之前(cache.set())操作已经结束                         //执行get操作,从缓存中读数据,读取key为"ocs"的数据                            System.out.println("Get操作:"+cache.get("ocs"));                            …… …… …… 从这些代码中可以看出: 1. 我们在建立与OCS缓存服务器的连接后,先是向缓存中存(set)了一个“key-value”(键值对)形式的数据,这个数据的key是字符串“ocs”,其对应的value也是字符串;2. 接着我们继续向缓存中存(set)了100个其他简单的“key-value”数据。3. 最后我们进行功能验证。根据之前给定的key,从缓存中获取(get)其对应的value:也就是输入字符串“ocs”,缓存给我们返回value对应的字符串。 以上的步骤中,1与3是相对应的,我们只有先向缓存中set了某个数据,后面才能从缓存中get到这个数据。步骤2中程序向缓存set了100个数据,是为了从另一个方面进行验证。我们回到阿里云OCS控制台,打开“实例详情”页,在“实例监控”的部分点击刷新,会看到其中一些监控项的值已经发生了变化(注:监控信息的刷新可能存在数秒的延迟), 其中的“Key的个数”已经变成了101,也就是说我们程序已经成功地向OCS缓存中存放了101个数据。

唐翰 2019-12-01 23:27:50 0 浏览量 回答数 0

回答

你好,这里有208份资料,详情请参考:https://github.com/ty4z2008/Qix/blob/master/ds.md 《Reconfigurable Distributed Storage for Dynamic Networks》介绍:这是一篇介绍在动态网络里面实现分布式系统重构的paper.论文的作者(导师)是MIT读博的时候是做分布式系统的研究的,现在在NUS带学生,不仅仅是分布式系统,还有无线网络.如果感兴趣可以去他的主页了解. 《Distributed porgramming liboratory》介绍:分布式编程实验室,他们发表的很多的paper,其中不仅仅是学术研究,还有一些工业界应用的论文. 《MIT Theory of Distributed Systems》介绍:麻省理工的分布式系统理论主页,作者南希·林奇在2002年证明了CAP理论,并且著《分布式算法》一书. 《Notes on Distributed Systems for Young Bloods》介绍:分布式系统搭建初期的一些建议 《Principles of Distributed Computing》介绍:分布式计算原理课程 《Google's Globally-Distributed Database》介绍:Google全球分布式数据介绍,中文版 《The Architecture Of Algolia’s Distributed Search Network》介绍:Algolia的分布式搜索网络的体系架构介绍 《Build up a High Availability Distributed Key-Value Store》介绍:构建高可用分布式Key-Value存储系统 《Distributed Search Engine with Nanomsg and Bond》介绍:Nanomsg和Bond的分布式搜索引擎 《Distributed Processing With MongoDB And Mongothon》介绍:使用MongoDB和Mongothon进行分布式处理 《Salt: Combining ACID and BASE in a Distributed Database》介绍:分布式数据库中把ACID与BASE结合使用. 《Makes it easy to understand Paxos for Distributed Systems》介绍:理解的Paxos的分布式系统,参考阅读:关于Paxos的历史 《There is No Now Problems with simultaneity in distributed systems》介绍:There is No Now Problems with simultaneity in distributed systems 《Distributed Systems》介绍:伦敦大学学院分布式系统课程课件. 《Distributed systems for fun and profit》介绍:分布式系统电子书籍. 《Distributed Systems Spring 2015》介绍:卡内基梅隆大学春季分布式课程主页 《Distributed Systems: Concepts and Design (5th Edition)》介绍: 电子书,分布式系统概念与设计(第五版) 《走向分布式》介绍:这是一位台湾网友 ccshih 的文字,短短的篇幅介绍了分布式系统的若干要点。pdf 《Introduction to Distributed Systems Spring 2013》介绍:清华大学分布式系统课程主页,里面的schedule栏目有很多宝贵的资源 《Distributed systems》介绍:免费的在线分布式系统书籍 《Some good resources for learning about distributed computing》介绍:Quora上面的一篇关于学习分布式计算的资源. 《Spanner: Google’s Globally-Distributed Database》介绍:这个是第一个全球意义上的分布式数据库,也是Google的作品。其中介绍了很多一致性方面的设计考虑,为了简单的逻辑设计,还采用了原子钟,同样在分布式系统方面具有很强的借鉴意义. 《The Chubby lock service for loosely-coupled distributed systems》介绍:Google的统面向松散耦合的分布式系统的锁服务,这篇论文详细介绍了Google的分布式锁实现机制Chubby。Chubby是一个基于文件实现的分布式锁,Google的Bigtable、Mapreduce和Spanner服务都是在这个基础上构建的,所以Chubby实际上是Google分布式事务的基础,具有非常高的参考价值。另外,著名的zookeeper就是基于Chubby的开源实现.推荐The google stack,Youtube:The Chubby lock service for loosely-coupled distributed systems 《Sinfonia: a new paradigm for building scalable distributed systems》介绍:这篇论文是SOSP2007的Best Paper,阐述了一种构建分布式文件系统的范式方法,个人感觉非常有用。淘宝在构建TFS、OceanBase和Tair这些系统时都充分参考了这篇论文. 《Data-Intensive Text Processing with MapReduce》介绍:Ebook:Data-Intensive Text Processing with MapReduce. 《Design and Implementation of a Query Processor for a Trusted Distributed Data Base Management System》介绍:Design and Implementation of a Query Processor for a Trusted Distributed Data Base Management System. 《Distributed Query Processing》介绍:分布式查询入门. 《Distributed Systems and the End of the API》介绍:分布式系统和api总结. 《Distributed Query Reading》介绍:分布式系统阅读论文,此外还推荐github上面的一个论文列表The Distributed Reader。 《Replication, atomicity and order in distributed systems》介绍:Replication, atomicity and order in distributed systems 《MIT course:Distributed Systems》介绍:2015年MIT分布式系统课程主页,这次用Golang作为授课语言。6.824 Distributed Systems课程主页 《Distributed systems for fun and profit》介绍:免费分布式系统电子书。 《Ori:A Secure Distributed File System》介绍:斯坦福开源的分布式文件系统。 《Availability in Globally Distributed Storage Systems》介绍:Google论文:设计一个高可用的全球分布式存储系统。 《Calvin: Fast Distributed Transactions For Partitioned Database Systems》介绍:对于分区数据库的分布式事务处理。 《Distributed Systems Building Block: Flake Ids》介绍:Distributed Systems Building Block: Flake Ids. 《Introduction to Distributed System Design》介绍:Google Code University课程,如何设计一个分布式系统。 《Sheepdog: Distributed Storage System for KVM》介绍:KVM的分布式存储系统. 《Readings in Distributed Systems Systems》介绍:分布式系统课程列表,包括数据库、算法等. 《Tera》介绍:来自百度的分布式表格系统. 《Distributed systems: for fun and profit》介绍:分布式系统的在线电子书. 《Distributed Systems Reading List》介绍:分布式系统资料,此外还推荐Various articles about distributed systems. 《Designs, Lessons and Advice from Building Large Distributed Systems》介绍:Designs, Lessons and Advice from Building Large Distributed Systems. 《Testing a Distributed System》介绍:Testing a distributed system can be trying even under the best of circumstances. 《The Google File System》介绍: 基于普通服务器构建超大规模文件系统的典型案例,主要面向大文件和批处理系统, 设计简单而实用。 GFS是google的重要基础设施, 大数据的基石, 也是Hadoop HDFS的参考对象。 主要技术特点包括: 假设硬件故障是常态(容错能力强), 64MB大块, 单Master设计,Lease/链式复制, 支持追加写不支持随机写. 《Bigtable: A Distributed Storage System for Structured Data》介绍:支持PB数据量级的多维非关系型大表, 在google内部应用广泛,大数据的奠基作品之一 , Hbase就是参考BigTable设计。 Bigtable的主要技术特点包括: 基于GFS实现数据高可靠, 使用非原地更新技术(LSM树)实现数据修改, 通过range分区并实现自动伸缩等.中文版 《PacificA: Replication in Log-Based Distributed Storage Systems》介绍:面向log-based存储的强一致的主从复制协议, 具有较强实用性。 这篇文章系统地讲述了主从复制系统应该考虑的问题, 能加深对主从强一致复制的理解程度。 技术特点: 支持强一致主从复制协议, 允许多种存储实现, 分布式的故障检测/Lease/集群成员管理方法. 《Object Storage on CRAQ, High-throughput chain replication for read-mostly workloads》介绍:分布式存储论文:支持强一直的链式复制方法, 支持从多个副本读取数据,实现code. 《Finding a needle in Haystack: Facebook’s photo storage》介绍:Facebook分布式Blob存储,主要用于存储图片. 主要技术特色:小文件合并成大文件,小文件元数据放在内存因此读写只需一次IO. 《Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency》介绍: 微软的分布式存储平台, 除了支持类S3对象存储,还支持表格、队列等数据模型. 主要技术特点:采用Stream/Partition两层设计(类似BigTable);写错(写满)就封存Extent,使得副本字节一致, 简化了选主和恢复操作; 将S3对象存储、表格、队列、块设备等融入到统一的底层存储架构中. 《Paxos Made Live – An Engineering Perspective》介绍:从工程实现角度说明了Paxo在chubby系统的应用, 是理解Paxo协议及其应用场景的必备论文。 主要技术特点: paxo协议, replicated log, multi-paxo.参考阅读:关于Paxos的历史 《Dynamo: Amazon’s Highly Available Key-Value Store》介绍:Amazon设计的高可用的kv系统,主要技术特点:综和运用一致性哈希,vector clock,最终一致性构建一个高可用的kv系统, 可应用于amazon购物车场景.新内容来自分布式存储必读论文 《Efficient Replica Maintenance for Distributed Storage Systems》介绍:分布式存储系统中的副本存储问题. 《PADS: A Policy Architecture for Distributed Storage Systems》介绍:分布式存储系统架构. 《The Chirp Distributed Filesystem》介绍:开源分布式文件系统Chirp,对于想深入研究的开发者可以阅读文章的相关Papers. 《Time, Clocks, and the Ordering of Events in a Distributed System》介绍:经典论文分布式时钟顺序的实现原理. 《Making reliable distributed systems in the presence of sodware errors》介绍:面向软件错误构建可靠的分布式系统,中文笔记. 《MapReduce: Simplified Data Processing on Large Clusters》介绍:MapReduce:超大集群的简单数据处理. 《Distributed Computer Systems Engineering》介绍:麻省理工的分布式计算课程主页,里面的ppt和阅读列表很多干货. 《The Styx Architecture for Distributed Systems》介绍:分布式系统Styx的架构剖析. 《What are some good resources for learning about distributed computing? Why?》介绍:Quora上面的一个问答:有哪些关于分布式计算学习的好资源. 《RebornDB: The Next Generation Distributed Key-Value Store》介绍:下一代分布式k-v存储数据库. 《Operating System Concepts Ninth Edition》介绍:分布式系统归根结底还是需要操作系统的知识,这是耶鲁大学的操作系统概念书籍首页,里面有提供了第8版的在线电子版和最新的学习操作系统指南,学习分布式最好先学习操作系统. 《The Log: What every software engineer should know about real-time data's unifying abstraction》介绍:分布式系统Log剖析,非常的详细与精彩. 中文翻译 | 中文版笔记. 《Operating Systems Study Guide》介绍:分布式系统基础之操作系统学习指南. 《分布式系统领域经典论文翻译集》介绍:分布式系统领域经典论文翻译集. 《Maintaining performance in distributed systems》介绍:分布式系统性能维护. 《Computer Science from the Bottom Up》介绍:计算机科学,自底向上,小到机器码,大到操作系统内部体系架构,学习操作系统的另一个在线好材料. 《Operating Systems: Three Easy Pieces》介绍:<操作系统:三部曲>在线电子书,虚拟、并发、持续. 《Database Systems: reading list》介绍:数据库系统经典论文阅读列,此外推送github上面的db reading. 《Unix System Administration》介绍:Unix System Administration ebook. 《The Amoeba Distributed Operating System》介绍:分布式系统经典论文. 《Principles of Computer Systems》介绍:计算机系统概念,以分布式为主.此外推荐Introduction to Operating Systems笔记 《Person page of EMİN GÜN SİRER》介绍:推荐康奈尔大学的教授EMİN GÜN SİRER的主页,他的研究项目有分布式,数据存储。例如HyperDex数据库就是他的其中一个项目之一. 《Scalable, Secure, and Highly Available Distributed File Access》介绍:来自卡内基梅隆如何构建可扩展的、安全、高可用性的分布式文件系统,其他papers. 《Distributed (Deep) Machine Learning Common》介绍:分布式机器学习常用库. 《The Datacenter as a Computer》介绍:介绍了如何构建仓储式数据中心,尤其是对于现在的云计算,分布式学习来说很有帮助.本书是Synthesis Lectures on Computer Architecture系列的书籍之一,这套丛书还有 《The Memory System》,《Automatic Parallelization》,《Computer Architecture Techniques for Power Efficiency》,《Performance Analysis and Tuning for General Purpose Graphics Processing Units》,《Introduction to Reconfigurable Supercomputing》,Memory Systems Cache, DRAM, Disk 等 《helsinki:Distributed Systems Course slider》介绍:来自芬兰赫尔辛基的分布式系统课程课件:什么是分布式,复制,一致性,容错,同步,通信. 《TiDB is a distributed SQL database》介绍:分布式数据库TiDB,Golang开发. 《S897: Large-Scale Systems》介绍:课程资料:大规模系统. 《Large-scale L-BFGS using MapReduce》介绍:使用MapReduce进行大规模分布式集群环境下并行L-BFGS. 《Twitter是如何构建高性能分布式日志的》介绍:Twitter是如何构建高性能分布式日志的. 《Distributed Systems: When Limping Hardware Is Worse Than Dead Hardware》介绍:在分布式系统中某个组件彻底死了影响很小,但半死不活(网络/磁盘),对整个系统却是毁灭性的. 《Tera - 高性能、可伸缩的结构化数据库》介绍:来自百度的分布式数据库. 《SequoiaDB is a distributed document-oriented NoSQL Database》介绍:SequoiaDB分布式文档数据库开源. 《Readings in distributed systems》介绍:这个网址里收集了一堆各TOP大学分布式相关的课程. 《Paxos vs Raft》介绍:这个网站是Raft算法的作者为教授Paxos和Raft算法做的,其中有两个视频链接,分别讲上述两个算法.参考阅读:关于Paxos的历史 《A Scalable Content-Addressable Network》介绍:A Scalable Content-Addressable Network. 《500 Lines or Less》介绍:这个项目其实是一本书( The Architecture of Open Source Applications)的源代码附录,是一堆大牛合写的. 《MIT 6.824 Distributed System》介绍:这只是一个课程主页,没有上课的视频,但是并不影响你跟着它上课:每一周读两篇课程指定的论文,读完之后看lecture-notes里对该论文内容的讨论,回答里面的问题来加深理解,最后在课程lab里把所看的论文实现。当你把这门课的作业刷完后,你会发现自己实现了一个分布式数据库. 《HDFS-alike in Go》介绍:使用go开发的分布式文件系统. 《What are some good resources for learning about distributed computing? Why?》介绍:Quora上关于学习分布式的资源问答. 《SeaweedFS is a simple and highly scalable distributed file system》介绍:SeaweedFS是使用go开发的分布式文件系统项目,代码简单,逻辑清晰. 《Codis - yet another fast distributed solution for Redis》介绍:Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 《Paper: Coordination Avoidance In Distributed Databases By Peter Bailis》介绍:Coordination Avoidance In Distributed Databases. 《从零开始写分布式数据库》介绍:本文以TiDB 源码为例. 《what we talk about when we talk about distributed systems》介绍:分布式系统概念梳理,为分布式系统涉及的主要概念进行了梳理. 《Distributed locks with Redis》介绍:使用Redis实现分布式锁. 《CS244b: Distributed Systems》介绍: 斯坦福2014年秋季分布式课程. 《RAMP Made Easy》介绍: 分布式的“读原子性”. 《Strategies and Principles of Distributed Machine Learning on Big Data》介绍: 大数据分布式机器学习的策略与原理. 《Distributed Systems: What is the CAP theorem?》介绍: 分布式CAP法则. 《How should I start to learn distributed storage system as a beginner?》介绍: 新手如何步入分布式存储系统. 《Cassandra - A Decentralized Structured Storage System》介绍: 分布式存储系统Cassandra剖析,推荐白皮书Introduction to Apache Cassandra. 《What is the best resource to learn about distributed systems?》介绍: 分布式系统学习资源. 《What are some high performance TCP hacks?》介绍: 一些高性能TCP黑客技巧. 《Maintaining performance in distributed systems》介绍:分布式系统性能提升. 《A simple totally ordered broadcast protocol》介绍:Benjamin Reed 和 Flavio P.Junqueira 所著论文,对Zab算法进行了介绍,zab算法是Zookeeper保持数据一致性的核心,在国内有很多公司都使用zookeeper做为分布式的解决方案.推荐与此相关的一篇文章ZooKeeper’s atomic broadcast protocol: Theory and practice. 《zFS - A Scalable Distributed File System Using Object Disk》介绍:可扩展的分布式文件系统ZFS,The Zettabyte File System,End-to-end Data Integrity for File Systems: A ZFS Case Study. 《A Distributed Haskell for the Modern Web》介绍:分布式Haskell在当前web中的应用. 《Reasoning about Consistency Choices in Distributed Systems》介绍:POPL2016的论文,关于分布式系统一致性选择的论述,POPL所接受的论文,github上已经有人整理. 《Paxos Made Simple》介绍:Paxos让分布式更简单.译文.参考阅读:关于Paxos的历史,understanding Paxos part1,Understanding Paxos – Part 2.Quora: What is a simple explanation of the Paxos algorithm?,Tutorial Summary: Paxos Explained from Scratch,Paxos algorithm explained, part 1: The essentials,Paxos algorithm explained, part 2: Insights 《Consensus Protocols: Paxos》介绍:分布式系统一致性协议:Paxos.参考阅读:关于Paxos的历史 《Consensus on Transaction Commit》介绍:事务提交的一致性探讨. 《The Part-Time Parliaments》介绍:在《The Part-Time Parliament》中描述了基本协议的交互过程。在基本协议的基础上完善各种问题得到了最终的议会协议。 为了让人更容易理解《The Part-Time Parliament》中描述的Paxos算法,Lamport在2001发表了《Paxos Made Simple》,以更平直的口头语言描述了Paxos,而没有包含正式的证明和数学术语。《Paxos Made Simple》中,将算法的参与者更细致的划分成了几个角色:Proposer、Acceptor、Learner。另外还有Leader和Client.参考阅读:关于Paxos的历史 《Paxos Made Practical》介绍:看这篇论文时可以先看看理解Paxos Made Practical. 《PaxosLease: Diskless Paxos for Leases》介绍:PaxosLease:实现租约的无盘Paxos算法,译文. 《Paxos Made Moderately Complex》介绍:Paxos算法实现,译文,同时推荐42 Paxos Made Moderately Complex. 《Hadoop Reading List》介绍:Hadoop学习清单. 《Hadoop Reading List》介绍:Hadoop学习清单. 《2010 NoSQL Summer Reading List》介绍:NoSQL知识清单,里面不仅仅包含了数据库阅读清单还包含了分布式系统资料. 《Raft: Understandable Distributed Consensus》介绍:Raft可视化图帮助理解分布式一致性 《Etcd:Distributed reliable key-value store for the most critical data of a distributed system》介绍:Etcd分布式Key-Value存储引擎 《Understanding Availability》介绍:理解peer-to-peer系统中的可用性究竟是指什么.同时推荐基于 Peer-to-Peer 的分布式存储系统的设计 《Process structuring, synchronization, and recovery using atomic actions》介绍:经典论文 《Programming Languages for Parallel Processing》介绍:并行处理的编程语音 《Analysis of Six Distributed File Systems》介绍:此篇论文对HDFS,MooseFS,iRODS,Ceph,GlusterFS,Lustre六个存储系统做了详细分析.如果是自己研发对应的存储系统推荐先阅读此篇论文 《A Survey of Distributed File Systems》介绍:分布式文件系统综述 《Concepts of Concurrent Programming》介绍:并行编程的概念,同时推荐卡内基梅隆FTP 《Concurrency Control Performance Modeling:Alternatives and Implications》介绍:并发控制性能建模:选择与意义 《Distributed Systems - Concepts and Design 5th Edition》介绍:ebook分布式系统概念与设计 《分布式系统设计的形式方法》介绍:分布式系统设计的形式方法 《互斥和选举算法》介绍:互斥和选举算法 《Actors:A model Of Concurrent Cornputation In Distributed Systems》介绍:经典论文 《Security Engineering: A Guide to Building Dependable Distributed Systems》介绍:如何构建一个安全可靠的分布式系统,About the Author,Bibliography:文献资料,章节访问把链接最后的01换成01-27即可 《15-712 Advanced and Distributed Operating Systems》介绍:卡内基梅隆大学的分布式系统博士生课程主页,有很丰富的资料 《Dapper, Google's Large-Scale Distributed Systems Tracing Infrastructure》介绍:Dapper,大规模分布式系统的跟踪系统,译文,译文对照 《CS262a: Advanced Topics in Computer Systems》介绍:伯克利大学计算机系统进阶课程,内容有深度,涵盖分布式,数据库等内容 《Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System》介绍:PB级分布式系统构建/扩展经验 《CS162: Operating Systems and Systems Programming》介绍:伯克利大学计算机系统课程:操作系统与系统编程 《MDCC: Multi-Data Center Consistency》介绍:MDCC主要解决跨数据中心的一致性问题中间件,一种新的协议 《Research at Google:Distributed Systems and Parallel Computing》介绍:google公开对外发表的分布式系统与并行计算论文 《HDFS Architecture Guide》介绍:分布式文件系统HDFS架构 《ActorDB distributed SQL database》介绍:分布式 Key/Value数据库 《An efficient data location protocol for self-organizing storage clusters》介绍:是著名的Ceph的负载平衡策略,文中提出的几种策略都值得尝试,比较赞的一点是可以对照代码体会和实践,如果你还需要了解可以看看Ceph:一个 Linux PB 级分布式文件系统,除此以外,论文的引用部分也挺值得阅读的,同时推荐Ceph: A Scalable, High-Performance Distributed File System 《A Self-Organizing Storage Cluster for Parallel Data-Intensive Applications》介绍:Surrento的冷热平衡策略就采用了延迟写技术 《HBA: Distributed Metadata Management for Large Cluster-Based Storage Systems》介绍:对于分布式存储系统的元数据管理. 《Server-Side I/O Coordination for Parallel File Systems》介绍:服务器端的I/O协调并行文件系统处理,网络,文件存储等都会涉及到IO操作.不过里面涉及到很多技巧性的思路在实践时需要斟酌 《Distributed File Systems: Concepts and Examples》介绍:分布式文件系统概念与应用 《CSE 221: Graduate Operating Systems》介绍:加利福尼亚大学的研究生操作系统课程主页,论文很值得阅读 《S4: Distributed Stream Computing Platform》介绍:Yahoo出品的流式计算系统,目前最流行的两大流式计算系统之一(另一个是storm),Yahoo的主要广告计算平台 《Pregel: a system for large-scale graph processing》介绍:Google的大规模图计算系统,相当长一段时间是Google PageRank的主要计算系统,对开源的影响也很大(包括GraphLab和GraphChi) 《GraphLab: A New Framework for Parallel Machine Learning》介绍:CMU基于图计算的分布式机器学习框架,目前已经成立了专门的商业公司,在分布式机器学习上很有两把刷子,其单机版的GraphChi在百万维度的矩阵分解都只需要2~3分钟; 《F1: A Distributed SQL Database That Scales》介绍:这篇论文是Google 2013年发表的,介绍了F1的架构思路,13年时就开始支撑Google的AdWords业务,另外两篇介绍文章F1 - The Fault-Tolerant Distributed RDBMS Supporting Google's Ad Business .Google NewSQL之F1 《Cockroach DB:A Scalable, Survivable, Strongly-Consistent SQL Database》介绍:CockroachDB :一个可伸缩的、跨地域复制的,且支持事务的数据存储,InfoQ介绍,Design and Architecture of CockroachDb 《Multi-Paxos: An Implementation and Evaluation》介绍:Multi-Paxos实现与总结,此外推荐Paxos/Multi-paxos Algorithm,Multi-Paxos Example,地址:ftp://ftp.cs.washington.edu/tr/2009/09/UW-CSE-09-09-02.PDF 《Zab: High-performance broadcast for primary-backup systems》介绍:一致性协议zab分析 《A Distributed Hash Table》介绍:分布式哈希算法论文,扩展阅读Introduction to Distributed Hash Tables,Distributed Hash Tables 《Comparing the performance of distributed hash tables under churn》介绍:分布式hash表性能的Churn问题 《Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web》介绍:分布式系统的CAP问题,推荐Perspectives on the CAP Theorem.对CAP理论的解析文章,PODC ppt,A plain english introduction to CAP Theorem,IEEE Computer issue on the CAP Theorem 《F2FS: A New File System for Flash Storage》介绍:闪存存储文件系统F2FS 《Better I/O Through Byte-Addressable, Persistent Memory》介绍:微软发表的关于i/o访问优化论文 《tmpfs: A Virtual Memory File System》介绍:虚拟内存文件系统tmpfs 《BTRFS: The Linux B-tree Filesystem》介绍:Linux B-tree文件系统. 《Akamai technical publication》介绍:Akamai是全球最大的云计算机平台之一,承载了全球15-30%网络流量,如果你是做CDN或者是云服务,这个里面的论文会给你很有帮助.例如这几天看facebook开源的osquery。找到通过db的方式运维,找到Keeping Track of 70,000+ Servers: The Akamai Query System这篇论文,先看论文领会思想,然后再使用工具osquery实践 《BASE: An Acid Alternative》介绍:来自eBay 的解决方案,译文Base: 一种Acid的替代方案,应用案例参考保证分布式系统数据一致性的6种方案 《A Note on Distributed Computing》介绍:Jim Waldo和Sam Kendall等人共同撰写了一篇非常有名的论文“分布式计算备忘录”,这篇论文在Reddit上被人推荐为“每个程序员都应当至少读上两篇”的论文。在这篇论文中,作者表示“忽略本地计算与分布式计算之间的区别是一种危险的思想”,特别指出了Emerald、Argus、DCOM以及CORBA的设计问题。作者将这些设计问题归纳为“三个错误的原则”: “对于某个应用来说,无论它的部署环境如何,总有一种单一的、自然的面向对象设计可以符合其需求。” “故障与性能问题与某个应用的组件实现直接相关,在最初的设计中无需考虑这些问题。” “对象的接口与使用对象的上下文无关”. 《Distributed Systems Papers》介绍:分布式系统领域经典论文列表. 《Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web》介绍:Consistent Hashing算法描述. 《SIGMOD 2016: Accepted Research Papers》介绍:SIGMOD是世界上最有名的数据库会议之一,最具有权威性,收录论文审核非常严格.2016年的SIGMOD 会议照常进行,上面收录了今年SIGMOD收录的论文,把题目输入google中加上pdf就能找到,很多论文值得阅读,SIGMOD 2015 《Notes on CPSC 465/565: Theory of Distributed Systems》介绍:耶鲁大学的分布式系统理论课程笔记 《Distributed Operating System Doc PDF》介绍:分布式系统文档资源(可下载) 《Anatomy of a database system》介绍:数据库系统剖析,这本书是由伯克利大学的Joseph M. Hellerstein和M. Stonebraker合著的一篇论文.对数据库剖析很有深度.除此以外还有一篇文章Architecture of a Database System。数据库系统架构,厦门大学的数据库实验室教授林子雨组织过翻译 《A Relational Model of Data for Large Shared Data Banks》介绍:数据库关系模型论文 《RUC Innovative data systems reaserch lab recommand papers》介绍:中国人民大学数据研究实验室推荐的数据库领域论文 《A Scalable Distributed Information Management System》介绍:构建可扩展的分布式信息管理系统 《Distributed Systems in Haskell》介绍:Haskell中的分布式系统开发 《Large-scale cluster management at Google with Borg》介绍:Google使用Borg进行大规模集群的管理,伯克利大学ppt介绍,中文版 《Lock Free Programming Practice》介绍:并发编程(Concurrency Programming)资料,主要涵盖lock free数据结构实现、内存回收方法、memory model等备份链接 密码: xc5j 《Distributed Algorithms Lecture Notes for 6.852》介绍:Nancy Lynch's的分布式算法研究生课程讲义 《Distributed Algorithms for Topic Models》介绍:分布式算法主题模型. 《RecSys - ACM Recommender Systems》介绍:世界上非常有名的推荐系统会议,我比较推荐接收的PAPER 《All Things Distributed》介绍:推荐一个博客,博主是Amazon CTO Werner Vogels,这是一个关注分布式领域的博客.大部分博文是关于在工业界应用. 《programming, database, distributed system resource list》介绍:这个Git是由阿里(alibaba)的技术专家何登成维护,主要是分布式数据库. 《Making reliable distributed systems in the presence of sodware errors》介绍:Erlang的作者Joe Armstrong撰写的论文,面对软件错误构建可靠的分布式系统.中文译版 《CS 525: Advanced Distributed Systems[Spring 2016]》介绍:伊利诺伊大学的Advanced Distributed Systems 里把各个方向重要papers(updated Spring 2015)列举出来,可以参考一下 《Distributed Algorithms》介绍:这是一本分布式算法电子书,作者是Jukka Suomela.讲述了多个计算模型,一致性,唯一标示,并发等. 《TinyLFU: A Highly Efficient Cache Admission Policy》介绍:当时是在阅读如何设计一个缓存系统时看到的,然后通过Google找到了这一篇关于缓存策略的论文,它是LFU的改良版,中文介绍.如果有兴趣可以看看Golang实现版。结合起来可能会帮助你理解 《6.S897: Large-Scale Systems》介绍:斯坦福大学给研究生开的分布式系统课程。教师是 spark 作者 matei. 能把这些内容真正理解透,分布式系统的功力就很强了。 《学习分布式系统需要怎样的知识?》介绍:[怎么学系列]学习分布式系统需要怎样的知识? 《Distributed systems theory for the distributed systems engineer》介绍:分布式系统工程师的分布式系统理论 《A Distributed Systems Reading List》介绍:分布式系统论文阅读列表 《Distributed Systems Reading Group》介绍:麻省理工大学分布式系统小组,他们会把平时阅读到的优秀论文分享出来。虽然有些论文本页已经收录,但是里面的安排表schedule还是挺赞的 《Scalable Software Architecture》介绍:分布式系统、可扩展性与系统设计相关报告、论文与网络资源汇总. 《MapReduce&Hadoop resource》介绍:MapReduce&Hadoop相关论文,涉及分布式系统设计,性能分析,实践,优化等多个方面 《Distributed Systems: Principles and Paradigms(second edtion)》介绍:分布式系统原理与范型第二版,课后解答 《Distributed Systems Seminar's reading list for Spring 2017》介绍:分布式系统研讨会论文阅读列表 《A Critique of the CAP Theorem》介绍:这是一篇评论CAP定理的论文,学习CAP很有帮助,推荐阅读评论文章"A Critique of the CAP Theorem" 《Evolving Distributed Systems》介绍:推荐文章不断进化的分布式系统.

suonayi 2019-12-02 03:17:27 0 浏览量 回答数 0

回答

首先“缓存”Cache这个东西是干什么的,我们应该先有些基本的了解。要是不太明白的可以看看网上的解释:http://baike.baidu.com/view/907.htm 简单讲,阿里云OCS提供的功能就是提供对热点数据的高速访问。在使用OCS之前(或者在使用任何一种缓存服务之前),我们都应该明白关于缓存的这么几点: 缓存里的数据不是持久化保存的,也就是说它像是电脑里的内存,而不像硬盘;我们不能指望OCS里的数据一直保存不丢失。如果你真的需要存储持久化的数据,也许你应该出门左转找阿里云OSS(开发存储服务); 缓存里存的应该是“热点”数据。遵循常常出现的“20-80法则”,通常程序应用中都有一定比例的数据常常被请求访问,这就是所谓的热点数据,OCS正是为这种数据设计存在的。假定我们的程序中有100个数据,每次访问这些数据的概率完全是均匀分布的1/100,那么使用缓存的效果就不会太好,因为这其中不存在热点数据。 数据逐出。我们可以决定哪些数据是热点数据被放到缓存当中,但是如果我们的缓存容量不够大,这些热点数据中某些最近较少被用到的数据还是会被“挤出去”,这种行为叫做数据逐出。如果想减少出现这种情况,我们可以购买更高容量的OCS。 -------------------------         在开始使用之前,关于阿里云OCS,我们还需要知道以下这些事: 阿里云OCS仅支持阿里云内网访问,不支持公网访问。也就是说,我们用办公室或者家里的电脑(都属于公网)是无法连上阿里云OCS的。为什么会这样呢?因为缓存服务的根本目标是要提供低延迟的高速访问,而从公网电脑来连接OCS服务器的场景下,公网的网络环境是不可控的,可能出现延迟很高甚至断连接的情况,这使得缓存服务无法保证“高速、低延迟”的基本特性,所以阿里云OCS是不支持公网直接访问的。如果觉得高延迟的情况对于我们的应用也能接受,那么我们应该去选择阿里云其他的产品(比如OSS开放存储服务),而不应该选择OCS缓存服务。 阿里云OCS需要与ECS(阿里云服务器)配合使用,而且只能与本地区节点的ECS连通。这一点与上一条相关。OCS只能从阿里云内网访问,也就是说我们只能从阿里云ECS上才能访问并使用OCS服务。所以我们在官网购买OCS的时候,会看到提示信息说需要至少有一台ECS才能买OCS。另外,阿里云ECS是分地区节点的,比如北京、杭州、青岛等,我们在购买OCS缓存的时候也要选相应的地区节点。北京的ECS只能访问北京的OCS,而不能访问杭州或青岛的OCS。 阿里云OCS是按购买量收费的,而不是按使用量收费。这点需要提醒新同学们注意,在我们购买了OCS缓存之后,计费就已经开始了,即使我们还没有真正使用缓存。也就是说,我们买了1G的OCS缓存后,即使目前使用量为0,系统也会按照1G的标准来计费。所以我们在购买OCS的时候,要选取适合我们业务数据需要的缓存档位。当然了,阿里云OCS也提供在线升降缓存容量的功能。也就是说,如果我们在使用了一段时间之后,发现购买的OCS缓存不够用了(或者缓存使用量太低),我们可以在线的对已有的OCS实例进行升档(或者降档),而OCS缓存服务不会被中断。 阿里云OCS对于存贮的对象大小是有限制的。缓存通常对其内部存储的数据尺寸是有限制的,阿里云OCS也一样。目前OCS支持存储的数据对象的上限是1,000,000Byte。如果要存的值超过这个限制,我们应该考虑把数据压缩,或从逻辑上分成不同键存储的几个值。 ------------------------- 现在我们开始在阿里云官网上购买OCS实例  http://buy.aliyun.com/ocs  首先我们需要已经有了一台阿里云ECS,否则我们无法在这个页面成功购买OCS。购买的第一步,我们先要确定选择买哪个地区的OCS;这个很重要,如上面所说,如果我们的ECS是属于北京,而我们在这里购买了杭州的OCS,那么这两者是无法配合协同工作的。所以,在购买OCS的时候一定要选择应用服务器ECS所在地区的OCS。下一步是要选择OCS缓存容量。我们要购买多大的缓存,这个取决于我们对自身业务应用中热点数据总量大小的判断。如果一时难以准确判断数据量,也不用担心:我们可以先买一个大致容量的OCS(比如1GB),随后在使用过程中,通过OCS控制台提供的监控功能,我们可以了解到目前OCS缓存的使用量等数据,然后可以自主的调整所需的缓存量,购买更大的缓存(比如升到5GB)或者减少已购的缓存量(比如降到512MB),阿里云会根据我们选择的新配置来调整对应的收费。此外在选择缓存容量的时候,要知道不同容量的缓存档位对应着不同的性能配额,具体来说包括两个指标:吞吐量带宽与每秒请求处理数(QPS)。比如以现在的配额标准,1GB的OCS缓存对应5MB/sec的吞吐量带宽和3000次/sec的请求处理峰值。当我们使用OCS的时候,如果数据量传输的带宽超过了5MB/s, 或者每秒的请求数超过了3000次,都会触发性能配额控制机制,导致某些请求无法返回正常结果。在确定了地区和缓存容量之后,我们就可以直接下单购买OCS了。 ------------------------- 在成功购买OCS之后,我们的联系邮箱和手机都会收到OCS创建成功的通知,里面会包括OCS的实例ID和初始密码(关于密码的用处后面会讲到)。我们现在登录OCS控制台, http://ocs.console.aliyun.com/ 就可以看到已经购买到的OCS实例列表。在列表页面上对应OCS实例的后面点击“管理”,就可以进入该OCS实例的详情页,看到更多的详细信息。 ------------------------- 我们现在已经有了一个OCS缓存实例,现在是时候试玩OCS了。要使用OCS就要写一点程序代码,不过不用担心,我们在这里采用“Happy-Path”的方法,从最简单的操作开始,让新上手的菜鸟们能马上就有一个能调用OCS缓存服务的程序。OCS提供缓存服务,它并不要求我们的程序是哪种语言来写的。我们这里先以Java程序为例,写一个最简单的“Hello World”。(其他编程语言的例子,我们随后附上。)第一步,登录你的阿里云ECS服务器,在上面安装Java JDK和你常用的IDE(比如Eclipse)。一定要记得我们之前说过的,只有在阿里云内网的ECS服务器上,才能访问我们的OCS实例。所以,用家里或是公司的电脑执行下面的代码示例是看不到结果的。 Java JDK和Eclipse都很容易从网上找到下载,比如 http://download.eclipse.org/ 或者 http://www.onlinedown.net/soft/32289.htm 第二步,在把Java开发环境准备好了之后,下载第一个代码示例(Sample-Code-1第三步,在Eclipse里面打开刚下载的OcsSample1.java,我们要根据自己的OCS实例信息修改几个地方。        我们每个人买到的OCS实例的ID都是不重复的,其对应的阿里云内网地址也是独一无二的,这些信息都在OCS控制台上显示出来。我们在同自己的OCS实例建立连接的时候,需要根据这些信息修改OcsSample1.java中的对应地方。         public static void main(String[] args) {                                        final String host = "b2fd2f89f49f11e3.m.cnqdalicm9pub001.ocs.aliyuncs.com"; //控制台上的“内网地址”                   final String port ="11211";       //默认端口 11211,不用改                   final String username = "b2fd2f89f49f11e3"; //控制台上的“访问账号”                   final String password = "my_password"; //邮件或短信中提供的“密码”                   …… …… ……       信息修改完毕,我们可以运行自己的程序了。运行main函数,我们会在Eclipse下面的console窗口看到下面这样的结果(请忽略可能出现的红色INFO调试信息): OCS Sample CodeSet操作完成!Get操作: Open Cache Service,  from www.Aliyun.com     OK,搞定!我们已经成功的连接上了阿里云的OCS并且调用缓存服务成功,就这么简单。-------------------------我们已经成功运行了第一个调用阿里云OCS缓存服务的Sample程序OcsSample1.java,现在我们看看这个程序里都做了什么。                                  …… …… ……                            System.out.println("OCS Sample Code");                                                        //向OCS中存一个key为"ocs"的数据,便于后面验证读取数据,                             //这个数据对应的value是字符串 Open Cache Service,  from www.Aliyun.com                            OperationFuture future = cache.set("ocs", 1000," Open Cache Service,  from www.Aliyun.com");                            //向OCS中存若干个数据,随后可以在OCS控制台监控上看到统计信息                            for(int i=0;i<100;i++){                                String key="key-"+i;                                String value="value-"+i;                                 //执行set操作,向缓存中存数据                                cache.set(key, 1000, value);                            }                             System.out.println("Set操作完成!");                             future.get();  //  确保之前(cache.set())操作已经结束                         //执行get操作,从缓存中读数据,读取key为"ocs"的数据                            System.out.println("Get操作:"+cache.get("ocs"));                            …… …… …… 从这些代码中可以看出: 1. 我们在建立与OCS缓存服务器的连接后,先是向缓存中存(set)了一个“key-value”(键值对)形式的数据,这个数据的key是字符串“ocs”,其对应的value也是字符串;2. 接着我们继续向缓存中存(set)了100个其他简单的“key-value”数据。3. 最后我们进行功能验证。根据之前给定的key,从缓存中获取(get)其对应的value:也就是输入字符串“ocs”,缓存给我们返回value对应的字符串。 以上的步骤中,1与3是相对应的,我们只有先向缓存中set了某个数据,后面才能从缓存中get到这个数据。步骤2中程序向缓存set了100个数据,是为了从另一个方面进行验证。我们回到阿里云OCS控制台,打开“实例详情”页,在“实例监控”的部分点击刷新,会看到其中一些监控项的值已经发生了变化(注:监控信息的刷新可能存在数秒的延迟), 其中的“Key的个数”已经变成了101,也就是说我们程序已经成功地向OCS缓存中存放了101个数据。-------------------------在写下一篇技术贴之前,列一些OCS用户在入门时问到的问题,方便其他刚认识OCS的同学:Question:买了1G的OCS,那就相当于这个1G是专门缓存用的,与ECS服务器的内存没关系是吧~Answer:是的,OCS的缓存容量与您ECS的内存容量是没关系的。Question:OCS 外网测试,怎么连接?有没有外网连接地址哦?Answer:OCS是不能从外网访问的。参照上面的文章。Question:我之前那个OCS可以正常使用,但现在换了一个OCS就不行了,怎么回事?Answer:经核实您的主机是属于杭州节点的,而现在这个OCS是青岛节点的,不同地域之间的产品内网不互通。Question:在设置一个value时,如果指定过期时间为0,会永久保留吗?Answer:指定过期时间为0,OCS就认为此数据不根据过期时间发生淘汰;但是,此数据仍有可能基于LRU被其他数据淘汰,或者由内存清理造成丢失 ,因此不能认为这个value会永久保留。 Question:对OCS的访问是否需要负载均衡? Answer:不需要。对访问请求的负载均衡都是在OCS服务器端来进行的,用户直接使用缓存服务即可,不用考虑负载均衡的事情。 Question:OCS是否会主动关闭闲置的连接? 如果会,请问连接闲置多久会被关闭?Answer:OCS不会主动关闭闲置的用户连接。但是用户的环境如果使用了SLB,则需要参考SLB连接关闭时间。Question:如何设置数据在OCS缓存中的过期时间 ?Answer:关于设置缓存数据的过期时间,可以参考Memcached官方说明: https://code.google.com/p/memcached/wiki/NewCommands An expiration time, in seconds. Can be up to 30 days. After 30 days, is treated as a unix timestamp of an exact date. 翻译过来就是:0~2592000表示从当前时刻算起的时间长度(以秒计算,最长2592000即30天);大于2592000表示UNIX时间戳。 此值设置为0表明此数据不会主动过期。------------------------- 回 12楼(村里一把手) 的帖子 谢谢,要让大家用得好才算数。 -------------------------缓存与数据库相结合使用,是常见的一种应用搭配场景。现在我们再看一个例子,是用OCS搭配MySQL数据库使用。Java示例代码在此(这个示例代码中,大部分与前几个例子类似。因为要与数据库结合,所以程序需要依赖一个JDBC的jar包才能运行。支持MySQL的JDBC jar包在此(在程序中添加MySQL数据库的连接信息:     …… …… ……            // JDBC driver name and database URL    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";    static final String DB_URL = "jdbc:mysql://xxxxxxx.mysql.rds.aliyuncs.com/testdb"; //MySQL数据库URL        //  Database用户名及密码    static final String DB_USER = "xxxxxx";    static final String DB_PASS = "xxxxxx";            我们设想这样一个场景:我们需要从数据库的tableone表中查找区域不属于北京的记录总数,用SQL表示就是:SELECT count(*)  FROM testdb.tableone where region != 'beijing'假定这个表中的数据如下,则这条SQL查询返回的结果就是7:如果这个查询被调用到的频率很高,多个用户反复不断的在数据库中查这个数据,我们就可以把这个查询结果放到OCS缓存中去。看下面的代码片段,我们用for循环模拟用户连续20次在数据库中查询上述SQL语句:              for (int i = 1; i <= 20; i++) {                String sql = "SELECT count(*)  FROM testdb.tableone where region != 'beijing'";                String key ="non-beijing"; //给SQL语句自定义一个key                //在OCS缓存里按key查找               String value =  (String) cache.get(key);                                if (value == null) {                    // 在OCS缓存里没有命中                    // step 1:从My SQL数据库中查询                    //Load MySQL Driver                      Class.forName(JDBC_DRIVER);                     con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);                    ps = con.prepareStatement(sql);                    ResultSet result = ps.executeQuery(sql);                    result.next();                                        value=result.getString(1);                    System.out.println("从MySQL中查询数据.  Key= "+key+" Value="+value);                                       // step 2: 把数据库返回的数据作为value存放到OCS缓存中去                    cache.set(key, EXPIRE_TIME, value);                                    } else {                    // 在OCS缓存里命中                    System.out.println("从OCS中读取数据.     Key= "+key+" Value="+value);                }                            }// end of for在这段代码中我们可以看到,我们给这条SQL语句标记了一个key,当有用户要执行这条SQL的时候,我们首先按照key在OCS缓存中查找:如果没有对应的缓存数据,则连接MySQL数据库执行SQL查询,把结果返回给用户,并把这个查询结果存到OCS缓存中去;如果OCS中已经有了对应的缓存数据,则直接把缓存数据返回给用户。运行结果如下: 从MySQL中查询数据.  Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7…… …… 从结果可以看出,程序第1次是从MySQL数据库当中查询数据,后面的19次都是从OCS缓存中获取key对应的value直接返回。也就是说,OCS降低了程序去连接MySQL数据库执行SQL查询的次数,减轻了对数据库的负载压力。用户对热点数据访问的频率越高,OCS的这种优势就越明显。

唐翰 2019-12-01 23:41:23 0 浏览量 回答数 0

回答

Re会打字就会建网站:不限流量,免备案,免费试用。 现在是5G空间了。。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。     建议你用速成网站做网站,完全可以自己动手制作网站。有专业人员维护后台系统,让用户无后顾之忧。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 用的是阿里云美国机房,还是很稳定的。。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 找人或公司设计也不太好,如果联系不上对方了,或者是对方公司不做了,那也很麻烦。    ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 咱们论坛效果还不错,支持一下。。。。。。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 你可以选择在节假日或晚上(这种时间最能体现真实的服务水准),找客服沟通一下,看咱们客服是否在,服务如何,沟通3-5次后再确定。    ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 一定要找规模大的服务商,小的服务商不稳定;他们只是简单地在租几台服务器就开始卖虚拟主机了,虽然更便宜,但是不稳定,会使您的网站经常无法访问,影响您公司的形象及业务往来。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 如要在百度、GOOGLE等网站搜索到您的网站,有两种方式,一种是收费的广告服务;一种是免费的,即您在各论坛上宣传您的网站,过一段时间百度、GOOGLE这些网站会免费将您的网站收录到他们的数据库中。一般新网站做好后,过15天-3个月会自动被收录到这些大网站的数据库中,这时候就可以搜索到了。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。  关键是网站是否有原创的内容和经常保持更新,原创内容指你自己写的文章、报告等。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 也可以自己搭建模板,所有文字和图片都是可以改的 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。   速成网站主要是做展示类网站,简单的商城类网站也是可以的,但功能肯定比不上淘宝,目前付款方式只支持支付宝(即时到账),可实现会员注册登录购买等简单功能,不过一般建议客户在网站上放淘宝店铺的链接,指导客户到淘宝店中购买比较好。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。    国际版不能备案,所以用不了支付宝在线支付,支付宝在线支付(即时到账)要求:必须是企业或有执照的个体户;网站必须备案等,具体请见:支付宝官网介绍。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。         从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。         找人或公司设计也不太好,如果找不到对方了,或者是对方公司不做了,那也很麻烦。         建议你用速成网站做网站,完全可以自己动手制作网站。有专业人员维护后台系统,让用户无后顾之忧。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     有一些服务商连在线客服也没有,有的有所谓在线客服,也是机器人,也不能解决客户的问题。     很多用户都是先沟通很长时间,然后再买的。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 注意:国内主机必须备案成功后才能用您自己的域名访问,网站备案一般需要10个工作日左右;个人网站备案后,不能放企业或产品类的内容。速成网站国际版不需要备案,不受备案限制。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 在备案平台备案时,请直接选择购买收费幕布(需自行支付邮费15元左右)。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 可以申请速成网站国际版做跳转,不需要备案。可通过跳转将您的域名指向到其他网址上,通过电脑和手机访问都可以实现跳转。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。   网站内容实时推送至百度搜索,平均仅需2天,即可实现原创内容极速收录!成倍放大SEO效果,更有利于网站推广。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 为什么选择速成网站做网站? 更安全!         从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。         找人或公司设计也不太好,如果找不到对方了,或者是对方公司不做了,那也很麻烦。         建议你用速成网站做网站,完全可以自己动手制作网站。有专业人员维护后台系统,让用户无后顾之忧。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 咱 在线上,可以 加 一下。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 首年费用是215元,包括:COM域名+速成网站国际版(5G阿里云空间,不需要备案,不限流量,可先试用一下)。续费:229元/年。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 如要在百度、GOOGLE等网站搜索到您的网站,有两种方式,一种是收费的广告服务;一种是免费的,即您在各论坛上宣传您的网站,过一段时间百度、GOOGLE这些网站会免费将您的网站收录到他们的数据库中。一般新网站做好后,过15天-3个月会自动被收录到这些大网站的数据库中,这时候就可以搜索到了。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 云邮箱是基于庞大的服务器集群构建的企业邮箱平台,在全球多个节点部署了多个中转集群,保证邮件在全球收发无阻。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     速成网站国际版不用备案,即可直接使用;速成网站创业版等其他的主机网站必须备案。     速成网站-国际版(5G,不限流量,不需备案):160元/年     速成网站-创业版(5G,不限流量,需备案):165元/年 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。 国际版不能备案,所以用不了支付宝在线支付,支付宝在线支付(即时到账)要求:必须是企业或有执照的个体户;网站必须备案等,具体请见:支付宝官网介绍。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。     有一些服务商连在线客服也没有,有的有所谓在线客服,也是机器人,也不能解决客户的问题。     很多用户都是先沟通很长时间,然后再买的。 ------------------------- Re会打字就会建网站:不限流量,免备案,免费试用。   从2016年10月1日起,新购的速成网站(创业版、国际版、百度版)已扩容至20G。2016年10月1日以前购买的不变。价格不变。 -------------------------   从网上找的网站程序不好维护,以后发现漏洞,不懂技术的用户就不会补漏洞;程序出故障,也没有人管,会很麻烦。 -------------------------     可以改变域名注册商的,可转移到我们公司管理,可以教你一下。    COM 英文域名转入费是55元(包括一年续费)。     ------------------------- 有200多套网站模板可以选择,客户自助建站,不需要开发程序,可视化操作,动动鼠标就可以操作!有新手指导、学习视频,一般看半天就会做自己的网站了。 ------------------------- 你可以选择在节假日或晚上(这种时间最能体现真实的服务水准),找客服沟通一下,看咱们客服是否在,服务如何,沟通3-5次后再确定。     ------------------------- 赚钱三法则:不交费、不购买、不销售。不交费:就是不交任何费用;不购买:就是不买任何产品;不销售:就是不让你直接销售任何产品,所以你不需要进货。       ------------------------- 网站备案太麻烦了,用速成网站国际版不用备案就可以直接访问 -------------------------   网站备案太麻烦了,用速成网站国际版不用备案就可以直接访问 -------------------------     有一些服务商连在线客服也没有,有的有所谓在线客服,也是机器人,也不能解决客户的问题。    很多用户都是先沟通很长时间,然后再买的。 ------------------------- 建议你免费试用一下,有数百套模板可以选择,如果对模板不满意,还可以自己改模板。    主要功能包括:网页设计管理、商品展示和发布管理、文章管理、投票和调查问卷、会员管理、网站SEO、手机网站、商城功能等,不限流量。   ------------------------- 现在是200多套模板了。。。 ------------------------- 申请域名或主机请注意:这类产品大部分成本是服务。有一些服务商降低了价格,服务也下降了。不是找不到人,就是电话打不通,也没有工作人员在线支持,会很麻烦。一定要先咨询2-3个小时,问清楚了再说。 ------------------------- 这个用的是阿里云的服务器,还 很稳定的。 ------------------------- 现在.COM/NET/CN/COM.CN/NET.CN等域名也需要实名认证了。 -------------------------     速成网站国际版不用备案,即可直接使用;速成网站创业版等其他的主机网站必须备案。创业版比国际版要快一些。创业版用的是国内的服务器,国际版用的是美国的服务器。    速成网站-国际版(5G,阿里云美国服务器,不限流量,不需备案):160元/年    速成网站-创业版(10G,阿里云国内服务器,不限流量,需备案):165元/年 ------------------------- 申请域名或主机网站请注意:这类产品大部分成本是服务。有一些服务商降低了价格,服务也下降了。不是找不到人,就是电话打不通,也没有工作人员在线支持,会很麻烦。一定要先咨询5-7个小时,问清楚了再说。    可以找咱们。现在在线。 ------------------------- 一般先按一般公司提交,等他们要求时再按要求办就行了。 -------------------------    知道问答推广属精准营销,针对性强,事半功倍。例如需要做网站的客户一般会提交做网站相关的问题,很容易成为您的客户。几百个四级以上的老账号轮流推广,效果更好。可以加一下我。 ------------------------- 其他同类产品是1G空间,月流量15G,超过流量就不能访问了 -------------------------   百度知道问答推广属精准营销,针对性强,事半功倍,一条答复可能有几十甚至几百个用户查看,不像竞价排名,点一次钱就没了。例如需要做网站的客户一般会提交做网站相关的问题,答复后,客户通过搜索你的品牌名称或产品名称到你的网站,很容易成为您的客户。咱们有350多个四级以上超过5年的老账号轮流推广,效果更好。可以加一下我。 ------------------------- 这个用的是阿里云的服务器,稳定性和速度还是不错的。。 ------------------------- 找人设计或从网上下载网站程序都不安全,出现漏洞没有人管,所以还是用自助建站系统比较可靠些,由技术部负责网站后台系统的安全和维护,更省心。 ------------------------- 现在是300多套模板了,做一般民示类的网站足够用了。。

今日创业 2019-12-02 01:27:25 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站