注意:Linux在默认安装的情况下是没有sz和rz这两条指令的,rmp包为:lrzsz-xx.xx-xxx.rpm,用rmp –q lrzsz查看是否安装,没有的话安装:

命令:

rpm –ivh lrzsz-xx.xx-xxx.rpm

安装后查看:

clip_image002

1. 设定SecureCRT的Download和Upload目录(默认也行)

clip_image004

clip_image006

2. 添加文件到上传列表

clip_image008

clip_image010

3. 开始上传到Linux服务器中,默认传到用户当前用户~目录。

clip_image012

貌似直接把文件拖拽到SecureCRT的窗口就可以传输文件了.太TMD的方便了.

4. 上传过程中的信息提示(以下输出信息自动的)

注意到rz(receive z-modem)了没? 我们上传到linux,其实就是SecureCRT发出rz命令让linux来接收.

clip_image014

 

5. Linux到secureCRT的文件传输(下载)

我们要输入的命令:

sz path/filename

clip_image016

查看windows下的目录(download):

clip_image018

 

是不是及其简单,根本不用通过FTP或Samba服务器来中转了.

posted @ 2011-08-03 10:50 小马歌 阅读(1747) | 评论 (0)编辑 收藏
 

在某种应用场景下,我们需要在Nginx下对IP和目录进行限速;本文通过Nginx的limit_zone和limit_rate等方式实现对IP和目录的限速。

AD:

Nginx配置与应用详解专题的投票结果来看,Nginx已经是目前仅次于APache和MS IIS的Web服务器。Nginx优秀的高并发支持和高效的负载均衡是我们选择它的理由。但有时我们希望它能做的更多。本文将向您介绍如何在Nginx下对IP和目录进行限速,在某种应用场景下,这也是个常见需求。

Nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个目录来限速。

