分类目录归档:杂文

记录一些唠叨,琐碎的事。

大数据下的分页count引起的性能瓶颈及解决思路

在大部分系统里,数据呈现的时候都或多或少需要对数据进行分页处理之后再呈现,在数据量没有达到一定级别之前。无论如何实现分页都不会出现问题,而且分页实现的思路多种多样【sqlserver系统里使用ROW_NUMBER可以很方便的实现分页】,一旦数据量达到一定的级别之后,就会明显感觉到分页在呈现数据的时候有明显的延迟,产生性能瓶颈的根本原因是获取总记录数使用了聚合函数count,而又没有其它可以替代的方式。只能根据业务的进行简单的调整,使其能满足业务的需要。并没有打算实现一个完整的分页例子,也并不打算实现一个分页存储过程,只是将如何调整一个分页缓慢系统的思路整理了一下,大部分思路都是来自网路。 第一种: 这种方法最简单,也是最不灵活的一种,如果只是想要得到一张大表的总记录数,该方法是比较快速的。假如要获取某些条件的总记录数,该方法就不可行了。例子如下: SELECT rows FROM sysindexes WHERE id=OBJECT_ID(‘要查询的表名’) AND indid=1 第二种: 这种方法比较简单,并且也比较灵活。就是对获得的总记录数进行缓存。既然要缓存总记录数,一般都是key-value,value就是总记录数,以什么作为key,可以是传递过来的url,根据参数的不同进行缓存,使用该方法要将page参数过滤掉,也可以是根据获取总记录数的sql语句,对sqlcount字符串进行md5加密作为key【这种方法有个弊端,就是假如sql语句写的不够规范,随意的大小写或者相同几个where条件任意变换位置,获得的md5字符串将不一样】,可以将数据保存到应用程序内存中,也可以保存到文件中,还可以保存到数据库中,设置一个简单的过期策略。使用md5作为key的话,还可以将sql语句一并保存,这样还可以定时或者服务器空闲时更新相应语句的总记录数。 第三种: 对于只有上一页和下一页的分页思路,这种分页其实是不需要获得总记录数的。例如每页要显示20条记录,每次获取的时候只需获取21条,显示还是显示20条,判断一下获取的记录数只要大于20,就显示下一页即可。这种分页方式是最高效的。 第四种: 利用Set Rowcount函数快速滚动到我们要行数,并将id记下,进行分页。 DECLARE @page INT DECLARE @pagesize INT DECLARE @startindex INT DECLARE @id int SET @page=1 SET @pagesize=48 SET @startindex=(@page-1)*@pagesize+1 SET ROWCOUNT @startindex SELECT … 继续阅读

发表在 Net, 杂文 | 评论关闭

22条日常技巧助程序员提高工作效率、节约时间

