数据底层架构(一)

随着数据的快速增长,分表,分库,memcache,redis,mongodb,hadoop,bigtable等,各种解决方案呼之欲出。

经过测试,在mysql中,无论如何加索引,数据超过百w时,查询起来耗时很明显。

因此mysql分表分库+memcache+redis也不失是一个完美解决方案。

由于redis不支持复杂查询,redis的读取性能还是赶不上mem这些劣势,因此才需要一些搭挡。

流程

从CRUD看底层架构。

插入数据

一般情况下,对用户是没有必要分表的,用户的文章或者微博才分表,毕竟用户表和微博表是无法比拟,不一个等级的。

插入时,任何表,mysql只存储索引字段,其它数据存储在redis上。

文章表可按一定规则进行静态分表,比如按用户id分100张表,每个用户发的文章都会路由到同一张表中。

数据总数需要一个单独的字段存储在redis中,每个用户都有一个key进行存储文章总数。

有时总数数据会与实际总条数有所不同,因此需要定期执行mysql count进行更新redis中的总数。

下面是分表路由,把uid对100取余:

protected function getTableName($name, $id=null) {
   $tableName = self::SYS_DB_PREFIX . $name;
   if (is_numeric($id) && $id > 0)
       return $tableName . '_' . ($id % $this->tableNum);
} 

查询数据

每第一次数据查询时,根据mysql中的索引从redis查询,需要将查询结果存储在memcache中,下次查询直接从memcache获取。

查询某人文章时,直接从一张表中进行limit查询。

关于动态页面查询,比如登录后的豆瓣首页,会有一些动态好友的更新信息。这些信息是存储在一张临时表中的,只保存10天的更新。

删除数据

整个系统无任何实际操作,只进行字段状态修改。

修改数据

修改数据时,需要更新对应的memcache。

分库

当系统应用更加复杂时,一台数据库服务器的压力是很大的,可根据系统的业务流进行分库,比如文章一个独立库,评论一个独立库等。

更复杂的搜索

比如招聘网站中的,按地点,按行业,按规模等更多条件查询时,就需要一定的搜索系统来完成,这里不做更多搜索细节讨论。

Published: 2011-12-30 — Comments

圣诞节的神学

新东方老师王强认为,神学可以让人们理解超越人性的东西,获得一种上帝般的眼界,达到一种超尘脱俗的境界,也会更多了解宇宙的神秘。

明天是2011年12月25日,在NBA停摆半年即将打响的同时,聊聊耶稣及相关的话题:

圣诞节是耶稣出生的日子

耶稣是名,基督是职称和头衔。

耶稣是以色列犹太人(二战时的屠杀应该与此是有些关系的),根据百科记载:耶稣在各个教派中的地位和认识是大相径庭的。

圣经中的耶稣生平

基督教认为耶稣就是神,要尊重他,要听他的指示。(也难怪早期的欧洲利用这点进行统治)

教课书是,《圣经》即bible,里面有很多搞笑的段子,比如:神说要有光,就有了光。

古兰经中的耶稣

作为伊斯兰教中的教课书《古兰经》,还是承认耶稣存在和具有一定能力的,它认为耶稣是伊斯兰教六大先知之一,仅次于至圣先知、封印使者穆罕默德。承认他无父出生,肉身升天,但不承认他是真主的独生子,也不认为他曾经死而复活。(把耶稣当老二,也难怪十字军东征打了那么年)。

塔木德中的耶稣

塔木德是犹太人至死研读的书,是犹太教的必修课,它对耶稣教这样描述的:

耶稣在埃及学会了魔法。他成为了欺骗并使以色列迷失的魔法师。他取笑智者们的话,污染上了异端,并因此被逐出教会。他称他自己即是神也是人子,并说他会升天堂。他说天国近了,还吸引了5名门徒。他在罗多成为骗子和叛教教师。

犹太人把耶稣当作叛徒,(二战时的屠杀的原因也不言而喻了,希特勒是基督教徒),说起叛徒二字,突然想起国际共产主义和我党的关系。

耶稣的贡献

耶稣斥责犹太教的民族偏见,他称赞一个因扶贫济困而被犹太教徒歧视的撒马利亚人。他认为人的生命比全世界的财富更宝贵,主张信徒之间要彼此相爱。说白了,主要是教人学会爱。

尤其对尊严和人权,民主和政治,教育和慈善,科技和经济,家庭和道德方面都是有巨大贡献的。从人类历史来看,基督教对于道德的提升,远超过其他一切力量。如果耶稣没有来,十诫的影响只停留在犹太人中;北欧人仍然是海盗;亚洲、非洲、美洲的野蛮民族,没有人敢去接触。

撒旦教

撒旦誓与耶稣为敌,因此撒旦教也被基础教称为邪教。撒旦教也有多种教派,哲学教派还是具有一定研究价值的。

据说马克思是信撒旦教的。

