<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技术博客</title>
	<atom:link href="http://www.dytaobao.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dytaobao.com/blog</link>
	<description>心不动，万物皆不动，心不变，万物皆不变</description>
	<lastBuildDate>Thu, 17 May 2012 05:12:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>史上最快消息内核——ZeroMQ</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1257.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1257.html#comments</comments>
		<pubDate>Thu, 17 May 2012 05:12:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1257</guid>
		<description><![CDATA[ZeroMQ是一个很有个性的项目，它原来是定位为“史上最快消息队列”，所以名字里面有“MQ”两个字母，但是后来逐渐演变发展，慢慢淡化了消息队列的身影，改称为消息内核，或者消息层了。从网络通信的角度看，它处于会话层之上，应用层之下，有了它，你甚至不需要自己写一行的socket函数调用就能完成复杂的网络通信工作。 借用官方的例子： 客户端（发送N个“Hello”消息到服务端，接受回应）： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 // //  Hello World client //  Connects REQ socket to tcp://localhost:5555 //  Sends "Hello" to [...]]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1257.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sphinx是什么</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1255.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1255.html#comments</comments>
		<pubDate>Thu, 17 May 2012 05:10:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1255</guid>
		<description><![CDATA[Sphinx 是一个基于 GPL 2 协议颁发的免费开源的全文搜索引擎.它是专门为更好的整合脚本语言和SQL数据库而设计的.当前内置的数据源支持直接从连接到的 MySQL 或 PostgreSQL 获取数据, 或者你可以使用 XML 通道结构(XML pipe mechanism , 一种基于 Sphinx 可识别的特殊xml格式的索引通道) Sphinx 全文索引的主要特性: 1. 高速建立索引 (在使用主流CPU的情况下 , 可达10M/秒) 2. 高速查询 (在 2-4 GB 的文本里查询平均耗时在 0.1 秒以内) 3. 高扩展性 (单CPU支持高达100G的数据文本,1亿条记录) 4. 支持分布式检索 (0.9.6版起) 5. 原生支持Mysql (MyISAM 和 InnoDB 表都被支持) 6. 支持表达式查询 7. 支持相近词组排名，提供良好的相关查询 8. 支持英文,俄文词干提取和音标查询 9. 支持任意数量的文档字段 (可以查询时修改权重) 10.支持文档组 [...]]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1255.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>分布式文档存储数据库 MongoDB</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1254.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1254.html#comments</comments>
		<pubDate>Thu, 17 May 2012 05:09:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1254</guid>
		<description><![CDATA[MongoDB是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。他支持的数据结构非常松散，是类似json的bjson格式，因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能，而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用，存储数据非常方便。主要功能特性有： 面向集合存储，易存储对象类型的数据。 模式自由。 支持动态查询。 支持完全索引，包含内部对象。 支持查询。 支持复制和故障恢复。 使用高效的二进制数据存储，包括大型对象（如视频等）。 自动处理碎片，以支持云计算层次的扩展性 支持RUBY，PYTHON，JAVA，C++，PHP等多种语言。 文件存储格式为BSON（一种JSON的扩展） 可通过网络访问 所谓“面向集合”（Collenction-Orented），意思是数据被分组存储在数据集中，被称为一个集合（Collenction)。每个 集合在数据库中都有一个唯一的标识名，并且可以包含无限数目的文档。集合的概念类似关系型数据库（RDBMS）里的表（table），不同的是它不需要定 义任何模式（schema)。 模式自由（schema-free)，意味着对于存储在mongodb数据库中的文件，我们不需要知道它的任何结构定义。如果需要的话，你完全可以把不同结构的文件存储在同一个数据库里。 存储在集合中的文档，被存储为键-值对的形式。键用于唯一标识一个文档，为字符串类型，而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON（Binary Serialized dOcument Format）。 MongoDB服务端可运行在Linux、Windows或OS X平台，支持32位和64位应用，默认端口为27017。推荐运行在64位平台，因为MongoDB 在32位模式运行时支持的最大文件尺寸为2GB。 MongoDB把数据存储在文件中（默认路径为：/data/db），为提高效率使用内存映射文件进行管理。]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1254.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>转 用nosql轻松打造千万级数据量的微博系统</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1250.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1250.html#comments</comments>
		<pubDate>Thu, 17 May 2012 02:53:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1250</guid>
		<description><![CDATA[其实微博是一个结构相对简单,但数据量却是很庞大的一种产品.标题所说的是千万级数据量也并不是一千万条微博信息而已,而是千万级订阅关系之间发布。在看 我这篇文章之前，大多数人都看过sina的杨卫华大牛的微博开发大会上的演讲.我这也不当复读机了,挑重点跟大家说一下。 大家都知道微博的难点在于明星会员问题,什么是明星会员问题了,就是刘德华来咱这开了微博,他有几百万的粉丝订阅者，他发一条微博信息,那得一下子把微博 信息发布到几百万的粉丝里去，如果黎明、郭富城等四大天王都来咱来开微博，那咱小站不是死翘翘了.所以这时消息队列上场了。在我的架构里 有一个异步publish集群,publish的任务都去zeromq队列读取队列.zeromq是目前已知开源的消息传递最快的一个。具体关于 zeromq可以自己google。zeromq有一个问题是不能持久化数据,这个自己做持久化存储.回过刚才那个话题, 把明星会员的粉丝按照&#8221;活跃度&#8221;进行分级。&#8221;活跃度&#8221;是根据登陆频度,时间,发布微博等因素大致分为铁杆粉丝、爱理不理、半死不活三大类分到不同的发布集 群中去. 铁杆粉丝类型的异步发布集群，发布速度肯定是最快的.微博的信息是用handler socket保存到mysql。这个信息ID,是用rdtsc+2位随机整数拼接而成的 64位整数唯一ID，防止出现自增ID出现的多服务器 id一致性的问题. 在publish的时候，集群只是把微博信息的ID发送给redis的订阅者。所以这个数据是很快的。而且订阅者的list里只保存的是ID.在内存的占 用率上也不是很高. 下面我给大家看一下我的mysql和redis数据结构 在我的结构中还有一个重要角色就是&#8221;Key GPS Server&#8221;(简称:KGS)简单来说,这个是分布式数据存储的中心索引服务器.一切数据的存储和获取,都通过KGS来定位. KGS支持多个服务器,多个机房多重备份存储。KGS是以Tokyo Cabinet的hash db为存储的socket server。记录key跟服务器之间的对应关系. KGS的任务就是告知key该存储在哪几台服务器上,或者告知该key存储在哪几台服务器上，并不做其他的服务.这样大大的减轻KGS的压力. 再说一下Redis集群,redis是以纯内存形式模式运行,关闭了热备的功能(redis的热备并不是那么好). 自己写了个backend server.在每台运行redis的机子上都运行着backend socket 进程, backend进程也是以tc的hash db为存储。备份着当前服务器的redis数据。当redis重启的时候，从本机的bakcend db 加载所有数据. Redis的集群是以用户水平切分法来分布的 现在该轮到mysql里, 在这个架构中,基本消除了这边缓存 那边缓存的问题。因为在这个集群中的每个服务都是高速运行的.唯一的一处的cache 就是在php端的eAccelerator local cache. eAccelerator是基于共享内存的,所有速度比基于socket类型的cache快多了. eAccelerator 缓存了用户top N条的微博信息还有从KGS查询的结果。 看到这里有人问了，你把用户信息和微博信息都放在mysql里,怎么能不用cache了.嘿嘿，因为我用了 handler socket。HS 是小日本写的一款mysql插件.HS避开了MySQL通讯协议,直接读取MySQL引擎。在多核、大内存、 InnoDB引擎环境,性能直超memcached.HS能以Key-Value方式直接读写mysql引擎 总结 Google首席科学家讲过一句话，就是一个大的复杂的系统，应该要分解成很多小的服务. 我的这个架构也是由一个个小的集群来共同处理大数据量发布数据。有的人为什么不用mongodb了,因为mongodb是一款大众性的分布式nosql db,我们有自己的key分布策略,不太适合用mongodb. 不理解redis的存储关系的同学，可以先参考一下 Retwis, Retwis是用纯redis实现的简单微博. 具体的架构图、流程图、ppt文件。请下载附件来阅读.   http://code.google.com/p/php-tokyocabinet/downloads/detail?name=micro-blog-qiye.tar.bz2&#38;can=2&#38;q=#makechanges 我的QQ: [...]]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1250.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下SVN的三种备份方式</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1248.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1248.html#comments</comments>
		<pubDate>Wed, 11 Apr 2012 03:39:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1248</guid>
		<description><![CDATA[配置管理的一个重要使命是保证数据的安全性，防止服务器应硬盘损坏、误操作造成数据无法恢复的灾难性后果。因此制定一个完整的备份策略非常重要。 一般来说，备份策略应规定如下几部分内容：备份频度、备份方式、备份存放地点、备份责任人、灾难恢复检查措施及规定。 备份频度、存放地点等内容可以根据自己的实际情况自行制定；本文重点描述备份方式。 svn备份一般采用三种方式：1）svnadmin dump 2)svnadmin hotcopy 3)svnsync. 注意，svn备份不宜采用普通的文件拷贝方式（除非你备份的时候将库暂停），如copy命令、rsync命令。 笔者曾经用 rsync命令来做增量和全量备份，在季度备份检查审计中，发现备份出来的库大部分都不可用，因此最好是用svn本身提供的功能来进行备份。 优缺点分析： ============== 第一种svnadmin dump是官方推荐的备份方式，优点是比较灵活，可以全量备份也可以增量备份，并提供了版本恢复机制。 缺点是：如果版本比较大，如版本数增长到数万、数十万，那么dump的过程将非常慢；备份耗时，恢复更耗时；不利于快速进行灾难恢复。 个人建议在版本数比较小的情况下使用这种备份方式。 第二种svnadmin hotcopy原设计目的估计不是用来备份的，只能进行全量拷贝，不能进行增量备份； 优点是：备份过程较快，灾难恢复也很快；如果备份机上已经搭建了svn服务，甚至不需要恢复，只需要进行简单配置即可切换到备份库上工作。 缺点是：比较耗费硬盘，需要有较大的硬盘支持（俺的备份机有1TB空间，呵呵）。 第三种svnsync实际上是制作2个镜像库，当一个坏了的时候，可以迅速切换到另一个。不过，必须svn1.4版本以上才支持这个功能。 优点是：当制作成2个镜像库的时候起到双机实时备份的作用； 缺点是：当作为2个镜像库使用时，没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”；而当作为普通备份机制每日备份时，操作又较前2种方法麻烦。 下面具体描述这三种的备份的方法： =============== 1、svnadmin dump备份工具 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 这是subversion官方推荐的备份方式。 1）定义备份策略： 备份频度：每周六进行一次全量备份，每周日到周五进行增量备份 备份地点：备份存储路径到/home/backup/svn/ 备份命名：全量备份文件名为：weekly_fully_backup.yymmdd,增量备份文件命名为：daily-incremental-backup.yymmdd 备份时间：每晚21点开始 备份检查：每月末进行svnadmin load恢复试验。 2）建立全量备份脚本： 在~/下建立一个perl脚本文件，名为weekly_backup.pl，执行全量备份，并压缩备份文件，代码如下(本代码只针对一个库的备份，如果是多个库请做相应改动)： #!/usr/bin/perl -w my $svn_repos=&#8221;/home/svn/repos/project1&#8243;; my $backup_dir=&#8221;/home/backup/svn/&#8221;; my $next_backup_file = &#8220;weekly_fully_backup.&#8221;.`date +%Y%m%d`; $youngest=`svnlook youngest $svn_repos`; chomp $youngest; [...]]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1248.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安装GD库</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1247.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1247.html#comments</comments>
		<pubDate>Wed, 04 Apr 2012 10:24:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1247</guid>
		<description><![CDATA[错误:PHP Fatal error: Call to undefined function: imagecreatefrompng(),发现没安装gd库 不过在centos下安装实在是太容易了，输入如下命令就OK：yum install php-gd]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1247.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安装mb_string库</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1246.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1246.html#comments</comments>
		<pubDate>Wed, 04 Apr 2012 10:23:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1246</guid>
		<description><![CDATA[Call to undefined function mb_strlen() 安装命令：yum install php-mbstring]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1246.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KVM 克隆</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1244.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1244.html#comments</comments>
		<pubDate>Fri, 30 Mar 2012 13:32:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[kvm]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1244</guid>
		<description><![CDATA[考虑使用 KVM 的好吃之一就是备份比较方便，除了可以使用之前做 snapshots 的那种通用的方法之外，其实还有一种更简便的方法，KVM 本身就提供了强大的备份机制，使用 virt-clone 这个工具可以帮我们复制一套完整的系统。 # virt-clone –connect qemu:///system -o centos-5.5 -n centos-5.5.bk -f /var/lib/libvirt/images/centos-5.5.bk.img -o：需要备份的主机的名字 -n：备份的产生的主机名 -f：备份产生的文件存放位置 注意：备份之前先关闭主机。 虽说这样备份很方便，但是一个 .img 文件动辄 10G+，像 win 系列的需要更多空间。每一次备份就会产生一个数十 G 的文件，这样看来，代价未免大了点，服务器的硬盘空间再大，按一天一备份的速度话，也会很快耗尽的。所以我想比较好的方法还是比较原始的方法，针对不同的文件分别备份，写个脚本，放到 cron 里执行，应该也不是很复杂的事；而使用 virt-clone 的方法可以适用在以下场景：在 KVM 上安装完一台新的 OS，配置完各种环境，比如 LNMP，这个相对来说是比较“干净”的环境，这时将其做一个克隆保存，免去以后机器出问题重新花时间配置这种基础设施的时间。这应该是两种不同备份的适用之处。]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1244.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>怎样转移 SVN 版本库到另一台服务器</title>
		<link>http://www.dytaobao.com/blog/html/y2012/1242.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2012/1242.html#comments</comments>
		<pubDate>Fri, 16 Mar 2012 06:05:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1242</guid>
		<description><![CDATA[将 subversion 版本库从一台服务器转移到另一台，还要保留所有的历史版本记录，听起来有点难度，其实还好，没有想象的那么困难。 最近我需要把一个 subversion（SVN）版本库转移到另一台服务器。这个版本库在一台 Windows 服务器上，我要把它转移到 一台 Linux 服务器上。 第一步：备份旧的版本库 转移到另外一台服务器之前，你需要先备份现有的 subversion 版本库。希望你已经有一个通过脚本或其他方式做好的备份了。如果没有，那可以用如下命令创建一个 subversion 备份文件： svnadmin dump /path/to/repository &#62; repo_name.svn_dump 这个备份文件包含了所有你向版本库中提及的版本，所以它可能比较大（它甚至包含了那些你在以前的版本中已经删掉的文件）。 第二步：创建新的版本库 现在，把备份文件转移到你的新 subversion 服务器上，然后创建一个空的版本库： svnadmin create /path/to/repository 第三步：把旧的备份导入新的版本库 然后倒入你的备份： svnadmin load /path/to/repository &#60; repo_name.svn_dump 你可能想要强制 subversion 在新的版本库中使用和你的备份完全一致的 UUID 。那么只需要在 svnadmiin load 命令中添加 &#8211;force-uuid 参数就可以啦。在我这儿我会这样做的。如果你的备份已经导入了，也是有办法在以后修改 UUID 的，查下文档吧。 就是这样，现在在你的新服务器上就有了一个原来的版本库的副本。 FAQ 如果在转移过程中，有人向旧的版本库提交了新的版本怎么办？ 你可以很容易地导入新的版本。先在旧的服务器上创建一个增量备份： svnadmin dump --incremental [...]]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2012/1242.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>yum update mysql 升组冲突 解决</title>
		<link>http://www.dytaobao.com/blog/html/y2011/1240.html</link>
		<comments>http://www.dytaobao.com/blog/html/y2011/1240.html#comments</comments>
		<pubDate>Fri, 16 Dec 2011 15:05:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MYSQL]]></category>

		<guid isPermaLink="false">http://www.dytaobao.com/blog/?p=1240</guid>
		<description><![CDATA[yum remove mysql.i386 yum update mysql /usr/bin/mysql_upgrade]]></description>
		<wfw:commentRss>http://www.dytaobao.com/blog/html/y2011/1240.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