示例:

  1. limit_zone one $binary_remote_addr 10m;  
  2.  
  3. location / {   
  4.         limit_conn one 1;   
  5.         limit_rate 100k;   

说明:

limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。

然后针对目录进行设定。

  1. limit_conn one 1; 

是限制每个IP只能发起一个连接。

  1. limit_rate 100k; 

是对每个连接限速100k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate x 2。

关于limit_zone的原始文档,请见 http://wiki.Nginx.org/NginxHttpLimitZoneModule

关于limit_rate和limit_conn的原始文档,请见http://wiki.Nginx.org/NginxHttpCoreModule

【编辑推荐】

  1. Nginx优化设置基本的TCP配置
  2. Nginx内核优化的源代码探秘
  3. Nginx内核参数相关的优化设定
  4. Nginx + PHP-FPM + APC=绝妙的组合
posted @ 2011-08-02 15:43 小马歌 阅读(271) | 评论 (0)编辑 收藏
 
[目录] cygwin安装使用总结.txt (created by TxtBrowser)
  content
    1. 什么是Cygwin?
    2. 什么不是Cygwin?
    3. Cygwin的下载与安装
    4. cygwin下的一些应用
    .   4.1 默认的应用--也是我选择cygwin的原因
    .   4.2 可以自己安装一些好玩的东东
    .   4.3 有一些应用需要额外的配置
    .       4.3.1 ssh服务在cygwin上架设指南
    5. cygwin的一些问题及解决
    .   5.1 如何改变home目录
    .   5.2 cygwin显示中文问题
    .   5.3 cygwin下中文中现乱码问题
  figures
    figure 1. patch for mplayer on cygwin

对于留恋Linux命令行的用户, 对于那些不想在你的Windows系统上再安装一个Linux, 或者
安装虚拟机, 再在虚拟机上安装Linux的用户来说, Cygwin应该是一个很好的选择. cygwin
可以模拟Linux的工作环境, 命令, 工作方式都跟 Linux一样.

Windows的命令行的确是不好用, cygwin除了可以执行Linux命令外, 还可以直接调用
Windows的命令行, 不同的是界面更加友好. 如果再配合其它软件(如console2), 基本上可
以做到类似Linux的 gnome-terminal的多tab了.

所有的试验都是在cygwin1.5上做的, cygwin1.7尽管发布很久了, 但是个人感觉还有很多
bug, 所以我在公司里用cygwin1.5, 回到家里用cygwin1.7, 这是个人的感受, 呵呵.

1. 什么是Cygwin?

Cygwin是一个在windows平台上运行的Linux模拟环境, 是Cygnus solutions公司开发的自
由软件(该公司开发了很多好东西, 著名的还有eCos, 不过现已被Redhat收购). 它对于学
习Unix/linux操作环境, 或者从unix到windows的应用程序移植, 或者进行某些特殊的开发
工作, 尤其是使用gnu工具集在windows上进行嵌入式系统开发, 非常有用. [1]

Cygwin是一个Windows上的Linux模拟环境, 它包括两个部分:

    * 一个作为Linux API仿真层的DLL(Cygwin.dll), 它提供稳定的Linux API功能. 
    * 提供看起来且使用起来象Linux的工具集. 

2. 什么不是Cygwin?

Cygwin不是一种在Windows下运行Linux应用程序的方式, 如果要做到这一点, 你必须重新
在Windows上编译你的源程序. 

3. Cygwin的下载与安装

首先你必须到http://www.cygwin.com先下载一个安装向导文件 setup.exe, 然后运行
setup.exe, 依次会出现下面的对话框:

    (1)选择安装方式(选择Download Without Installing)
    (2)选择本地存储路径
    (3)选择连接方式
    (4)选择下载站点(推荐两个: http://mirrors.kernel.org, ftp.ntu.edu.tw)
    (5)选择下载包的内容: 一共有四类. default只下载最小安装包, Install则下载所有
    的包, 在1.7版本里, Reinstall在下载的时候好像没有什么用,不用选, Uninstall
    是删除安装包吗? 没有试过. 至于窗口顶部那些“Keep”、“Prev”、“Curr”、“
    Exp”等等选项 , 只是用来改变当前树结构的显示方式的, 对下载没有什么影响. 用
    户可以用默认的“Exp”. 
    (6)开始下载

如果用户的运气足够好, 也许能够一次性的下载成功. 若真能这样, 恭喜恭喜!但如果你
和我一样不幸, 下到一半网络断了,怎么办?难道要我全部重新来一遍?幸运的是,Cygwin
的安装向导程序支持断点续传功能: 你可以按照上面的步骤再次运行setup.exe, 把上面的
骤再执行一遍就行了, cygwin会记住上次下载的东东的(适用于cygwin1.7, 对于
cygwin1.5, 貌似断点下载的第5步要选择Reinstall).

在用户指定的本地存储路径内, 安装向导程序会生成类似这样的一个目录: http%3a%2f
%2fmirrors.kernel.org%2fsources.redhat.com%2fcygwin, 这就是你下载文件的真正所在
目录. 还会生成两个日志文件:setup.log和setup.log.full,  用户感兴趣的活, 可以打
开来看看, 对了解Cygwin的下载机制有不少帮助. 

至于如何安装, 其实就是再运行一次setup.exe, 不同的是, 在上述的第1步里选择
Install from local, 在第5步里, 四个选项有不同的含义, Install代表安装而不是下载
, Reinstall代表重新安装而不是重新下载. 用户可以在这里选择要安装的包, 不过我还是
建议选择安装所有的程序包, 免的以后麻烦.

4. cygwin下的一些应用

4.1 默认的应用--也是我选择cygwin的原因

之所以安装cygwin, 是因为习惯于linux下的一些应用, 在Windows上没有, 或者找不到合
适的代替器, 所以在我的日常应用中, 基本上cygwin被当成是一台只有命令行的Linux操作
系统使用. 而且因为运行在Windows上, 所以有时候少了和Windows通讯的烦恼.

     * Gcc, Makefie, gdb: 这是最初接触cygwin的原因. 很多公司在Windows上编译
    Linux 的东东, 没有这个的确不行, 后来经常自己写一些验证性质的小程序, 也
    用这个.
    * Vim: vim提供了windows版本, 但是有时候还是习惯使用命令行版的Vim(不是
    gvim), 尽管windows版本的gvim用的也很多.
    * ls: 尽管Windows提供了类似的命令dir, 但是感觉还是ls信息论习惯和强大.
    * telnet, ssh: 很多人使用secuCRT登录设备, 个人感觉secuCRT有一项功能挺强
    的, 那就是记录log功能, 其它的挺弱的, 比不了cygwin. 再插上一句, 用cygwin
    telnet 登录 bbs还是比较好使的, 但是secuCRT和putty显示中文都会有问题. 没
    用过 CTerm以及 XTerm之类的bbs终端, 但是我发现cgywin能实现基本它们声称的
    大部分功能.
    * ftp, sftp, lftp, tftp等: 这个也有专门的软件来实现, 好用的如FileZilla
    FTP server和client版, 但是点鼠标点的我手疼, 还是习惯命令行, 而且最近研
    究了一些脚本, 对于经常到某个ftp上存取文件使用一个命令就可以实现, 不用再
    登录, 敲密码, 进入到指定路径, 上传下载了, 还是蛮方便的.
    * cvs: 有Windows版本的cvs工具wincvs, 貌似最初我用过好几年, 但是现在一个
    命令就能搞定的事情不愿意再开一个软件再点击好多次鼠标了.
    * diff和patch: 经常写代码和写文章的人用的着. Windows上暂时没有发现替代
    品.
    * 阅读一些命令的man page, 如man strcpy.
    * 其它常用的Linux命令, 如rm, ping, tar, gzip, cat, echo等.
    * Linux的重定向命令, 用过的人知道, 有时候这个还是很好用的, 呵呵

4.2 可以自己安装一些好玩的东东

上面的应用都是cygwin自带的, 装上就能用. 事实上如果你的cygwin是完全安装的话, 你
对编程小有了解的话, 还可以自己编译一些好玩的东东, 下面是我实验过可以使用的:

    * 纯文本网页浏览器(lynx, w3m或者elinks), 在命令行里浏览网页.
    * sdcv: 在命令行里查字典, 这个没有人移植到Windows上.
    * asterisk: 一个众人皆知的voip server(这个需要修改的地方很多).
    * mplayer: 在命令行里听音乐, 貌似有人开发了一个叫cmmusic的东东, 可以同
    步显示歌词, 编译的时候cwygin存在一个叫llrint的问题, 如果遇到这个问题
    (undefined reference to `_llrint'), 下面的 patch可以解决这个问题:

|
|===================================================================
|--- ffmpeg/libavcodec/i386/mathops.h   (revision 6329)
|+++ ffmpeg/libavcodec/i386/mathops.h   (working copy)
|@@ -37,3 +37,13 @@
|  asm ("imull %2\n\t" : "=A"(rt) : "a" (ra), "g" (rb));\
|  rt; })
|
|+#ifndef llrint
|+inline long long int llrint (double x)
|+{
|+    long long int llrintres;
|+    asm
|+    ("fistpll %0"
|+    : "=m" (llrintres) : "t" (x) : "st");
|+    return llrintres;
|+}
|+#endif
    figure 1. patch for mplayer on cygwin

4.3 有一些应用需要额外的配置

还有一些应用, 用到的时候需要一些些额外的配置, 一并总结一下:

4.3.1 ssh服务在cygwin上架设指南

sshd服务在cygwin上默认是不开启的, 可能是出于安全的需要. 但是有些服务可能需要
cygwin作为一个sshd服务器. 这时你需要手动打开sshd服务.[4]

1) 先确认一下cygrunsrv.exe 已经安装. 

    whereis cygrunsrv

2) 生成ssh_config文件

这时候并不能起动sshd服务的, 先运行ssh-host-config 会提示你一些信息, 照着做就是
了, 多数是yes, 在选择是否加载为service的时候小心一点, 这里的service是指windows
的service, 即使cygwin不启动, sshd也会在开机的时候启动起来.

3) 启动或停止sshd

    net start sshd (cygrunsrv -S sshd)
    net stop sshd

4) 实施过程

打开cygwin控制台, 输入ssh-host-config, 一路yes, 提示CYGWIN值时, 输入netsec tty.
启动sshd服务用: net start sshd 或 cygrunsrv --start sshd; 停止sshd服务用:net
stop sshd 或 cygrunsrv --stop sshd


5. cygwin的一些问题及解决

5.1 如何改变home目录

如果要改变home目录则要编辑cygwin.bat, 具体如下:在bash命令之前加入set HOME=<用
户目录>, 比如:

set HOME=/home/g

此用户目录设置在/home/g. 

5.2 cygwin显示中文问题

/etc/skel/.bashrc
让bash命令行可以输入汉字, 编辑~/.inputrc, 添加:

    set meta-flag on
    set convert-meta off
    set input-meta on
    set output-meta on

让ls命令显示汉字, 在~\.bashrc中加入:

    export LESSCHARSET=latin1

让ls命令显示汉字文件和目录名, 在~\.bashrc中加入:

    alias ls='ls -hF --show-control-chars --file-type'

一般的HOME目录下第一次使用的时候没有.inputrc和.bashrc文件的, 你可以自己新建一个
, 也可以从/etc/skel目录下拷由一个现成的, 稍加改动就可以了.

5.3 cygwin下中文中现乱码问题

在cygwin下用make编译程序, 往往会出现乱码. 这主要是因为cygwin对中文的支持不是很
理想引起的. 解决的办法是将环境变量LANG设成UTF-8, 暂时不用中文, 在~/.bashrc文件
中加入下面的一句话:

    export LANG=UTF-8

[参考资料]:

[1]Cygwin User's Guide, cygwin官方网站,
http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html
[2] 大冬瓜的博客, Cygwin安装图记, http://lostu.blogbus.com/logs/10765519.html
[3] OoNiceDream的博客, 如何配置cygwin,
http://oonicedream.itpub.net/post/36905/457409
[4] Cygwin上的ssh服务的putty自动登录问题, http://markli.javaeye.com/blog/39661
[5] Cygwin上的ssh服务的putty自动登录问题,
http://hi.baidu.com/%BB%D4%B8%E7/blog/item/51a7bf3ef17f1eff828b13aa.html
[6] cygwin & putty, http://blog.chinaunix.net/u/31756/showart_416440.html
posted @ 2011-07-29 17:33 小马歌 阅读(5300) | 评论 (0)编辑 收藏
 
     摘要: WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有所帮助。  1、优化你的MySQL查询缓存  在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一。当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的。  但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员...  阅读全文
posted @ 2011-07-29 14:13 小马歌 阅读(190) | 评论 (0)编辑 收藏
 

本文转自Java开源大全,列举了与Java相关的NoSQL数据库,其中包括Java写成的,Java版本的,或者能与Java紧密结合的各种NoSQL数据库。对列举到的NoSQL都进行了比较详尽的描述。推荐给各位使用Java的朋友们。

HBase

HBase是一个分布式的、面向列的开源数据库,该技术来源于Chang etal所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Googl文件系统(FileSystem)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式。HBase使用和Bigtable非常相同的数据模型。用户存储数据行在一个表里。一个数据行拥有一个可选择的键和任意数量的列。表是疏松的存储的,因此用户可以给行定义各种不同的列。HBase主要用于需要随机访问,实时读写你的大数据(Big Data)。

收录时间:2011-04-18 11:18:58

Berkeley DB Java Edition

Berkeley DB Java Edition(JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系而不是JE本身。多线程支持,JE使用超时的方式来处理线程间的死琐问题。Database都采用简单的key/value对应的形式。事务支持。允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。支持RAM缓冲,这样就能减少频繁的IO操作。支持日志。数据备份和恢复。游标支持。

Neo4j

Neo4j是一个嵌入式,基于磁盘的,支持完整事务的Java持久化引擎,它在图像中而不是表中存储数据。Neo4j提供了大规模可扩展性,在一台机器上可以处理数十亿节点/关系/属性的图像,可以扩展到多台机器并行运行。相对于关系数据库来说,图形数据库善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询——在关系数据库中,这些查询会导致大量的表连接,因此会产生性能上的问题。Neo4j重点解决了拥有大量连接的传统RDBMS在查询时出现的性能衰退问题。通过围绕图形进行数据建模,Neo4j会以相同的速度遍历节点与边,其遍历速度与构成图形的数据量没有任何关系。此外,Neo4j还提供了非常快的图形算法、推荐系统和OLAP风格的分析,而这一切在目前的RDBMS系统中都是无法实现的。

Neo是一个网络——面向网络的数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络上而不是表中。网络(从数学角度叫做图)是一个灵活的数据结构,可以应用更加敏捷和快速的开发模式。

你可以把Neo看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

由于使用了“面向网络的数据库”,人们对Neo充满了好奇。在该模型中,以“节点空间”来表达领域数据——相对于传统的模型表、行和列来说,节点空间是很多节点、关系和属性(键值对)构成的网络。关系是第一级对象,可以由属性来注解,而属性则表明了节点交互的上下文。网络模型完美的匹配了本质上就是继承关系的问题域,例如语义Web应用。Neo的创建者发现继承和结构化数据并不适合传统的关系数据库模型:

1.对象关系的不匹配使得把面向对象的“圆的对象”挤到面向关系的“方的表”中是那么的困难和费劲,而这一切是可以避免的。

2.关系模型静态、刚性、不灵活的本质使得改变schemas以满足不断变化的业务需求是非常困难的。由于同样的原因,当开发小组想应用敏捷软件开发时,数据库经常拖后腿。

3.关系模型很不适合表达半结构化的数据——而业界的分析家和研究者都认为半结构化数据是信息管理中的下一个重头戏。

4.网络是一种非常高效的数据存储结构。人脑是一个巨大的网络,万维网也同样构造成网状,这些都不是巧合。关系模型可以表达面向网络的数据,但是在遍历网络并抽取信息的能力上关系模型是非常弱的。

虽然Neo是一个比较新的开源项目,但它已经在具有1亿多个节点、关系和属性的产品中得到了应用,并且能满足企业的健壮性和性能的需求:

完全支持JTA和JTS、2PC分布式ACID事务、可配置的隔离级别和大规模、可测试的事务恢复。这些不仅仅是口头上的承诺:Neo已经应用在高请求的24/7环境下超过3年了。它是成熟、健壮的,完全达到了部署的门槛。

NeoDatis ODB

NeoDatis ODB是一个面向对象数据库,一个真正透明的对象持久层。利用一行简单的代码就能够持久化native object。ODB非常简单、非常快并自带强大查询语言。ODB既可以做为一个内嵌数据库引擎使用,也可以以C/S模式运行。

Apache Cassandra

Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。Cassandra不是一个数据库,它是一个混合型的非关系的数据库,类似于Google的BigTable。本文主要从以下五个方面来介绍Cassandra:Cassandra的数据模型、安装和配制Cassandra、常用编程语言使用Cassandra来存储数据、Cassandra集群搭建。Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。)Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了GoogleBigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。

Cassandra的数据模型是基于列族(Column Family)的四维或五维模型。它借鉴了Amazon的Dynamo 和Google’s BigTable 的数据结构和功能特点,采用Memtable和SSTable的方式进行存储。在Cassandra写入数据之前,需要先记录日志( CommitLog),然后数据开始写入到Column Family对应的 Memtable中,Memtable是一种按照key排序数据的内存结构,在满足一定条件时,再把Memtable的数据批量的刷新到磁盘上,存储为SSTable。

Voldemort

Voldemort是一个分布式键-值(Key-value)存储系统,是Amazon’s Dynamo的一个开源克隆。

1.支持自动复制数据到多个服务器上。

2.支持数据自动分割所以每个服务器只包含总数据的一个子集。

3.提供服务器故障透明处理功能。

4.支持可拨插的序化支持,以实现复杂的键-值存储,它能够很好的5.集成常用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。

5.数据项都被标识版本能够在发生故障时尽量保持数据的完整性而不会影响系统的可用性。

6.每个节点相互独立,互不影响。

7.支持可插拔的数据放置策略。

Perst

Perst 是一个面向对象的开源嵌入式数据库软件,能够有效的处理移动设备上的大量数据。Perst 是McObject公司发布的一款非常袖珍的开源嵌入式数据库,是一个简单,快速,便捷,面向对象,适合java与.NET的数据库。Perst不需要专门的编译器与预处理器,支持ACID事务。对于在资源受限的移动设备(如手机,PDA等)上存储大量数据和对数据进行频繁的IO操作往往要消耗很多的设备资源。由于移动设备内存小,性能较差,如果采用关系数据库(如SQLServer2000, Oracle)管理数据,仅靠其有限的内存资源是不能运行这些数据库管理系统的,这样就有必要采用一些特殊的数据库系统。Perst数据库正是为这类设备研究开发的,它们的作用是在资源受限的设备上完成大量数据的访问操作。其实这些设备系统资源主要消耗在从磁盘上读取数据的IO操作。如何提供一种有效的文件存储策略来降低对磁盘的IO操作是嵌入式数据库软件设计的主要任务。

像其他嵌入式数据库一样,Perst没有管理上的代价,但不同的是Perst直接将对象以Java或者C#对象的形式进行存储。因此不需要在对象的内部表现形式和Java/C#表现形式之间转换。这个数据库引擎非常精悍,只有约5000行代码,McObject对此感到骄傲。根据访问模式不同,运行时需要30K到300K的内存。

Terrastore

Terrastore是一个基于Terracotta(一个业界公认的、快速的分布式集群组件)实现的高性能分布式文档数据库。可以动态从运行中的集群添加/删除节点,而且不需要停机和修改任何配置。支持通过http协议访问Terrastore。Terrastore提供了一个基于集合的键/值接口来管理JSON文档并且不需要预先定义JSON文档的架构。易于操作,安装一个完整能够运行的集群只需几行命令。

HyperGraphDB

HyperGraphDB是一个通用,可扩展,可移植的,分布式,可嵌入的开源数据存储机制。专为人工智能和语义Web项目而设计。它也可以用来作为一个适用于各种规模项目的嵌入式面向对象数据库。HyperGraphDB是一个基于Java的产品,构建在BerkeleyDB存储类库之上。它的主要特性包括:

1.支持广义图存储。开放,可扩展的类型系统。

2.基本查询系统和图形的遍历算法。

3.支持Java对象直接存储。

4.线程安全的事务处理。

5.提供P2P框架实现数据分发。

OrientDB

OrientDB是兼具文挡数据库的灵活性和图形数据库管理链接能力的可深层次扩展的文档-图形数据库管理系统。可选无模式、全模式或混合模式下。支持许多高级特性,诸如ACID事务、快速索引,原生和SQL查询功能。可以JSON格式导入、导出文档。若不执行昂贵的JOIN操作的话,如同关系数据库可在几毫秒内可检索数以百记的链接文档图。

HandlerSocket client for java

HandlerSocket是一个MySql插件,可以将mysql作为NoSQL来使用。通过这个插件,你可以直接跟MySql后端的存储引擎做key-value式的交互,省去了MySql上层的SQL解释、打开关闭表、创建查询计划等CPU消耗型的开销。hs4j是HandlerSocket的一个java客户端。HS4J的使用很简单,所有的操作都通过HSClient这个接口进行。HS4J同样支持连接池,可以在构建客户端的时候传入连接池大小。

相关文章:http://rdc.taobao.com/team/jm/archives/545

Tair:淘宝的key/value解决方案

Tair是一个分布式的key/value结构数据的解决方案,系统默认支持基于内存和文件的存储引擎,对应于通常我们所说的缓存和持久化存储。

Tair具有良好的架构,使得其在可扩展性、数据安全性方面都有较好的表现:

1.基于对照表的灵活、良好的可扩展性

2.轻量级的configserver

3.抽象的存储引擎层,支持添加新的存储引擎

4.自动的复制和迁移,对用户透明

5.多机架和多数据中心的支持

6.插件容器

Tair除了基本的key/value操作外,还提供了一些实用的功能,使得其适用的场景更多:

1.数据的version支持

2.原子计数器支持

3.item支持

相关文章:http://rdc.taobao.com/blog/cs/?p=302#more-302

LucidDB

LucidDB是唯一一款专注于数据仓库和商务智能的开源RDBMS,它使用了列存储架构,支持位图索引,哈希连接/聚合和页面级多版本,大部分数据库最初都注重事务处理能力,而分析功能都是后来才加上去的。相反,LucidDB中的所有组件从一开始就是为满足灵活的需求,高性能数据集成和大规模数据查询而设计的,此外,其架构设计彻底从用户出发,操作简单,完全无需DBA。

LucidDB对硬件要求也极低,即使不搭建集群环境,在单一的Linux或Windows服务器上也能获得极好的性能。最新版本还加入了对Mac OS X和Windows 64位的支持,官方网站上的文档和教程也非常丰富,非常值得你体验一下。

Couchdb4j

Couchdb4j是一个Java开源类库用于与基于JSON的CouchDB数据库交互。

原文出自:open-open.com

posted @ 2011-07-29 14:05 小马歌 阅读(254) | 评论 (0)编辑 收藏
 

leveldb 测试

svn checkout http://leveldb.googlecode.com/svn/trunk/ leveldb-read-only
#svn checkout svn://gcc.gnu.org/svn/gcc/trunk .
#wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz 

 

cd leveldb-read-only
make
make check

测试1:

测试环境:

9块SSD MegaCli -PDList –aALL  |grep data -i

MegaCli  -LDInfo  -LALL -aALL     ,Raid 5

uname -a
Linux ker209 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

 cat /etc/issue
CentOS release 5.4

Mem: 48G

测试结果:

 ll /tmp/dbbench/

 leveldb-read-only]# ./db_bench --num=10000000 --write_buffer_size=$((2*1024*1024))
LevelDB:    version 1.2
Date:       Sun Jul 10 23:00:00 2011
CPU:        8 * Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
CPUCache:   12288 KB
Keys:       16 bytes each
Values:     100 bytes each (50 bytes after compression)
Entries:    10000000
RawSize:    1106.3 MB (estimated)
FileSize:   629.4 MB (estimated)
WARNING: Snappy compression is not enabled
------------------------------------------------
fillseq      :       2.264 micros/op;   48.9 MB/s      
fillsync     :      67.457 micros/op;    1.6 MB/s (10000 ops)
fillrandom   :      10.680 micros/op;   10.4 MB/s      
overwrite    :      13.521 micros/op;    8.2 MB/s      
readrandom   :      19.652 micros/op;                  
readrandom   :      18.830 micros/op;                  
readseq      :       0.402 micros/op;  275.1 MB/s     
readreverse  :       0.608 micros/op;  181.9 MB/s     
compact      : 10831300.974 micros/op;
readrandom   :       7.972 micros/op;                  
readseq      :       0.255 micros/op;  434.1 MB/s     
readreverse  :       0.479 micros/op;  231.1 MB/s     
fill100K     :    3543.469 micros/op;   26.9 MB/s (10000 ops)
crc32c       :       7.123 micros/op;  548.4 MB/s (4K per op)
snappycomp   :       2.146 micros/op; (snappy failure)
snappyuncomp :       4.053 micros/op; (snappy failure)
acquireload  :       0.780 micros/op; (each op is 1000 loads)
You have new mail in /var/spool/mail/root

 

测试2:

 uname -r #2.6.18-164.el5

CentOS release 5.4

mem 3G

./db_bench --num=10000000 --write_buffer_size=$((256*1024*1024))
LevelDB:    version 1.2
Date:       Sun Jul 10 23:20:49 2011
CPU:        2 * Intel(R) Celeron(R) CPU        E3400  @ 2.60GHz
CPUCache:   1024 KB
Keys:       16 bytes each
Values:     100 bytes each (50 bytes after compression)
Entries:    10000000
RawSize:    1106.3 MB (estimated)
FileSize:   629.4 MB (estimated)
WARNING: Optimization is disabled: benchmarks unnecessarily slow
WARNING: Assertions are enabled; benchmarks unnecessarily slow
WARNING: Snappy compression is not enabled
------------------------------------------------
fillseq      :       2.485 micros/op;   44.5 MB/s      
fillsync     :    5424.305 micros/op;    0.0 MB/s (10000 ops)
fillrandom   :       7.937 micros/op;   13.9 MB/s      
overwrite    :       8.606 micros/op;   12.9 MB/s      
readrandom   :      44.319 micros/op;                  
readrandom   :      22.680 micros/op;                  
readseq      :       0.570 micros/op;  193.9 MB/s     
readreverse  :       0.761 micros/op;  145.3 MB/s     
compact      : 48010122.061 micros/op;
readrandom   :      12.046 micros/op;                  
readseq      :       0.353 micros/op;  313.6 MB/s     
readreverse  :       0.607 micros/op;  182.3 MB/s     
fill100K     :    1311.692 micros/op;   72.7 MB/s (10000 ops)
crc32c       :       4.250 micros/op;  919.0 MB/s (4K per op)
snappycomp   :       4.053 micros/op; (snappy failure)
snappyuncomp :       1.907 micros/op; (snappy failure)
acquireload  :       7.879 micros/op; (each op is 1000 loads) 

参考:http://blog.yufeng.info/archives/1327

posted @ 2011-07-29 12:25 小马歌 阅读(807) | 评论 (0)编辑 收藏
 

Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法。

  LevelDB 是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。

  示例代码:

  #include

  #include "leveldb/include/db.h"

  leveldb::DB* db;

  leveldb::Options options;

  options.create_if_missing = true;

  leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);

  assert(status.ok());

  std::string value;

  leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);

  if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);

  if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);

  授权协议: BSD

  开发语言: C/C++C/C++

  操作系统: Linux Linux

  【简单说下leveldb】

  作者:黄东旭@youdao

  最近在公司内有人讨论到leveldb,之前正好也简单看了看文档,没仔细看实现,简单写个总结

  1. leveldb的committer阵容很强大,几乎是google那篇经典的big table的原班人马。虽然有人说可能并不是完整的google的使用着的实现,但是还是很吸引人的

  2. 它是一个k/v db library,提供持久化,看项目首页给出的performance很牛逼, 注意目前只是library, 严格来说和tc有点像,并没有dht,甚至没有server实现,不过我相信网上很多蛋疼的hacker会写的,如果有时间的话,我也蠢蠢欲动啊。和Redis之类没法比,因为没有cache。

  3. 针对随机写做了优化,使用了传说中的LSMTree,google的那篇paper里写了,但是没仔细看,在这里暂时不评论。我想应该是目前开源的唯一的LSMTree的kv db的实现(流行的大多数b-tree,其实lsmtree貌似是b-tree的一个优化)

  4. 实现了iterator, 对data可以前序甚至逆序遍历,这点很新鲜

  5. 类似batch,atom这种就不说了,基本是目前的标配

  6. 8g一下, chrome中的indexedDB就是用它实现的

  7. 居然还提供了ObjC的port

  简单归结一句话:这个东西是个k-v本地存储库,读性能一般(和TokyoCabinet 比),随机写不错,很小很清凉。没有memcache,没有server,什么都没有,就是个存储引擎而已。

posted @ 2011-07-29 12:24 小马歌 阅读(510) | 评论 (0)编辑 收藏
 

Gmail和QQ邮箱都实现了在Chrome下的拖拽上传,于是我又查了一些资料终于也实现了Chrome下的拖拽上传。没有看Gmail和QQ邮箱写信页的源码,但是在http://stackoverflow.com/questions/2657653/drag-and-drop-file-upload-in-google-chrome-chromium这里找到了一些解决的方案,因为Chrome不支持FileReader,所以无法通过模拟文件上传的方式来用Ajax上传,有些人给出了一些方法,比如可以通过将文件拖拽到一个<input type=”file” multiple />,并且将这个input的透明度设为0,Chrome支持将文件拖拽到input里面,所以可以触发这个input的change事件,将它提交到一个iframe里面,QQ邮箱在Chrome下貌似是采用这种方式。在这个帖子的最后面有个人给出了一个DEMO,我认为是一个比较好的解决方案,因为Chrome支持FormData,FormData为XMLHttpRequest 2提供了便捷的方法来构造表单的键值对,只需要通过send方法就可以了。最后我的关键代码是这样的:

this.uploadDragFile = function(file, index){
var xhr = new XMLHttpRequest(), _this = this;
xhr.upload.addEventListener(”progress”, function(e){
if(e.lengthComputable){
var percentage = Math.round(e.loaded*100/e.total);
$(”att_prog_drag_”+index).style.width = percentage + “%”;
}
}, false);
xhr.addEventListener(”error”, function(e){
var pn = $(”att_prog_drag_”+index).parentNode;
pn.style.display = “none”;
var em = document.createElement(”em”);
em.style.color = “red”;
em.style.marginLeft = “6px”;
em.innerHTML = “上传失败”;
pn.parentNode.insertBefore(em, pn);
}, false);
xhr.addEventListener(”load”, function(e){
var pn = $(”att_prog_drag_”+index).parentNode;
pn.style.display = “none”;
try{
eval(”var data=”+xhr.responseText+”;”);
}catch(e){
var data = null;
}
var pn = $(”att_prog_drag_”+index).parentNode;
pn.style.display = “none”;
if(data && data.result){
_this._attList["file_drag_"+index] = data["data"];
_this.setAttach(_this._attList);
}else{
var em = document.createElement(”em”);
em.style.color = “red”;
em.style.marginLeft = “6px”;
em.innerHTML = data.msg || “上传失败”;
pn.parentNode.insertBefore(em, pn);
}
}, false);
xhr.open(”POST”, “/classic/uploadatt.php?email=”+runtime._conf["uid"]);
if (typeof(window.FormData) != “undefined”) {
var form = new FormData();
form.append(”Filedata”, file);
xhr.send(form);
}else{
var boundary = “xxxxxxxx”;
xhr.setRequestHeader(”Content-Type”, “multipart/form-data; charset=x-user-defined; boundary=”+boundary);//simulate a file MIME POST request;
xhr.setRequestHeader(”Content-Length”, file.size);
var body = “–” + boundary +”\r\n”;
body += “Content-Disposition: form-data; name=’Filedata’; filename=’” + encodeURIComponent(file.name) + “‘\r\n”;
body += “Content-Type: application/octet-stream\r\n\r\n”;
body += file.getAsBinary() + “\r\n”;
body += “–” + boundary + “–”;
xhr.sendAsBinary(body);
}

};

posted @ 2011-07-27 14:57 小马歌 阅读(408) | 评论 (0)编辑 收藏
 
在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看HTML5的WebSocket API:它可用于客户端、服务器端。而且有一个优秀的第三方API,名为Socket.IO。

一、什么是WebSocket API?

WebSocket API是下一代客户端-服务器的异步通信方法。该通信取代了单个的TCP套接字,使用ws或wss协议,可用于任意的客户端和服务器程序。WebSocket目前由W3C进行标准化。WebSocket已经受到Firefox 4、Chrome 4、Opera 10.70以及Safari 5等浏览器的支持。

WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允许跨域通信。

Ajax技术很聪明的一点是没有设计要使用的方式。WebSocket为指定目标创建,用于双向推送消息。

二、WebSocket API的用法

只专注于客户端的API,因为每个服务器端语言有自己的API。下面的代码片段是打开一个连接,为连接创建事件监听器,断开连接,消息时间,发送消息返回到服务器,关闭连接。

// 创建一个Socket实例
var socket = new WebSocket('ws://localhost:8080'); 

// 打开Socket 
socket.onopen = function(event) { 

  // 发送一个初始化消息
  socket.send('I am the client and I\'m listening!'); 

  // 监听消息
  socket.onmessage = function(event) { 
    console.log('Client received a message',event); 
  }; 

  // 监听Socket的关闭
  socket.onclose = function(event) { 
    console.log('Client notified socket has closed',event); 
  }; 

  // 关闭Socket.... 
  //socket.close() 
};

让我们来看看上面的初始化片段。参数为URL,ws表示WebSocket协议。onopen、onclose和onmessage方法把事件连接到Socket实例上。每个方法都提供了一个事件,以表示Socket的状态。

onmessage事件提供了一个data属性,它可以包含消息的Body部分。消息的Body部分必须是一个字符串,可以进行序列化/反序列化操作,以便传递更多的数据。

WebSocket的语法非常简单,使用WebSockets是难以置信的容易……除非客户端不支持WebSocket。IE浏览器目前不支持WebSocket通信。如果你的客户端不支持WebSocket通信,下面有几个后备方案供你使用:

Flash技术 —— Flash可以提供一个简单的替换。 使用Flash最明显的缺点是并非所有客户端都安装了Flash,而且某些客户端,如iPhone/iPad,不支持Flash。

AJAX Long-Polling技术 —— 用AJAX的long-polling来模拟WebSocket在业界已经有一段时间了。它是一个可行的技术,但它不能优化发送的信息。也就是说,它是一个解决方案,但不是最佳的技术方案。

由于目前的IE等浏览器不支持WebSocket,要提供WebSocket的事件处理、返回传输、在服务器端使用一个统一的API,那么该怎么办呢?幸运的是,Guillermo Rauch创建了一个Socket.IO技术。

三、带Socket.IO的WebSocket

Socket.IO是Guillermo Rauch创建的WebSocket API,Guillermo Rauch是LearnBoost公司的首席技术官以及LearnBoost实验室的首席科学家。Socket.IO使用检测功能来判断是否建立WebSocket连接,或者是AJAX long-polling连接,或Flash等。可快速创建实时的应用程序。Socket.IO还提供了一个NodeJS API,它看起来非常像客户端API。
建立客户端Socket.IO

Socket.IO可以从GitHub下载,可以把socket.io.js文件包含到页面中:

<script src="http://cdn.socket.io/stable/socket.io.js"></script>
[/code

此时,Socket.IO在此页面上是有效的,是时候创建Socket了:

[code]
// 创建Socket.IO实例,建立连接
var socket= new io.Socket('localhost',{ 
  port: 8080 
}); 
socket.connect(); 

// 添加一个连接监听器
socket.on('connect',function() { 
  console.log('Client has connected to the server!'); 
});

// 添加一个连接监听器
socket.on('message',function(data) { 
  console.log('Received a message from the server!',data); 
});

// 添加一个关闭连接的监听器
socket.on('disconnect',function() { 
  console.log('The client has disconnected!'); 
}); 

// 通过Socket发送一条消息到服务器
function sendMessageToServer(message) { 
  socket.send(message); 
}

Socket.IO简化了WebSocket API,统一了返回运输的API。传输包括:
WebSocket
Flash Socket
AJAX long-polling
AJAX multipart streaming
IFrame
JSONP polling

你还可以设置任意的Socket.IO构造器的第二个选项,选项包括:

port - 待连接的端口
transports - 一个数组,包含不同的传输类型
transportOptions - 传输的参数使用的对象,带附加属性

Socket.IO还提供了由本地WebSocket API提供的普通连接、断开连接、消息事件。Socket还提供了封装每个事件类型的方法。

四、NodeJS和Socket.IO联合开发

Socket.IO提供的服务器端解决方案,允许统一的客户端和服务器端的API。使用Node,你可以创建一个典型的HTTP服务器,然后把服务器的实例传递到Socket.IO。从这里,你创建连接、断开连接、建立消息监听器,跟在客户端一样。

一个简单的服务器端脚本看起来如下:

// 需要HTTP 模块来启动服务器和Socket.IO
var http= require('http'), io= require('socket.io'); 

// 在8080端口启动服务器
var server= http.createServer(function(req, res){ 
  // 发送HTML的headers和message
  res.writeHead(200,{ 'Content-Type': 'text/html' }); 
  res.end('<h1>Hello Socket Lover!</h1>'); 
}); 
server.listen(8080); 

// 创建一个Socket.IO实例,把它传递给服务器
var socket= io.listen(server); 

// 添加一个连接监听器
socket.on('connection', function(client){ 

  // 成功!现在开始监听接收到的消息
  client.on('message',function(event){ 
    console.log('Received message from client!',event); 
  }); 
  client.on('disconnect',function(){ 
    clearInterval(interval); 
    console.log('Server has disconnected'); 
  }); 
});

你可以运行服务器部分,假定已安装了NodeJS,从命令行执行:

node socket-server.js

现在客户端和服务器都能来回推送消息了!在NodeJS脚本内,可以使用简单的JavaScript创建一个定期消息发送器:

// 创建一个定期(每5秒)发送消息到客户端的发送器
var interval= setInterval(function() { 
  client.send('This is a message from the server! ' + new Date().getTime()); 
},5000);

服务器端将会每5秒推送消息到客户端!

五、dojox.Socket和Socket.IO

Persevere的创建者Kris Zyp创建了dojox.Socket。dojox.Socket以Dojo库一致的方式封装了WebSocket API,用于在客户端不支持WebSocket时,使用long-polling替代。

下面是怎样在客户端使用dojox.Socket和在服务器端使用Socket.IO的例子:

var args, ws= typeof WebSocket!= 'undefined'; 
var socket= dojox.socket(args= { 
  url: ws? '/socket.io/websocket' : '/socket.io/xhr-polling', 
  headers:{ 
    'Content-Type':'application/x-www-urlencoded' 
  }, 
  transport: function(args, message){ 
    args.content = message; // use URL-encoding to send the message instead of a raw body 
    dojo.xhrPost(args); 
  }; 
}); 
var sessionId; 
socket.on('message', function(){ 
  if (!sessionId){ 
    sessionId= message; 
    args.url += '/' + sessionId; 
  }else if(message.substr(0, 3) == '~h~'){ 
   // a heartbeat 
  } 
});

dojox.socket.Reconnect还创建了在套接字失去连接时自动重连。期待包含dojox.Socket的Dojo 1.6版本早日发布。

六、实际应用和WebSocket资源

有很多WebSocke的实际应用。WebSocket对于大多数客户机-服务器的异步通信是理想的,在浏览器内聊天是最突出的应用。WebSocket由于其高效率,被大多数公司所使用。

WebSocket资源
Socket.IO站点:http://socket.io/
WebSocket的Wikipedia:http://en.wikipedia.org/wiki/WebSockets
WebSockets.org站点:http://www.websockets.org/
Dojo WebSocket站点:http://www.sitepen.com/blog/2010/10/31/dojo-websocket/
posted @ 2011-07-27 14:56 小马歌 阅读(583) | 评论 (0)编辑 收藏
 
添加安装源
Centos 默认官方源中没有nginx 和 php-fpm 所以必须添加第三方源,不然就只能自己编译了。
添加[CentALT]源
在/etc/yum.repo.d 目下创建 alt.ru.repo 文件内容如下:
[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0
启用 EPEL
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
32系统的用下面命令
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
安装 nginx +PHP-FPM +eAccelerator +mysql
yum update
yum install nginx php-fpm php-cli php-pdo php-mysql php-mcrypt php-mbstring php-gd php-tidy php-xml php-xmlrpc php-pear php-pecl-memcache php-eaccelerator
配置优化Nginx
修改 /etc/nginx/nginx.conf,下面只列出修改的部分。
#根据CPU 核心processes,VPS下几个核心几个processes,独立服务器可x2
worker_processes 4;
#启用epoll
worker_rlimit_nofile 51200;
events {
 worker_connections 51200;
 use epoll;
}
#参数调整
 sendfile on;
 tcp_nopush on;
 tcp_nodelay  on;
 server_tokens off;
 keepalive_timeout 50;
 server_names_hash_bucket_size 128;
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 client_max_body_size 50m;
#fastcgi优化
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 256k;
#开启gzip并优化
 gzip on;
 gzip_min_length 1k;
 gzip_buffers 4 16k;
 gzip_http_version 1.0;
 gzip_comp_level 2;
 gzip_types text/plain application/x-javascript text/css application/xml;
 gzip_vary on;php-fpm 调整
修改/etc/php-fpm.conf 将max_children 调为20
<value name="max_children">20</value>mysql 调整
修改/etc/my.conf [mysqld] 段加入如下指令
skip-network
skip-innodb
skip-locking
skip-bdb
key_buffer  = 16K
max_allowed_packet = 3M
thread_stack = 64K
thread_cache_size = 8
table_cache  = 3
query_cache_limit = 1M
query_cache_size = 16M系统内核调整
在/etc/sysctl.conf 加入
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
net.ipv4.tcp_max_tw_buckets = 6000
echo “ulimit -SHn 65535” >> /etc/rc.local
styctl -p开启服务并设置系统启动默认启动
ulimit -SHn 65535
/etc/init.d/nginx start
/etc/init.d/php-fpm start
/etc/init.d/mysqld start
chkconfig nginx on
chkconfig php-fpm on
chkconfig mysqld on
posted @ 2011-07-26 10:27 小马歌 阅读(1193) | 评论 (0)编辑 收藏
仅列出标题
共95页: First 上一页 49 50 51 52 53 54 55 56 57 下一页 Last