在2010年4月,Google的网页索引更新实现了实时更新,在今年的OSDI大会上,Google首次公布了有关这一技术的论文。
在此之前,Google的索引更新,采用的的批处理的方式(map/reduce),也就是当增量数据达到一定规模之后,把增量数据和全量索引库Join,得到最新的索引数据。采用新的索引更新系统之后,数据的生命周期缩短了50%,所谓的数据生命周期是指,数据从网页上爬下来,到展现在搜索结果中这段时间间隔,但是正如Google所强调的,这一系统仅仅是为增量更新所建立的,并没有取代map/reduce的批量作业处理模式。
架构OverviewGoogle的新一代增量索引更新 – Percolator,是建立在Bigtable之上,提供的API也尽量接近Bigtable的方式,所以整个架构大致是如下的样子:
事务(Transaction)和锁(Lock)有区别吗?
在关系数据库领域,二者还是有很大区别的,但是对Percolator而言,Transaction = Lock,所以我们这里讨论的分布式锁,也可以说是分布式事务,所以下面提到的锁或者事务,指的都是同一件事。
Percolator利用Bigtable原有的行锁,再加上自己的一些巧妙的做法,实现了分布式锁服务,这就意味着,Google可以实时的更新PB级别的索引库。最近我们发现Google的搜索结果时效性很好,刚写好的文章,几分钟之后,Google就可以检索到,原因就在Google的Crawler在抓到新的网页之后,不用再等待一定的时间批量更新索引,而是实时的更新,数据生命周期大大缩短。
Percolator支持跨行,跨表的事务,充分利用了Bigtable本身已经有的行事务、备份机制。
简单的示例在分析Percolator的细节之前,先看一个简单的例子,对Percolator有一个大概的认识,有利于后面的理解。
下面的这个例子是把UserA的人气分减掉10,加到UserB的人气分上,key表示每一行的key,data,lock,write是列名字,data存储数据,lock存储锁状态,write表示事务提交后的数据位置引用.
初始状态:UserA有100个人气分,UserB有50个人气分
最终状态:UserA有90个人气分,UserB有60个人气分
Step0(初始状态)
Key Data Lock Write UserA 100:t1 UserB 50:t2Step1(从UserA中拿出10个人气分)
Key Data Lock Write UserA 90:t2100:t1 Primary Lock:t2 t2 UserB 50:t2Step2(把UserB的人气分加10)
Key Data Lock Write UserA 90:t2100:t1 primary_lock:t2 t2 UserB 60:t350:t2 Primary_lock:UserA@data t3Step3(事务提交)
A:先提交primary(移除锁,写入新的timestamp,在write列写入新数据的位置引用)
Key Data Lock程序的开发离不开变量和常量的应用。我们在学习vb的时候,也对变量和常量有了一定的了解,其实非常简单,变量就是本身被用于存储特定类型的数据,而常量则存储不变的数据值。
一、变量
1.基本概念:
变量本身被用于存储特定类型的数据,可以根据需要随时改变变量中所存储的数据值。变量具有名称、类型和值。和类相同,使用变量之前也必须声明变量,即指定变量的类型和名称。
2.变量类型:
C#中变量类型根据定义可以分为两种:一种是值类型,另一种是引用类型。两者的差异在于数据的存储方式。值类型的变量本身直接存储数据,而引用类型则存储实际数据的引用,程序通过此引用找到真正的数据。
(1)值类型
值类型主要包含整数类型、浮点类型以及布尔类型等。值类型变量在堆栈中进行分配,所有效率很高。
A.整数类型:
在这里说明了每个数据类型的范围,是为了我们可以根据数值的大小选择合适的数据类型,否则可能会导致运算溢出的处理。
例如:声明一个byte类型的变量Android并初始化为255,并输出。代码如下:
static voidMain(string[] args) { byte android =255; //声明一个byte类型的变量Android Console.WriteLine("android={0}",android ); //输出byte类型变量Android Console.ReadLine(); }
结果显示:
当byte类型的初始值换为256时,见代码:
static void Main(string[] args) { byte android =256; //声明一个byte类型的变量Android Console.WriteLine("android={0}",android ); //输出byte类型变量Android Console.ReadLine(); }
则会出现以下错误:
这么两个简单的例子,就非常形象的说明了数据类型范围的重要性。
B.浮点类型:
主要处理含有小数的数值类型,主要包含float和double两种类型。
没有特别指定的情况数值默认是double类型,如果需要使用float类型变量时,必须在数值的后面跟随f或F,对其进行强制转换。例如:
float theMySum = 9.27f; //使用f强制指定为float类型 float theMySum = 9.27F; //使用F强制指定为float类型
将float类型转换为double类型也是类似,只要将float写成double,将f或F写成d或D就可以了。
C.布尔类型:
主要用来表示true/false值,大多数被应用在流程控制语句,例如循环语句或if语句等中。
(补充:在定义全局变量时,如果没有指定,整数类型和浮点类型的默认初始值为0,布尔类型为false。)
(2)引用类型
所有被称为“类”的都是引用类型,主要包括类、接口、数组和委托。
下面是使用引用类型变量的一个应用程序:
class Program { class C //创建一个类C { public int Value =0; //声明一个公共int类型的变量value } static void Main(string[]args) { int v1 = 0; //声明一个公共int类型的变量v1,并初始化为0 int v2 = v1; //声明一个公共int类型的变量v2,并将V1赋值给v2 v2 = 927; //重新将变量v2赋值为927 C r1=new C(); //使用new关键字创建引用对象 C r2=r1 ; //使r1等于r2 r2.Value=112; //设置变量r2的value值 Console.WriteLine("values:{0},{1}",v1,v2); //输出变量v1和v2 Console.WriteLine("Refs:{0},{1}",r1.Value ,r2.Value ); //输出引用类型对象的value值 Console .ReadLine (); }
运行结果为:
二、常量
常量就是固定不变的量,而且常量的值在编译时就已经确定了。在C#中,使用关键字const来创建常量,并且在创建常量时必须设置它的初始值,同时,一经设置,不允许修改。
例如:
const doublePI=3.1415926; //正确的声明方式 const int MyInt; //错误:定义常量时没有初始化
此博为大家详细的介绍了变量和常量,对于变量的两种类型:值类型和引用类型,我会在此后的博客中通过一个示例,帮助大家更好的理解值类型和引用类型的区别,敬请期待~
从单位人力专员上学到的一句话:优先招聘德行好并且技术好的;再招德行好但是技术不太好的;再招德行不太好但是技术好的;德行与技术都不太好的不建议招聘。
项目管理者的一项重要技能就是招聘,特此花了几天时间学习了下企业招人的课程,特将学习笔记分享如下:
选人用人过程有哪些陷阱1.没有科学的选人思想和标准
简单地通过一件事情而确定任用某个人,是不可取的。
2.没有全面的考察人才
3.没有建立和运用职位胜任素质的模型
4.缺乏对应聘者的职业人格、道德品质和个人需求进行测试的意识和方法
一个人来公司的核心动机、个人需求和目的,在招聘面试过程中没有很好地解读出来。
5.没有严密的招聘流程,或者没有严格遵循招聘流程
初级与中级可以才能高于德行,但是高级人才一定要德行高于才能(高级人才要做背景调查)
6.缺乏相应的人才测评技术和测试方法
招聘的定义和目的
(一)招聘的定义
招聘是在合适的时间为合适的岗位寻找到合适的人。
(二)招聘的目的
招聘工作的任务或目的,是要寻找具备最适合的技能,而且具有劳动愿望,能够在企业相对稳定地工作,与企业志同道合的雇员。
也就是说,找的人要和企业的价值观相匹配。
招聘选人的职责
招聘的工作包括哪些职责呢?总结如下:
1.招聘宣传活动的策划组织;
2.招聘渠道的拓展与维护;
3.招聘甄选技术的开发与使用;
4.招聘流程的策划与把控;
5.科学的选人策略能为企业增值;
Æ提高成本的效率;
Æ吸引合适人选进入合适岗位;
Æ降低流失率;
Æ帮助企业创建一支高效能的组织。
6.选人等于理念、技术、流程加上策略,最终实现适才适岗;
7.符合现代企业招聘工作的发展趋势;
Æ人力资源招聘工作由战术层次转向了战略层次发展,每一个高层管理者都应当成为一个出色的人力资源规划师;
Æ招聘工作越来越下放到企业各个职能和专业部门,每一个部门经理首先要是一个出色的招聘经理;
Æ人力资源部已经一改过去提供的从头到尾一条龙的服务,转变成向各个部门提供支持,使他们合理有效地实施人力资源相应的招聘计划。
8.建立科学的选人观。
胜任素质模型
在招聘、选人过程中,胜任素质模型的建立和应用、行为面试方法是最重要的和最关键的技术性方法,胜任素质模型是选人的基点、规范和标准,行为面试是有效的选人方法。
冰山模型和素质在北冰洋、南极洲上,都有很多冰山,人们看到的只是冰山的一角,水面下还有巨大的体积来支撑着它。这个模型被应用到人力资源行为原因的分层模型,冰山一角是人员的技能(会做、能做)与知识(知道这么做最合适),水面下面的是:价值观(很重要);自我定位(我该做什么);需求动机(想做什么);人格特质(生来具有)。