我一直在测试和调整各种生产效率的技术,在过去的五年中,阅读了大量的书籍(其中大多数是重复的) ,这里是我的一些结论: 这不是一个关于时间的问题,而是关于精力。 为了“有效率”,我们试图在一个工作日内塞进尽可能多的小时,但最终一切都更多地取决于你的注意力,积极性和良好状态(这些都是直接与精力等级联系在一起)而不是工作时间 。 我最近在葡萄柚的一个内部演示上提及了我提高效率的想法,结果性的演示是在Slideshare上的:producitivity porn. 其中一些关键结论: 1. 决定什么是重要的事,因为在5年之内,你现在做的80%的事情都不会有任何结果。那只是无用功,没有有用的结果。 2. 睡眠,饮食和运动可以让你的成果提高到三倍,因为他们可以帮助你增强你的注意力,动力和精力水平。 3. 两分钟法则:如果你可以在两分钟内做完一件事(比如回复邮件或是一个家务),那就现在做。计划着一会儿完成它,记着它,并在未来完成它会花费五分钟甚至更多的时间。 4. 五分钟法则:治疗拖延症最好的办法不是定目标去完成一个可怕的大任务,而是只在那件事上花五分钟。你会发现在大多数情况下,它在超出五分钟的时候依旧很顺利,因为你进入了平坦期。 5. Seinfeld生产链:如果你想做好一件事,那就每天去做。包括圣诞节,复活节和审判日。没有例外。 6. 微小的生活习惯:与五分钟法则高度结合起来,你可以很快地形成好习惯。这个很有用,我测试过的。 7. 你的记忆力烂透了。 即使你是一个天才也要把每件事都从你的脑子里清出来。把他们写在一个笔记本上,放进待办事项列表的应用程序里,记在手机里,或是告诉Siri,我不在意你使用的方法。 8. 尽量少使用工具。我曾经测试过大多数代办事件管理器,并最终保持使用Cultured Code的Thing app和谷歌日历(iCal 是不错,但是谷歌日历和我的默认客户端Gmail结合得很好)。如果你了解了下一条规则,你用什么就并不重要了(铅笔或是钢笔都是可以的)。 9. 规则强于工具。你需要纪律,这对我来说意味着两件事:我每天早晨做得第一件事是计划我的一天,并且我每天都写一个简短的工作日志。这有助于帮助我保持清醒,有良好的优先级排序,去掉无用的任务,并且做有意义的事情。这节约了我很多时间。 10. 番茄计时器,这是一个时间盒。在30分钟内只做手头的事情,不做任何其他的事情:没有电话,邮件,不和别人说话,没有社交网站。除了记得在发生火灾时从楼里跑出来外,没有别的了。(可参见这篇译文《番茄时间管理法:一个番茄是如何让你工作更有效率的》) 11. 总是带着耳机。 你没必要在听音乐,但是这会阻碍别人接近你。 12. 邮箱调度和收件箱清零。不要把查邮箱当做你一天里的第一件事,也不要在晚上看它(这件事毁掉了我的很多个晚上),试着一天只查三次:早上十一点,下午两点和下午五点。你的收件箱并不是一个待办事项列表。把它清空:每一封邮件都应该是一个可操作的任务(把它和待办列表连在一起),或是一个参考文献(把它发到Evernote或存档),或是现在就应该删掉。 13. 对手机来说也是一样的。不要总是能被联系到,我总是把手机静音,并分批回电话。 14. 把小事情分批,比如邮件,电话,或是facebook等等。 15. MI3,最重要的三件事(或是改成一件必做的,3件应该做的,或是五件可以做的)。早晨开始做最重要的一件事。 16. 意志力是有限的。不要认为在你遇到麻烦的时候意志力会帮你。把最重要的事情放在早晨做,并且尽可能地让所有事情自动化(委托,分批等等)。美国总统不需要每天选择他们的菜单和衣服颜色,否则他们的意志力会在晚些他们需要按下(或不按)红色按钮时耗尽。 17. 最有驱使力的事情。总是问问自己,你现在能做的最有驱使力的事情是什么,然后应用规则14。 18. 经常推出新产品。不要过分地润色它。就像他们在创业公司圈所说的,“如果你不因你的产品感到难堪,你已经推出得太晚了。” 19. 压力会带来奇迹。使用奖励或是社会承诺。我们最近在新的葡萄柚网站上实施了这一点。之前的那个网站投入使用花了两年半的时间,而新的这个只花了两天半,我们用了一个周末进行编程马拉松(外加周一)。 20. 有计划的拖延。你的大脑需要休息,并且有时候新一期的绿箭侠可以比最好的TED演讲创造更大的奇迹。 21. 删除,说不,忽略,不要坚守日程表。我喜欢最后一点,它来自于马克·安德森,因为这样可以让他立即见任何他想见的人。这样很多人会恨你,但是你有时间做相关的事情。你认为你会在20年后后悔这样做吗?或是为了一些人做一些你不在意的事情,只是为了表面上的赞赏。 22. 假装无能。这是一个应用之前规矩的很有策略的方法。 这次就到这里,我的拖沓休息结束了,我要回去工作了。 … 继续阅读

发表在 杂文 | 评论关闭

ThoughtWorks

发表在 杂文 | 评论关闭

如何练就高效执行的本领

能否执行好任务是一个人能否被上司器重和提拔的最基础的条件,因此要实现快速提升就必须练就高效执行任务的本领.不管是下属,还是自己创业,都需要具有”把想法变成行动,把行动变为结果”的这样一种被称为执行力的能力.前者是把上级的指令变为现实,后者把自己的愿望变为现实.有的人想法很多,但不愿做或不会做,很难把上司的指令[或自己的想法]变成现实;有的人脚踏实地,通过一系列的努力,最终能够把一个一个的指令或想法变成现实.前者是执行力差的人,后者是执行力强的人.精益执行力就是把快速提升和致富发达这样一种愿望通过一系列的努力,最终变为现实的过程.因此,希望快速提升和致富发达的人一定要具备非常强的执行能力. 精益执行力是执行力概念的进一步发展,就是以较少的投入,快速执行.快速执行的作用是不言自明的,因为现在我们已处于一个”快鱼吃慢鱼”的时候.我们也每时每刻都在感受速度所给予的压力,它象一张无形的网把我们每个人都牢牢地套在网中央.世界处于高速旋转中,不管喜欢不喜欢,要想成功发展,必须加速旋转.要想在新时期拥有竞争的优势,必须遵从新的规则:尽量用最少的资源完成最多的事情.并且要加速完成.也就是人们说的达到事半功倍的效果,既精益的完成.

发表在 杂文 | 评论关闭

Hacking, Everyone

送给每一个创业人的一句话:Hack, everything! 这句话我常常说,但是似乎一直没有好好的解释一下它的意思,我想我们今天就来聊聊这个话题。首先,我们得先定义一下「Hack」,Hack 这个字当名词用时的意思,维基百科是这么说的: A hack is a solution to a problem, doing a task, or fixing a system (whether hardware or software) that is inefficient, inelegant, or even unfathomable, but which nevertheless (more or less) works. 翻成中文就是: Hack 是问题的解法、一个任务,或是修理系统的方法,当这个方法不太完整、有点丑、甚至 … 继续阅读

发表在 杂文 | 评论关闭