﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-oldworm-随笔分类-从业感悟</title><link>http://www.cppblog.com/oldworm/category/15072.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 21 Jan 2011 10:39:21 GMT</lastBuildDate><pubDate>Fri, 21 Jan 2011 10:39:21 GMT</pubDate><ttl>60</ttl><item><title>关于内存数据库</title><link>http://www.cppblog.com/oldworm/archive/2011/01/21/139015.html</link><dc:creator>袁斌</dc:creator><author>袁斌</author><pubDate>Fri, 21 Jan 2011 05:37:00 GMT</pubDate><guid>http://www.cppblog.com/oldworm/archive/2011/01/21/139015.html</guid><wfw:comment>http://www.cppblog.com/oldworm/comments/139015.html</wfw:comment><comments>http://www.cppblog.com/oldworm/archive/2011/01/21/139015.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/oldworm/comments/commentRss/139015.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oldworm/services/trackbacks/139015.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>关于内存数据库</span></p>
<p>&nbsp;</p>
<p><span>最近要将一些数据放到内存里面做很高的并发操作，考虑了很多方案，</span></p>
<p><span><span>1、&nbsp;</span></span><span>简单点使用</span><span>map hash_map</span><span>等自己管理。</span></p>
<p><span><span>2、&nbsp;</span></span><span>用</span><span>sqlite</span><span>内存表。</span></p>
<p><span><span>3、&nbsp;</span></span><span>用</span><span>fastdb</span><span>内存数据库。</span></p>
<p><span><span>4、&nbsp;</span></span><span>用</span><span>ExtremeDb</span><span>，</span><span>TimesTen</span><span>等。</span></p>
<p><span>比较测试了一下</span><span>123</span><span>，发现还是自己实现速度最快，比</span><span>fastdb</span><span>模式快</span><span>3-5</span><span>倍，</span><span>fastdb</span><span>模式比</span><span>sqlite</span><span>内存表模式快</span><span>10</span><span>倍左右，由于自己实现不具有典型通用性，多线程下访问效率会下降，要管理多线程下各种更新查找等还是比较麻烦的，所以在</span><span>1</span><span>和</span><span>3</span><span>方案之间纠结。</span></p>
<p><span>为了使得决策更好一些，暂时还没做决定，顺便到万方等上面搜索了一些论文来看，看来看去看得真来气啊，虽然都叫内存数据库但各种实现的都有，有用</span><span>gdbm</span><span>来做的，有直接</span><span>map</span><span>管理的，有</span><span>hash</span><span>管理数据的，有</span><span>t</span><span>树管理的，有数组队列管理的，有的明显就是个不大变的东西还弄个啥事务的，靠，刚刚居然还看到一篇鸟文《电网监控系统实时数据库的设计与实现》里面的测试居然是</span><span>1000</span><span>条，插入时间</span><span>80</span><span>毫秒，真可笑啊，区区这么点数据也好意思测，还要花</span><span>80</span><span>毫秒，还自以为很快，这个速度至少可提高</span><span>1000</span><span>倍以上啊，这帮垃圾，写的啥鸟文章，研究个屁啊。</span></p>
<p><span>看完这十来篇论文，俺的思绪又回到</span><span>1999</span><span>年，当年我给别人优化过一个电信计费的软件（看的论文里面有好几篇讲电信计费的），当时有个朋友的朋友拿了个需求过来，</span><span>7000</span><span>万条记录，原来计算费单要花十几个小时吧，我帮他改了下，十来分钟就算完了，朋友很满意，当时的做法很简单，就是弄了个</span><span>mmtable</span><span>，大体就是跟</span><span>map</span><span>类似的东西吧，那个时候</span><span>map</span><span>还没流行起来，俺也不知道，所以就自己弄了个内存表，内部基本就是二分查找了，那个时候我对</span><span>hash</span><span>都不大熟悉，</span><span>B</span><span>树之类的算法刚接触也不会用，就这么个东西当时的电脑也只要花十来分钟，我估计就算是那个老程序放在现在的普通台式机上要不了几秒钟就可算完。也不知道这么几千万条记录的小需求怎么在这帮人眼里就成了什么海量数据，对俺来说跟玩似的，区区几千万嘛，不过是俺拿来测试用的。</span></p>
<p><span>去年中做了个</span><span>md5 hash</span><span>反查的东西，数据都是几百亿到几万亿的，后来的效果就是一个文件可存万亿记录，一次查询平均</span><span>1.2</span><span>次</span><span>IO</span><span>，即使全放在</span><span>SATA</span><span>磁盘上也就十来毫秒而已。</span></p>
<p><span>区区几千万条记录咋就叫什么海量数据呢，海量个毛啊，内存都放得下的叫什么海量，现在服务器动不动都是几十</span><span>G</span><span>内存，区区千万根本算不上什么，查询定位都可到微妙了，</span><span>1</span><span>秒插入至少千万条了，居然还看到</span><span>1000</span><span>条插入的测试，真是不得不佩服国内这帮垃圾研究生的水平，也不知道这种论文咋就能通过审查，只能得出结论他们的老师也都是猪。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>骂归骂自己的问题还需要继续努力，对咱目前的需求来说自己管理数据，即使一个线程都搞得定，因为不过区区几个表，几十万条记录而已，不过这种</span><span>10</span><span>年前咱就会的技术还真是拿不出手，怎么的也得做得更好一点，呵呵，继续研究吧，多线程下内存数据库，从概念上看的确是个很有吸引力的东西，要是性能跟得上，其实在很多地方可以取代普通的数据结构用法了，可以大大减少编程难度，甚至我在想如果有个支持事务的内存数据库，之前设计的</span><span>cad</span><span>类软件的</span><span>undo/redo</span><span>都可以用事务来实现，完全可以抛弃先前设计的复杂结构，其实这种东西即使不用内存数据库就算是用个</span><span>sqlite</span><span>都完全能搞定，唉，往事不堪回首啊，看来数据库方面的确得多花功夫，特别是多线程和分布式模式下的内存数据库。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/oldworm/aggbug/139015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oldworm/" target="_blank">袁斌</a> 2011-01-21 13:37 <a href="http://www.cppblog.com/oldworm/archive/2011/01/21/139015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>吹牛太少，以后要多吹</title><link>http://www.cppblog.com/oldworm/archive/2010/10/03/128475.html</link><dc:creator>袁斌</dc:creator><author>袁斌</author><pubDate>Sun, 03 Oct 2010 06:26:00 GMT</pubDate><guid>http://www.cppblog.com/oldworm/archive/2010/10/03/128475.html</guid><wfw:comment>http://www.cppblog.com/oldworm/comments/128475.html</wfw:comment><comments>http://www.cppblog.com/oldworm/archive/2010/10/03/128475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oldworm/comments/commentRss/128475.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oldworm/services/trackbacks/128475.html</trackback:ping><description><![CDATA[<p><span><span>昨天去见两个老乡，多年的朋友同学，也是搞技术的，大家都在上海，只是交流不是太多，聊起我做过的一些东西，他觉得不大相信，我说我写的远程控制程序全</span><span><span>dll</span></span><span>组成，所有模块可热升级，包括主模块，主模块小于</span><span><span>20k</span></span><span>，他似乎难于相信，我跟他说这个程序还是</span><span><span>2001</span></span><span>年做的，他就更难相信了。后来又说起我最近做的那个云计算的价格查询，他也很难相信底下是云计算，由于没带机器也没法给他看后台服务器，所以我估计他最后还是半信半疑吧。上周另一个朋友说他们老板有个项目十来个人做了</span><span><span>3</span></span><span>年，一直做不稳定，我说给我一段时间我肯定能把他整稳定，后来给他看了我之前做的一些东西，游戏等，似乎他还在怀疑我的能力，这几个其实都算是对我有些了解的朋友了，看来我还是宣传得太少啊。我知道大家都对出身大公司的人有种崇拜，我等一直在小公司混的人没什么人瞧得上，可是我又不能跟他们说哪年哪月，我到某个公司转了下，看了某某写的代码，你所崇拜的人不过如此，哪个工程里面写了个败笔</span><span> <span>&#8230; </span></span><span>等等</span></span></p>
<p><span><span>可能我身边也就合作伙伴、曾经的老板、同事、敌人知道我到底什么水平，</span><span><span>2000</span></span><span>年的时候就带队做几十万行的项目，连续做了几个，为他们申请软件企业奠定基础。云计算的价格查询，</span><span><span>3</span></span><span>周完成，带</span><span><span>2</span></span><span>个客户端的棋牌游戏带了两个朋友一起半年完成，全部模块接口化，模块可单独升级。</span><span><span>Netdongle</span></span><span>，一个</span><span><span>master</span></span><span>、</span><span><span>slave</span></span><span>多重保护的网络验证系统，支持由控制端上传</span><span><span>dll</span></span><span>、</span><span><span>db</span></span><span>等，也就一个月完成。这些程序上线之后就几乎不用修改，一直稳定运行哦，一般的程序要做到第一版版本出去就几乎不出错是很难的，没有一定功力的人是做不到的。</span></span></p>
<p><span><span>昨天吹了下牛，我说</span><span><span>windows</span></span><span>下应用层的软件基本没有做不出来的，或许牛吹得有点大，那朋友惊讶了一下。</span></span></p>
<p><span><span>今年湿疹治好之后发现自己战斗力提升很多，之前做事情总觉得差一口气，精力不济，现在觉得精力充沛，酒也能喝了，活也能干了，速度也快了，也敢出去跟别人交流了，之前一直自卑，没病真好啊。</span></span></p>
<p><span><span>以后要多宣传，多吹牛啊！</span></span></p>
<img src ="http://www.cppblog.com/oldworm/aggbug/128475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oldworm/" target="_blank">袁斌</a> 2010-10-03 14:26 <a href="http://www.cppblog.com/oldworm/archive/2010/10/03/128475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IT行业能说的人太多能做的人太少</title><link>http://www.cppblog.com/oldworm/archive/2010/10/03/128472.html</link><dc:creator>袁斌</dc:creator><author>袁斌</author><pubDate>Sun, 03 Oct 2010 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/oldworm/archive/2010/10/03/128472.html</guid><wfw:comment>http://www.cppblog.com/oldworm/comments/128472.html</wfw:comment><comments>http://www.cppblog.com/oldworm/archive/2010/10/03/128472.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/oldworm/comments/commentRss/128472.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oldworm/services/trackbacks/128472.html</trackback:ping><description><![CDATA[<p><span><span><span>It</span></span><span>行业从业十几年，虽然接触的人并不多，但算上网络上有点交往的人，也不算太少，阅读过无数代码，很容易得出这样的感悟，国内</span><span><span>it</span></span><span>行业能说的人太多，能做的人太少，能说大意就是能说会道，说起来头头是道，从架构到体系到模块到接口都能说得很专业，但实施起来就不行，不但架构做不好，接口定义不清，就连小小模块也未见得可搞定，这样的人实在是太多，之前一直以为一个项目组多几个人总能加快点速度，现在终于明白，一个项目组加几个不合适的人不但不能加速反而要降速，甚至直接导致项目开发失控、失败。关键模块如果让一个不称职的人去负责，最终该模块可能需要耗费核心人员更多时间去修改，甚至要重写，轻则导致项目延时，重则导致项目失败。</span></span></p>
<p><span><span>实施一个成功的</span><span><span>it</span></span><span>项目（只说技术不说市场），概括起来就是一句话：找合适的人做合适的项目。说起来容易做起来难啊，每个人都有他的领域，如果找来一个擅长</span><span><span>a</span></span><span>领域的让他做</span><span><span>b</span></span><span>领域的项目也未必做得好，虽然有的人学习能力超强，但总归是需要时间积累经验的。见过听说过很多开发失败的例子，莫不如此，曾帮人家优化一个电信计费项目，原实施的人只会用数据库，所有的计算全用数据库实现，速度比其对手慢一个数量级以上，将计算需要的数据预装入内存，之后全在内存里面查找计算，速度一下提高了上百倍，修改后速度领先其对手好几倍，其实这个修改很容易，只要几天时间就搞定了，还包括熟悉他们的数据及规则。</span><span> </span><span>还帮别人看过一个棋牌的项目，原项目组十几个人搞了</span><span><span>1</span></span><span>年多，整了</span><span><span>40</span></span><span>多万行代码，结果</span><span><span>bug</span></span><span>不断，一直不能稳定运行，项目组无人能搞得定，我看了之后下的结论是重写，他们傻眼了，还以为改一个项目的时间肯定要少，毕竟写了那么多代码，他们那些外行哪里知道，修改一个漏洞无数的工程哪有重写快啊，这是典型的找了一群不恰当的人做了一个不恰当的项目，几百万投入打了水漂，要是让一个有能力的人设计把关，他那棋牌项目</span><span><span>100</span></span><span>万足够开发得出来了。</span></span></p>
<p><span><span>刚毕业那会做项目的时候带过几个水平较差的手下（都是俺领导招的人），他们最常说的话是&#8220;优化&#8221;，我把某某地方&#8220;优化&#8221;了一下，呵呵，外行要听到这个还以为真的是优化呢，其实很多时候他只是改写了一下，是不是算优化还值得商量，大多数时候都算不上优化，有的时候还改错引入了更多</span><span><span>bug</span></span><span>。对高手来说更喜欢说重构，我把某某模块重新设计了一下，以前模块有哪些缺陷，重新设计一下之后这些缺陷就不存在了，还有某某好处，等等，高手着眼于大局，低手只能看到一个小角落，高手优化关键之处，低手优化无关紧要之处。看豆瓣网技术发展，就是一个不断重构的过程，看</span><span><span>qq</span></span><span>从</span><span><span>98</span></span><span>年开始到现在的蜂鸟内核，大的重构就</span><span><span>3</span></span><span>次了，完全重写</span><span><span>3</span></span><span>次了。最近迅雷终于官方承认</span><span><span>v6</span></span><span>开发失败，我之前在群里表达过我的观点，我估计他们</span><span><span>v6</span></span><span>是开发失败了，所以一直以</span><span><span>v5</span></span><span>顶着，现在等到</span><span><span>v7</span></span><span>出来终于承认了，这种自诩市值超</span><span><span>100</span></span><span>亿美刀的公司这么长时间的开发还能失败，就不要说小公司小团队了，见光死的项目很多，未见光死的项目更多。</span></span></p>
<p><span><span>国内真正懂得开发的老板很少，大多数老板觉得一个人开</span><span><span>5w 10w</span></span><span>的月薪太高了，这个待遇找</span><span><span>1w</span></span><span>的能找好几个呢，其实他们不知道，</span><span><span>it</span></span><span>行业一个重要的人能顶</span><span><span>100</span></span><span>个普通的人，甚至不可比较，因为一个普通的人去做一个项目可能根本不能完成，成功为</span><span><span>0</span></span><span>，</span><span><span>1</span></span><span>：</span><span><span>0</span></span><span>这个比值是无穷大啊，可惜等老板们失败了几个项目之后才能悟出这个道理，</span><span><span>it</span></span><span>项目做得好和做不好的差别不是差一点的问题，而是</span><span><span>1</span></span><span>和</span><span><span>0</span></span><span>的问题。俗人总是忙忙碌碌，天天维护自己前一天制造的</span><span><span>bug</span></span><span>，看起来很敬业，高手总是懒懒散散，因为</span><span><span>100</span></span><span>天后可能出现的问题都已经了然于胸，于是整天看起来无所事事时，不懂的老板很可能青睐于前者而打压后者。也正因为能说的人太多，懂行的老板又太少，所以使得整个行业充斥着浮躁和急功近利，很多关键职位其实只是个鹦鹉在顶着，有能力的人被压制，悲哀啊。千里马难找，伯乐更难找啊。</span></span></p>
<img src ="http://www.cppblog.com/oldworm/aggbug/128472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oldworm/" target="_blank">袁斌</a> 2010-10-03 14:24 <a href="http://www.cppblog.com/oldworm/archive/2010/10/03/128472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>