对于一个每天大量PV的站点来说,数据库无疑会有相当高的负载,通常我们会采用主从复制、分库、分表、分区的方式来解决单台机器访问更新负载高的问题,最大限度提高应用读取数据速度和并发量。分表分区有很多种方法,比如我们可以这么去做。 private long getDbIndex(long tableIndex) { return (tableIndex >> this.dbSeed); } private long getTableIndex(long id) { return (id >> tableSeed); } private String getTable(long tableIndex) { if (tableIndex == 0) { return this.tableName; } else { return this.tableName + "_" + tableIndex; } } ... // 查询操作 long tableIndex = getTable... more
Category Archives: 技术
flex定义事件的例子
Flex程序中处处可见事件,几乎每一个控件都集成了大量的事件,控件状态的变化会触发的事件,然后我们通过监听事件就能做很多有趣的事情。事件很有用很强大,在flex的编程中可以想象没有事件的日子会是多么灰暗,但我们实际开发的过程中控件提供的事件并不总是够用,在开发的过程中我们常常会自己定义一些事件。自定义事件和自定义皮肤一样是开发者必须掌握的技能。 下面我们看一下如何定义一个简单的事件,然后我们还会看到如何接收我们自定义的事件。 定义事件 package com.tianjiaguo.test.events { import flash.events.Event; public class HelloEvent extends Event { public static const HELLO_START:String = 'helloStart'; ... more
通过solr得到字串的关键词的代码
有时我们会希望得到一段文本中所有的关键词,自己手动的去写这样一个程序是不现实的,因为要处理中文分词的问题,中文分词已经有许多实现我们可以拿过来用,老的比如苞丁解牛(作者已经很久不更新了,而且代码很复杂相当的看不懂),还有如mmseg分词算法,还有中科院的一个分词的算法,算法很多,我们直接可以拿过来用,比如我们可以定义这样的一个接口,然后针对各个分词算法去做相应的实现,但这带来一个问题,这些分词算法我们自己去写相应的实现有些复杂而且并不能通用,我们会希望找到一种方式,当有一种新的更好的分词算法我们要用时,不需要做太多的工作。我们的要求实在是不多,能实现么?of course,sure我们用solr这个工具,它通过简... more
spring mvc源代码
spring是很完善的一套代码,无论是从代码结构还是层次逻辑上,来说都是如此,阅读它的代码可以有很多的启示。就说其mvn的代码,我们可以用它来做我们自己的mvc,用来映射uri到相应的处理方法。我们微博旧的服务器端架构中基于netty实现了几组twitterServer,它处理uri的方法是if … else if … else if … else…,这样带来的问题不仅仅是代码的冗长,可读性的降低。基于if判断来做mvn我们无法得到一个良好的代码结构,代码散落到各处,重构就不是一件容易的事了。(注:netty实现的server已经要被新的rpc框架代替,新的框架基于rmi。) 如果有了spring mvc的代码,我们又可以怎么去做呢?当然netty是没有我们熟悉的reque... more
Facebook图片存储架构技术全解析
Haystack提出了一种通用的基于HTTP的对象存储,它含有指针,映射到存储对象。在Haystack中以指针储存照片,把数以十万计的图像聚集到一个Haystack存储文件,从而消除了元数据负荷。这就使得元数据的开销非常小,并且使我们能够在存储文件和内存索引中存储每个指针的位置。这就使得能用少量的I/O操作来完成图像数据的检索,可以消除一切不必要的元数据开销。 【51CTO独家特稿】照片应用程序是Facebook最流行的功能。直至目前为止,Facebook的用户已经上传了超过150万幅照片,这使得Facebook成为最大的照片共享网站。对于每一个上传的照片, Facebook生成并保存成4种不同大小的图像,即总共有60亿的图片占1.5PB的存储容量。目前的增长速度是每星... more
A Dismal Guide to Concurrency
Carlos Bueno 的博文 2010年4月12日 15:42 油漆工 两个人漆一间房子比一个人要快。蜜蜂们各自独立工作但是会互相传递工作地点的状况。现实世界中显而易见并自然发生的许多形式的并发,实际上与我们现在编写计算机程序的方式格格不入。在假定只有一个处理器、一块内存空间、操作按顺序进行、并且有一个God’s-eye视角来观察内部状态的条件下,编写程序会容易许多。语言是思想的工具,也是一种表达手段,而语言中所包含的一些思维定势,会妨碍我们的思考。[1] 我们正在经历一个计算量的倒转,这让并行和并发能力更加的重要。我们所需要处理的数据量已经超过了单台计算机的计算能力。甚至在一台计算机内部,处理器、内存、磁盘... more
Scaling memcached at Facebook
If you’ve read anything about scaling large websites, you’ve probably heard about memcached. memcached is a high-performance, distributed memory object caching system. Here at Facebook, we’re likely the world’s largest user of memcached. We use memcached to alleviate database load. memcached is already fast, but we need it to be faster and more efficient than most installations. We use more than 800 servers supplying over 28 terabytes of memory to our users. Over the past year as Facebook’s popularity has skyrocketed, we’ve run into a number of scaling is... more
技术工程师的能力与目标
技术工程师的能力与目标 Thursday, Feb 23rd, 2012 by Tim 曾经有这样试验,随机选择一组对象进行工作的自评,几乎所有对象的自评分都在实际成绩的平均分以上。在工程师团队中也不例外,许多工程师有这样的困惑,自己觉得工作已经做得不错,但是上司好像察觉不到,甚至还对自己的工作吹毛求疵。如果有个合适参照标准,工程师或许就可以更好的对自己工作进行自评。 管理者也同样面临类似困惑,在一个组织中,需要定期对团队中的成员进行考核及晋升,但是考核的标准是什么?小团队中主要取决于管理者的意志;大型组织中流程会更规范,但也存在考核者凭感觉来给被评估者打分的情况,或者是考核者心中的衡量标准千差万别。 从工程师自我提升追求及... more
HTTP 协议的客户端编程
在开发服务器端程序时,经常会有需要抓取其它页面的信息或者下载、上传文件的需求,把服务器做为http协议的客户端的工具包有很多,HttpClient、xlightweb、xSoket、netty(主要用于http等协议的服务器端编程,可实现一个高效的服务器)等等,它们都可以用来提供高效的、最新的、功能丰富的支持。 基于这些工具包来实现一个客户端很是容易,我在下面写了些例子: 下面的代码是xlightweb的实现,它简单的抓取页面的内容,然后打到控制台上。 private static HttpClient httpClient; static { httpClient = new HttpClient(); } MultipartFormDataRequest request = new MultipartFormDataRequest("http://localhost:8080/twitter/msplice.do")... more
2011年12月8号之后海溜冰探路行
接连几天的气温都低于零下,因为天气冷所以所有的户外活动基本都得放弃,现在只剩下滑雪和溜冰可做了,溜冰学了有两年了,只去年算是小有成就,基本可以慢慢溜了,今年想多去几次,真正的学会它。所以今天就特地去打探了一下情况。 同去的同学有点不舒服,小睡了一会,我们是下午3点左右出的门,出门的时候天气尚暖和,等我们到了目的地,太阳已经木有了,天气就有些儿冷了。从鼓楼地铁出口上楼梯就感觉到外面的阵阵寒气,好在外面并没有风,所以还好。我们穿过烟袋斜街,直插过去就到了目的地后海。 场地还没有专门开放做溜冰场,但显然大家都按奈不住了。我们看到有好多人在冰上走,于是我们也翻了进去,冰层已经有一定的厚度了,走人是没有... more
SED命令参考资料
Sed is a stream editor. A stream editor is used to per-form basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed’s ability to filter text in a pipeline which particularly distinguishes it from other types of editors. USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor) Dec. 29, 2005 Compiled by Eric Pement – pemente[at]northpark[dot]edu vers... more
ajax及js跨域解决方案
最近做的一个东东需要使用html5上传文件到后端,在本域中根本木有什么问题,但处理文件上上传的后端是在子域名下的,我们知道浏览器因为安全的问题是不允许这个操作的。 那么有没有什么方法能够解决这个问题呢?方法当然是有的,但都不够完美。本处只介绍一种方案,此方案恰能解决我们这个提交上传请求到子域的问题。让我们从头开始吧,下面的代码包含许多的细节,可做为html5上传组件编写的参考: 第一步:创建XMLHttpRequest用于处理上传请求,参考下面的代码: var xhr = new XMLHttpRequest(); 需要注意的是,处理跨域请求返回值时有些特别的地方,见代码: xhr.onreadystatechange = function() { if (xhr.readyState == 4) { ... more
修复G2Magic手机(It is not a menu,It is just a record)
前几天在手机上装了个Rom管理者软件,然后操作者玩呢,结果把机器搞死掉了,这个软件很是奇怪呀,只不过修改目录及文件的权限居然能把系统搞Down,然后呢在刷机的过程又刷错了一个东西,然后spl就由eng s-off变为eng s-on了。当时手机的状况是这样子的:spl为s-on,无法刷新spl;recovery很久之前就已经坏掉,无法刷新rom;现有的版本的spl只支持那个巨难用且占资源的花里胡哨的htc的ROM;十分稀饭的CyanogenMod7无法在这个spl下刷新; 任务很繁重啊,一个一个来解决吧! 准备工作:安装android linux sdk,下载一个linux版本的fastboot,下载现有spl支持的ROM,下载CyanogenMod7的ROM和gapps-gb-20110828-signed.zip,下载需要的spl(同时下载... more