December 1, 2010
BTree,B-Tree,B+Tree,B*Tree都是什么
"B树 即二叉搜索树:\n1.所有非叶子结点至多拥有两个儿子(Left和Right);\n2.所有结点存储一个关键字;\n3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;\n如:\nB树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键 字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;\n如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树 结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;\n如:\n但B树在经过多次插入与删除后,有可能导致不同的结构\n右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结 构,和避免右图的结构,也就是所谓的“平衡”问题;\n实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树结点分布均匀的平衡算法是平衡二叉树的关键; …"
November 30, 2010
NOSQL数据库–HBase简介
"最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL数据库,最终决定采用HBase。在这里,我就向大家分享一下自己对HBase的理解。\n在说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到 底有多少,说不定今天你的用户还少,明天系统用户就变多了,结果您的系统应付不过来了了,不干了,这岂不是咱哥几个的悲哀,说时髦点就叫“杯具啊”。\n其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的。从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性,而传统企业级应用都是比较看重数据完整性和数据安全性。那么我们就来说说互联网应用伸缩性这事儿.对于伸缩性这事儿,哥们儿我也写了几篇博文,想看的兄弟可以参考我以前的博文,对于web server,app server的伸缩性,我在这里先不说了,因为这部分的伸缩性相对来说比较容易一点,我主要来回顾一些一个慢慢变大的互联网应用如何应对数据库这一层的伸缩。\n首先刚开始,人不多,压力也不大,搞一台数据库服务器就搞定了,此时所有的东东都塞进一 …"
November 30, 2010
NOSQL中Cassandra与HBase的比较,及我们迁移系统的原因
"原文地址:http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved\nHBase vs Cassandra: why we moved\n下文中将讨论为何选择Cassandra作为我们的NOSQL方案。\n是否Cassandra的血统预言了未来?****\n我发现在软件问题上,我们先去考虑上层问题而不是直接深入到细节,可以节约大量时间。在选择HBase还是Cassandra上我也遵循了这一信条。HBase还是Cassandra具有完全不同的血统和基因,这决定了他们在我们应用的可行性。\nHBase及其支持系统源自Google的GFS和BigTable设计;而最初由Facebook开源出来的Cassandra采用了BigTable的数据模型,确实是用类似Amozon的Dynamo的存储系统(实际上Cassandra最初的开发工作都是由两个原Dynamo工程师开发的)。\n在我看来,他们的根源决定了HBase更适用于数据仓库和大规模数据处理分析(比如对Web建索引),而Cassandra更适用于实时事务处理和处理交互性 …"
November 26, 2010
配置php支持sqlite数据库
"php5-windows默认已经包含了sqlite模块,但没有启用\n如果需要支持sqlite,则修改php.ini\n启用三个扩展语句\nextension=php_pdo.dll\nextension=php_pdo_sqlite.dll\nextension=php_sqlite.dll (可能不是必须的,但最好一起啦)\n我第一次只开了下面两个,因此始终无法启用,测试程序会报错\nFatal error: Call to undefined function sqlite_open()\n也就是sqlite没有成功启动"
November 24, 2010
Memcache mutex设计模式
"周六的S2 Web 2.0技术沙龙上介绍了memcache中使用mutex场景(文后要演讲稿),有网友对详情感兴趣,简单介绍如下。\n场景 Mutex主要用于有大量并发访问并存在cache过期的场合,如\n首页top 10, 由数据库加载到memcache缓存n分钟 微博中名人的content cache, 一旦不存在会大量请求不能命中并加载数据库 需要执行多个IO操作生成的数据存在cache中, 比如查询db多次 问题 在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险。我们曾经在线上系统出现过类似故障。\n解决方法 方法一 在load db之前先add一个mutex key, mutex key add成功之后再去做加载db, 如果add失败则sleep之后重试读取原cache数据。为了防止死锁,mutex key也需要设置过期时间。伪代码如下 (注:下文伪代码仅供了解思路,可能存在bug,欢迎随时指出。)\nif (memcache.get(key) == null) { // 3 min …"
November 24, 2010
Twitter系统运维经验
"最近看到的另外一个介绍Twitter技术的视频[Slides] [Video (GFWed)],这是Twitter的John Adams在Velocity 2009的一个演讲,主要介绍了Twitter在系统运维方面一些经验。 本文大部分整理的观点都在Twitter(@xmpp)上发过,这里全部整理出来并补充完整。\nTwitter没有自己的硬件,都是由NTTA来提供,同时NTTA负责硬件相关的网络、带宽、负载均衡等业务,Twitter operations team只关注核心的业务,包括Performance,Availability,Capacity Planning容量规划,配置管理等,这个可能跟国内一般的互联网公司有所区别。\n1. 运维经验 * Metrics Twitter的监控后台几乎都是图表(critical metrics),类似驾驶室的转速表,时速表,让操作者可以迅速的了解系统当前的运作状态。联想到我们做的类似监控后台,数据很多,但往往还需要浏览者做二次分析判断,像这样满屏都是图表的方法做得还不够,可以学习下这方面经验。 据John介绍可以从图表上看到系统的瓶颈-系统最弱 …"
November 24, 2010
是用js 实现 图片“另存为” 最后怎样实现的? (FireFox没有测试过)
"使用JS实现单击连接保存图片 2种形式都可以 第一种: \u0026lt;script\u0026gt; function SaveAs5(imgURL) ...{ var oPop = window.open(imgURL,\u0026#34;\u0026#34;,\u0026#34;width=1, height=1, top=5000, left=5000\u0026#34;); for(; oPop.document.readyState != \u0026#34;complete\u0026#34;; ) ...{ if (oPop.document.readyState == \u0026#34;complete\u0026#34;)break; } oPop.document.execCommand(\u0026#34;SaveAs\u0026#34;); oPop.close(); } \u0026lt;/script\u0026gt; \u0026lt;img src=\u0026#34;t_screenshot_17616.jpg\u0026#34; id=\u0026#34;DemoImg\u0026#34; border=\u0026#34;0\u0026#34; onclick=\u0026#34;SaveAs5(this.src)\u0026#34;\u0026gt; 第二种: …"
November 24, 2010
JS打开图片另存为对话框
"New Document\nfunction downLoadImage(imagePathURL){\n//如果中间IFRAME不存在,则添加 if(!document.getElementById(“_SAVEASIMAGE_TEMP_FRAME”)) jQuery(‘ width=”0″ height=”0″ src=”about:blank”\u0026gt;’).appendTo(“body”);\nif(document.all._SAVEASIMAGE_TEMP_FRAME.src!=imagePathURL){ //图片地址发生变化,加载图片 document.all._SAVEASIMAGE_TEMP_FRAME.src = imagePathURL; }else{ //图片地址没有变化,直接另存为 _doSaveAsImage(); } } function _doSaveAsImage(){ if(document.all._SAVEASIMAGE_TEMP_FRAME.src!=”about:blank”) …"
November 23, 2010
js里面如何获取网络地址的图片的高度和宽度 (变通办法)
"原图片是 :\n(function(){ var img=document.createElement(‘img’);//创建一个img元素 img.src=”http://gg.blueidea.com/2008/blueidea/flash2008.gif”;//指定src img.style.position=”absolute”;//防止正常的内容变形 img.style.visibility=’hidden’;//藏起来 var inj=document.getElementById(‘box’).appendChild(img);//插入到box中。当然插入到document.body也可以 alert(‘宽:’+inj.offsetWidth);//然后就可以通过 offset 取得宽和高了 alert(‘高:’+inj.offsetHeight); })();\n简单地说就是把图片放入一个自动伸缩的DIV中,然后获取DIV的宽和高!"
November 23, 2010
Allowed memory size of 8388608 bytes exhausted解决方法
"出现该错误的原因:\n是因为php页面消耗的最大内存默认是为 8M (在PHP的ini件里可以看到) ,如果文件太大 或图片太大 在读取的时候 会发生上述错误。\n解决办法:\n1,修改 php.ini 将memory_limit由 8M 改成 16M(或更大),重启apache服务\n2,在PHP 文件中 加入 ini_set(”memory_limit”,”100M”);\n注意:为了系统的其它资源的正常使用 请您不要将 memory_limit设置太大,其中-1为不限\n3,修改.htaccess 文档(前提是该目录支持.htaccess) 在文档中新增一句:php_value memory_limit 16M(或更大)"