数据同步算法研究[转]
1、引言
基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍,比如远程数据镜像、备份、复制、同步,数据下载、上传、共享等等,最为简单的做法自然就是对数据进行完全复制。然而,数据在网络上来回被复制多次后就会存在大量副本,很多情形下这些文件副本之间仅有很小的差异,很可能是从同一个文件版本演化而来。如果对文件进行完全复制,在文件较大的情况下,会占用大量网络带宽,同步时间也会较长。目前,广域网WAN的带宽与访问延迟仍然是急需解决的问题,完全复制使得很多网络应用无法提供良好的服务质量,比如分布式文件系统(DFS)、云存储(Cloud Storage)。Rsync与RDC(Remote Differential Compression)是两种最为常见的数据同步算法,它们仅传输差异数据,从而节省网络带宽并提高效率。本文基于这两种算法思想并借助重复数据删除 (De-duplication)技术,对数据同步算法进行深入研究与分析,并研发了原型系统。首先介绍rsync与RDC算法,然后详细描述算法设计与相应的数据结构,并重点分析文件分块、差异编码、文件同步算法,最后简介推拉两种应用模式。
阅读全文 | 发表评论 ( 1 篇评论 )
Ubuntu配置网络文件共享服务器NFS
环境:Ubuntu 8.04.3 LTS(2.6.24-24-generic) + nfs-kernel-server 1:1.1.2-4ubuntu1.1
NFS服务器地址:192.168.0.2
其中一台客户端地址:192.168.0.3
1> 安装Ubuntu nfs
Ubuntu上默认是没有安装Ubuntu nfs服务器的,因此我们首先安装Ubuntu nfs服务器端:
- roger@ubuntu:/# apt-get install nfs-kernel-server
在一些文档中,提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。
阅读全文 | 发表评论 ( None 篇评论 )
Linux/Ubuntu下C语言开发PHP的.so扩展模块过程【图】
环境:Linux ubuntu 2.6.27-7 + PHP Version 5.3.2 + Apache/2.2.9
============================== php扩展是什么==============================
如果你用过PHP,那么你已经使用过扩展了。除了少数的几个例外,每一个用户空间的PHP函数都被归类到一个个的扩展中。这其中很大一部分(总共超过400个)的函数是“标准扩展”的一部分。PHP的源码包附带了大约86个扩展,每一个扩展包含平均30个左右的函数。不难算出,这足有2500个函数。如果这还不够的话,PECL仓库中还提供了超过100个扩展,在因特网上还散布着更多。
“所有的函数都包含在了扩展中,那么剩下的还有什么?”你肯定会这么问,”扩展到底用来扩展什么?PHP的核心又是什么?“
PHP的核心由两部分组成。处在最底层的是Zend引擎(ZE)。ZE负责解析人类可读的PHP脚本,生成机器可读的符号,然后在一个进程空间里执行这些符号。ZE还负责内存管理、变量的作用域和执行函数调用。核心的另外一部分是PHP层。PHP绑定到SAPI(Server Application Porgramming Interface, 通常用来指代宿主环境—Apache, IIS, CLI, CGI等)层上,并且负责与它之间的通信。另外,PHP层还为 safe_mode 和 open_basedir 检查提供了一致的控制层,另外还有通过中类似 fopen(), fread() 和 fwrite() 等用户空间函数关联到文件和网络I/O上的流接口。
============================== 创建过程==============================
1> 下载php源码并解压到:/home/roger/soft/php-5.3.2/,并进入ext目录;
2> 在ext目录看到有ext_skel这个可执行程序,ext_skel是创建扩展的shell
3> 使用extname参数指定扩展名称创建一个扩展模块目录:

阅读全文 | 发表评论 ( None 篇评论 )
配置PL/SQL DEVELOPER远程访问oracle数据库(免ORACLE客户端安装)
环境:Win XP
软件:PL/SQL Developer 7.1.4 1390 Instant Client Package – Basic包
用PL/SQL连接Oracle,是需要安装Oracle客户端软件的,今天说下如不安装ORACLE客户端直接链接oracle。
1> 根据上面的地址下载Instant Client Package – Basic包,解压到C:\instantclient_11_2
2> 用文本编辑器编辑C:\instantclient_11_2目录下的tnsnames.ora文件,添加一下内容:
- YY73 = (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = mv01)))
这个是链接字符串,设置oracle服务器的HOST,PORT以及SERVICE_NAME信息。
阅读全文 | 发表评论 ( None 篇评论 )
Ubuntu下找不到php5,phpize等可执行程序的解决办法
环境:Linux ubuntu 2.6.27-7-server + Apache/2.2.9 (Ubuntu) + PHP/5.2.6-2ubuntu4.6 with Suhosin-Patch
1> 一直使用源码编译安装PHP,今天在Ubuntu下图省事直接使用apt-get install php5 命令安装完php5,安装完后却一直找不到php5执行程序,使用find命令也找不到。
后来发现还需要另安装一个程序:apt-get install php5-cli
安装完之后可以看到在/usr/bin里面有php5啦!
2> 用C开发PHP扩展的时候如果用动态链接库的方式编译扩展模块,需要用到phpize,这个工具在使用apt-get install php5默认情况也是没安装的,安装phpize: apt-get install php5-dev