十一诫

  1. 除非你被询问,否则不要发表意见或给予建议. (自觉)
  2. 除非你确定别人想听,否则不要对别人诉苦. (尊重)
  3. 在别人的地盘中,要显示对他的尊敬,否则别去那里.(尊重)
  4. 如果一个客人在你的地盘惹恼了你,不要仁慈,要残忍地对待他.(原则)
  5. 不要与别人发生性行为,除非你得到了发生关系的信号. (自律)
  6. 不要拿不属于你的东西,除非这对其他人是种负担,且他们哭求着解脱.(计谋)
  7. 答谢能让你成功的达成你的欲望的神奇能力.如果你在获得他赐与的成功后,否定这神奇的能力,你会损失所有你获得的东西. (感恩)
  8. 不要抱怨不关你事的事.(自觉)
  9. 不要伤害小孩. (仁慈)
  10. 不要杀害不是人类的动物,除非你被它们攻击,或你是为了得到食物. (仁慈)
  11. 当走在公共的地方,不要打扰别人. 如果某人打扰了你, 要求他停止. 如果他不停止,就揍扁他.(原则)

信念

1.没有神,人就是神 2.神不过是世界上的一般能源,人可以取为己用 3.神就是我自己

总结

不信教,但一定要去了解各种教派的教义和主张,这样才能领悟到像王强老师说的超凡脱俗。

参考:

http://zh.wikipedia.org/wiki/%E5%9C%A3%E8%AF%9E%E8%8A%82

http://zh.wikipedia.org/wiki/%E8%80%B6%E9%85%A5

Published: 2011-12-24 — Comments

别对我撒谎

无须测谎仪,无须确凿证据,甚至无须声音,多数情况下只凭细微的表情变化便可判断的一个人说谎与否,这便是lightman 博士的高超本领。

lightman博士供职于一家私人机构,该机构专事微表情的研究,对谎言的判定具有绝对的权威性。当FBI、警察或者民间机构遇到悬而未决的问题之时,便是莱特曼博士及其团队大展身手的好时候。他们凭借丰富的经验和谨慎的作风戳穿一个又一个谎言,将事实真相还原。在他们面前,任何说谎者都无处遁形。

Truth or happiness, never both

故事是根据Paul Ekman博士的真人真事改编而成,与之相关著作有《情绪的解析》

据Ekman统计,人在10分钟内,会平均说三次谎言,前提是问对问题。

主角

重要的不是撒谎,而是为什么要撒谎

几种基本表情

face face face face face face face

如何看出是否撒谎

1.越受欢迎的孩子,越会说谎。源于一个受欢迎女孩被替考参加SAT的故事。

2.对问题的生硬重复是典型的撒谎。多处情节都有所提及。

3.男人想要隐瞒事情的时候,鼻子会痒。男性鼻子下方有海绵体,摸鼻子代表想要掩饰某些内容。(作为一个男人,我表示怀疑)

4.说谎者很容易编出在一天内干的什么,但很难倒序的给讲出来。(同事表示非常赞同)

5.撒谎时会摸脖子。(skeptical)

Published: 2011-12-22 — Comments

高情商者的十大习惯(译)

1. Label their feelings, rather than labelling people or situations.

"I feel impatient." vs. "This is ridiculous"

"I feel hurt and bitter". vs. "You are an insensitive jerk."

"I feel afraid." vs. "You are driving like a idiot."

说出对他人的感受要比指责别人的身份地位要好

我等不及了 vs 这太搞笑了

我感觉很受伤和痛苦 vs 你是一个超级大笨蛋

我有点害怕 vs 你就是一个大傻瓜

2. Distinguish between thoughts and feelings.

Thoughts: I feel like…& I feel as if…. & I feel that

Feelings: I feel: (feeling word)

能够区分想法和感受

想法:我觉得好像...,我感觉好像...,我感觉像...

感受:我感到...

3. Take responsibility for their feelings.

"I feel jealous." vs. "You are making me jealous"'

对别人的感受要有责任感,不要太直接

我有点吃醋 vs 你让我吃醋了

4. Use their feelings to help them make decisions.

"How will I feel if I do this?" "How will I feel if I don't"

用别人的感受帮他们做决定

如果我做了,能怎么样呢 vs 如果我不做,结论又如何呢?

5. Show respect for other people's feeling.

They ask "How will you feel if I do this?" "How Will you feel if I don't."

尊重他人的感受

他们问:“如果我做了,你感觉会怎么样?” vs “如果我不做,你又能怎么样?”

6. Feel energized, not angry.

They use what others call "anger" to help them feel energized to take productive action.

保持青春活力,不要经常生气

他们用愤怒的方式帮助别人感受活力,以此带动生产。

7. Validate other people's feelings.

They show empathy, understanding, and acceptance of other people's feelings.

会验证别人的感受

要会换位思考,理解和接受他人的感受

8. Practice getting a positive value from their negative emotions.

They ask themselves: "How do I feel?" and "What would help me feel better?"

They ask others "How do you feel?" and "What would help you feel better?"

能从别人消极的情感中获取积极的价值

他们问自己 “我感觉如何?” vs “什么帮助我感觉更好”

他们问别人“你感觉如何” vs “什么让能帮你感受更好”

9. Don't advise, command, control, criticize, judge or lecture to other.

They realize it doesn't feel good to be on the receiving end of such behavior, so they avoid it.

不要建议,命令,控制,批评,决定和教导别人

他们意识到让别人接受这些行为感觉不太好,因此避免使用

10. Avoid people who invalidate them, or don't respect their feelings.

As much as possible, they choose to associate only with bother people with high EQ.

避免与低智商的人相处,但要尊重他们的感受

尽一切可能,他们选择与高智商的人相处

参考:http://peterfox.com.au/mind_emotional_intelligence.htm

Published: 2011-12-16 — Comments