阅读全文 | 发表评论 ( None 篇评论 )
phpMyAdmin管理多服务器配置
环境:Linux/Ubuntu + apache2 + PHP5 + mysql5 + phpMyAdmin-3.3.4
1、下载phpMyAdmin-3.3.4-all-languages.zip并解压到/var/www/phpMyAdmin
2、在phpMyAdmin根目录创建config文件夹并设置可写权限
- # cd /var/www/phpMyAdmin
- # mkdir config
- # chmod 777 config
3、通过浏览器访问:http://localhost/phpMyAdmin/setup打开配置页面;
4、点击“新建服务器”,打开服务器配置页面,填写服务器的IP,用户名和密码等信息,保存;
阅读全文 | 发表评论 ( None 篇评论 )
php通过PDO链接oracle数据库
关于PDO的介绍请参考PHP数据对象PDO介绍
环境: Win32 + Apache2 + PHP5 + ORACLE;
1> 修改php.ini,找到;extension=php_pdo_oci.dll,把前面的”;”去掉,重启apache2。
2> 创建一个test.php
- $dbh = new PDO("oci:dbname=127.0.0.1/mv1", 'username', 'password'); //创建一个数据库句柄
- $sth = $dbh->prepare("select name,age from users"); //解析SQL语句
- $sth->execute(); //执行查询
- $rows = $sth->fetchAll(PDO::FETCH_ASSOC); //以数组返回结果集
- echo '<pre>';
- print_r($rows);
- //以上输出
- Array
- (
- [0] => Array
- (
- ["name"] => "roger"
- ["age"] => "25"
- ),
- [1] => Array
- (
- ["name"] => "wang"
- ["age"] => "25"
- ),
- ...
- }
- ?>
阅读全文 | 发表评论 ( None 篇评论 )
PHP数据对象PDO介绍[转]
PHP 5 数据对象 (PDO) 抽象层与 Oracle
一名新 PHP 数据对象 (PDO) 数据抽象层的原始开发人员为您简要介绍该抽象层,重点讲述与 Oracle 一起运行的情况。
需要 PHP:5.0
需要其他:Oracle 8 或更高版本客户端库
下载用于 Oracle 的 PDO (Windows):php_pdo.dll,php_pdo_oci.dll
下载用于 Oracle 的 PDO (Unix):pdo,pdo_oci
============================== PDO 简介 ==============================
PHP 主要是由志愿者完成的项目;尽管有少数一些固定的“核心”开发人员,但是我们没有一个人在全职受薪的开发 PHP。除此之外,我们分别位于世界不同地方,您可以想象长期开发的协调工作是何等困难。因此,PHP 主要是基于突发奇想的个人短期需求来发展的,其原因也多种多样,有的是试验,有的则是因为“明天有活要交”。尽管这样通常每一步都会改善 PHP,但从长远来看则是缺乏完整性 - 数据库扩展就是一个重要的例子。
阅读全文 | 发表评论 ( None 篇评论 )
用pure-ftpd搭建简单的Ubuntu FTP服务器(转)
Linux下的ftpd很多,Ubuntu下常用vsftpd, proftpd和pure-ftpd,热能系当初使用的就是proftpd. 不过前两者有个致命的问题就是内码转换,它们默认使用UTF-8编码,而Windows系统使用GBK,这就导致Windows访问时中文出现乱码。 pure-ftpd则可以设置客户端默认编码,直接设为GBK就解决问题了。pure-ftpd的虚拟用户支持也很好,允许限制带宽、空间配额,可以用自带的pure-pw管理虚拟用户,也可以用MySQL和LDAP. pure-ftpd也提供FXP协议和SSL/TLS支持,是一个很全面的ftpd. 首先安装pure-ftpd:
- sudo apt-get install pure-ftpd
pure-ftpd不是用配置文件而是用命令行参数,这种方式比较怪异。不过pure-ftpd的作者还是为偏好配置文件的用户提供了wrapper,可以man一下pure-ftpd-wrapper. 在Debian/Ubuntu下的wrapper比较怪,是在/etc /pure-ftpd/conf下以设置项作为文件名,该项的设置值作为文件的内容,如需要设置ClientCharset=gbk,就建立一个名为“ClientCharset”的文件,内容为“GBK”.
实验室的FTP需要给每个人配一个私有账号,相当于一个网络硬盘;同时允许匿名登录用于上传公共资料与数据交换。由于是内部服务器,需要改一下端口号,最后还需要一个管理员帐号。我使用的设置如下(用传统赋值写法),一些不常用的就不写了:
阅读全文 | 发表评论 ( 1 篇评论 )
Ubuntu/FreeBSD下rsync同步镜像服务器配置教程
主服务器:192.168.1.2 (Linux ubuntu 2.6.27-7-server)
从服务器:192.168.1.3 (FreeBSD 8.0-RELEASE-p2)
============================== 1> 在两台主机上分别安装rsync ==============================
Ubuntu安装如下:
- roger#apt-get install rsync
阅读全文 | 发表评论 ( None 篇评论 )