brew 中node-7.6.0 already installed, it’s just not linked.错误修改
`sudo brew uninstall node brew update brew upgrade brew cleanup brew install node sudo chown -R 用户组(一般当前用户名) /usr/local brew link --overwrite node`
`sudo brew uninstall node brew update brew upgrade brew cleanup brew install node sudo chown -R 用户组(一般当前用户名) /usr/local brew link --overwrite node`
你真的了解ClassLoader吗? 这篇文章翻译自zeroturnaround.com的 Do You Really Get Classloaders? ,融入和补充了笔者的一些实践、经验和样例。本文的例子比原文更加具有实际意义,文字内容也更充沛一些,非常感谢作者 Jevgeni Kabanov 能够共享如此优秀的文档。 1. 为什么你需要了解和敬畏ClassLoader ClassLoader在Java语言中占据了核心地位,Java应用服务器,OSGi,以及大量的网络框架,它们大多数都用到了ClassLoader。如果在使用过程中出现了类加载错误,你能解决它吗? 我们将从JVM和开发者两个角度讲述ClassLoader,将会选择一些典型的案例,然后演示如何解决它们。NoClassDefFoundError,LinkageError等很多错误都会有特定的表征,我们分析每个例子,然后进行解决。 2. 进入ClassLoader 每个ClassLoader对象都是一个java.lang.ClassLoader的实例。每个Class对象都被这些ClassLoader对象所加载,通过继承java.lang.ClassLoader可以扩展出自定义ClassLoader,并使用这些自定义的ClassLoader对类进行加载。 先大体了解一下ClassLoader的API: `01` <td class="content"> `package` `java.lang;` </td> </tr> </table> </div> <div class="line alt2"> <table> <tr> <td class="number"> `02` </td> <td class="content"> </td> </tr> </table> </div> <div class="line alt1"> <table> <tr> <td class="number"> `03` </td> <td class="content"> `public` `abstract` `class` `ClassLoader {` </td> </tr> </table> </div> <div class="line alt2"> <table> <tr> <td class="number"> `04` </td> <td class="content"> ` ``public` `Class loadClass(String name);` </td> </tr> </table> </div> <div class="line alt1"> <table> <tr> <td class="number"> `05` </td> <td class="content"> </td> </tr> </table> </div> <div class="line alt2"> <table> <tr> <td class="number"> `06` </td> <td class="content"> ` ``protected` `Class defineClass(``byte``[] b);` </td> </tr> </table> </div> <div class="line alt1"> <table> <tr> <td class="number"> `07` </td> <td class="content"> </td> </tr> </table> </div> <div class="line alt2"> <table> <tr> <td class="number"> `08` </td> <td class="content"> ` ``public` `URL getResource(String name);` </td> </tr> </table> </div> <div class="line alt1"> <table> <tr> <td class="number"> `09` </td> <td class="content"> </td> </tr> </table> </div> <div class="line alt2"> <table> <tr> <td class="number"> `10` </td> <td class="content"> ` ``public` `Enumeration getResources(String name);` </td> </tr> </table> </div> <div class="line alt1"> <table> <tr> <td class="number"> `11` </td> <td class="content"> </td> </tr> </table> </div> <div class="line alt2"> <table> <tr> <td class="number"> `12` </td> <td class="content"> ` ``public` `ClassLoader getParent();` </td> </tr> </table> </div> <div class="line alt1"> <table> <tr> <td class="number"> `13` </td> <td class="content"> `}` </td> </tr> </table> </div> 最重要的是ClassLoader的<span lang="EN-US">loadClass</span>方法,它接受一个全类名,然后返回一个Class类型的实例。 ...
Android实现图片相似度 http://zzimoo.com/similar/ OpenCV笔记大集锦 http://blog.csdn.net/langb2014/article/details/51379326 ThinkPHP5.0完全开发手册 http://www.kancloud.cn/manual/thinkphp5 GitHub秘籍(中文版) http://www.kancloud.cn/thinkphp/github-tips REST API 安全设计指南 http://www.kancloud.cn/kancloud/rest-api-design-safety Atom IDE极速入门 http://www.kancloud.cn/kinghs/atom OHSCE官方教程免费版 http://www.kancloud.cn/ohsce/ohscebook 深入浅出ES6 http://www.kancloud.cn/kancloud/es6-in-depth ECMAScript 6入门 http://www.kancloud.cn/kancloud/ecmascript6-guide Sublime Text 全程指南 http://www.kancloud.cn/digest/sublime-text-complete-guide 深入浅出React http://www.kancloud.cn/kancloud/react-in-depth 图像处理算法 http://www.kancloud.cn/digest/imageproebow iOS 高级 http://www.kancloud.cn/digest/data Flex 布局教程:语法篇 http://www.kancloud.cn/digest/flex-grammar Android性能优化 http://www.kancloud.cn/digest/android-performance 设计模式C++实现 http://www.kancloud.cn/digest/walker1 系统架构师技能学习 http://www.kancloud.cn/digest/archi Java工具类专栏 http://www.kancloud.cn/digest/java-utility-classes C++开发人脸性别识别教程 http://www.kancloud.cn/digest/genderrecogtion UiAutomator从入门到原理 http://www.kancloud.cn/digest/uiautomatorpriciple Android NDK开发学习 http://www.kancloud.cn/digest/zlndk React Native学习指南 http://www.kancloud.cn/digest/rnative RabbitMQ Java入门教程 http://www.kancloud.cn/digest/rabbitmq-for-java FFmpeg入门实践与分析 http://www.kancloud.cn/digest/ffmpegtutorial 开源物联网系统设计 http://www.kancloud.cn/digest/bare-minimum-iot-system IOS 网络编程 http://www.kancloud.cn/digest/ios-data Android流媒体播放 http://www.kancloud.cn/digest/rtmp-android Cocos2d游戏开发 http://www.kancloud.cn/digest/cocos2d Android核心分析 http://www.kancloud.cn/digest/androidcore OpenCV 应用笔记 http://www.kancloud.cn/digest/usingopencv 游戏引擎开发 http://www.kancloud.cn/digest/game-engine-dev 电商系统 http://www.kancloud.cn/digest/b2c-it 无线局域网开发 http://www.kancloud.cn/digest/wlan android SDK开发 http://www.kancloud.cn/digest/phoebe 大数据开源框架 http://www.kancloud.cn/digest/bigdata-open android源码解析 http://www.kancloud.cn/digest/androidframeworks Android Studio详细教程 http://www.kancloud.cn/stormzhang/android_studio iOS开发进阶 http://www.kancloud.cn/digest/iosdevelopment001 Android特效专辑 http://www.kancloud.cn/digest/liuguilin Android开发高手进阶 http://www.kancloud.cn/digest/androidadvanced vue http://www.kancloud.cn/dingyiming/vue JNI/NDK开发指南 http://www.kancloud.cn/xyang0917/blogjnindk 《架构师成长之路》漫画连载 http://www.kancloud.cn/qiniu/architect-growth Android(OpenCV)开发 http://www.kancloud.cn/yanzi1225627/android-opencv Android JNI入门 http://www.kancloud.cn/digest/android-jni 设计模式与系统架构 http://www.kancloud.cn/longxuan/my-designpattern 轻松搞定RabbitMQ http://www.kancloud.cn/longxuan/rabbitmq-arron android应用安全 http://www.kancloud.cn/digest/android-safe Java线程 http://www.kancloud.cn/digest/java-thread 微信硬件平台解决方案 http://www.kancloud.cn/yueqian_scut/iot-wechat Appium之android平台的源码分析 http://www.kancloud.cn/digest/itfootball-appium Gradle学习系列 http://www.kancloud.cn/digest/itfootball-gradle react-native试玩 http://www.kancloud.cn/digest/doctorqrn 《机器学习实战》笔记 http://www.kancloud.cn/digest/machinglearninginact ...
引言 前段日子,公司为了提高产品出产效率,想把公司每个产品各个小功能抽取出来,这样再做一个新产品的时候,重复的功能就可以直接使用之前写好的模块就行了。想法是不错的,但一开始实践起来很麻烦,同事A就将自己的模块做成module,为了图方便,将整个module项目直接发送给同事B和同事C,代码第一次写成以后一般都会有一些小bug的,这样,同事A在自己电脑上修改代码,然后再次修改代码分别传给B和C。B和C需要替换之前的module,重新运行。这相当的麻烦,如果还有同事D,E,F..做起来真是噩梦,可能有有人想问,为什么不用svn或者git,用版本控制工具当然会好非常多,但每次pull其实也比较麻烦。还有另一种方法,使用本地maven仓库,使用过android studio的开发者都应该体会过其中的好处,当需要依赖一个新的模块(或者叫library)时,只需要这样 填写需要的模块及对应的版本号,同步一下就行了,很方便。本篇文章就教各位如何使用Artifactory来搭建本地仓库,来完成上图的效果 什么是Artifactory? 一句话,开源的Maven仓库管理者 搭建Artifactory 1.检测你的jdk版本是否为1.8及以上 打开cmd,输入java -version,如果输出结果如下所示即可,如果是1.6或者1.7,去官网下载最新版本替换 `java -version java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)" data-snippet-id="ext.437a4825669d574acb250e72155a8b81" data-snippet-saved="false" data-codota-status="done">C:\Users\Administrator>java -version<br /> java version "1.8.0_31"<br /> Java(TM) SE Runtime Environment (build 1.8.0_31-b13)<br /> Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)` 2.下载Artifactory,解压下载好的安装包,打开解压后文件夹下的bin文件夹,运行artifactory.bat,大概等待1分钟左右就安装完成了 3.打开http://localhost:8081/artifactory将会看到管理界面,如果看到此界面,就表示artifactory已经安装成功了.如果不是该界面,则需要等待安装完成 上传library到maven 创建自己的library project(注意你的 module是apply plugin: ‘com.android.library’),写好自己模块的代码后,准备上传 1.添加相关插件引用 在你library 项目中顶级的build.gradle文件中,添加一条新的classpath引用 **[plain]** [view plain](http://blog.csdn.net/level_26/article/details/53483444#)<span class="tracking-ad" data-mod="popu_168"> [copy](http://blog.csdn.net/level_26/article/details/53483444#)</span> <div> <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="16" height="16" align="middle" name="ZeroClipboardMovie_1" data-mce-fragment="1"> </embed> </div> </div> - <span style=”font-family:Microsoft YaHei;font-size:14px;”>buildscript { - dependencies { - classpath “org.jfrog.buildinfo:build-info-extractor-gradle:4.4.0” - } - }</span> 然后在你的library module的build.gradle中,添加两条语句 ...
打开终端,执行 /usr/libexec/java_home -V MacBook-Air:~ eng$ /usr/libexec/java_home -V Matching Java Virtual Machines (4): 1.8.0_101, x86_64: “Java SE 8” /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home 1.7.0_79, x86_64: “Java SE 7” /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home 1.6.0_65-b14-466.1, x86_64: “Java SE 6” /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 1.6.0_65-b14-466.1, i386: “Java SE 6” /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home 默认JDK1.6(Apple自带JDK)路径: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 默认JDK1.7、1.8(Oracle) Home : /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
由于使用总公司的SVN,有些新同事和其他组没有SVN,项目开发中没有版本控制,为了解决这个问题,我给公司搭建了内网git服务器进行版本控制,现在记录下安装配置过程 第一步:登录官网点击下载,选择适合的操作系统 例如centos https://about.gitlab.com/downloads/#centos7 第二步:由于网络问题,我选择下载安装 下载网址https://packages.gitlab.com/gitlab/gitlab-ce 运行命令 rpm 安装 rpm -i gitlab-ce-XXX.rpm 第三步:配置请求地址和端口 进入/etc/gitlab/gitlab.rb 下面修改 1、external_url 表示请求的地址例如external_url ‘http://192.168.0.239’ 2、nginx[‘listen_port’] 表示端口 例如nginx[‘listen_port’] = 8999 注意:要是有#号别忘记删除,修改gitlab.rb文件需要重新编辑和配置 第四步:编译和配置(配置并启动gitlab) sudo gitlab-ctl reconfigure 第五步:在浏览器输入地址,第一次是修改密码(对用的账号是root),根据提示修改密码 第六步:登录OK 第七步:gitlab仓库地址和备份 1、gitlab默认参考地址:/var/opt/gitlab/git-data/repositories 修改/etc/gitlab/gitlab.rb->git_data_dirs(别忘记#去掉) 2、备份命令:gitlab-rakegitlab:backup:create, 默然的备份目录为: /var/opt/gitlab/backups 备份目录的修改 vi /etc/gitlab/gitlab.rb gitlab_rails[‘backup_path’] =’/mnt/gitlab_backups’ 3、恢复备份,需要先停止服务,恢复完成在启动服务 gitlab-rake gitlab:backup:restore BACKUP=1458213020 BACKUP后面跟的是备份文件的时间戳, 比如恢复备份文件 1458213020_gitlab_backup.tar 第八步:其他 1、停服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 2、回复完启动服务 gitlab-ctl start SSH key生成 详细请参考: http://blog.csdn.net/lsyz0021/article/details/52064829 http://blog.csdn.net/tanzhengyu/article/details/51064380 安装git,从程序目录打开 “Git Bash” 键入命令:ssh-keygen -t rsa -C “email@email.com” “email@email.com”是github账号 提醒你输入key的名称,输入如id_rsa 在C:\Documents and Settings\Administrator\下产生两个文件:id_rsa和id_rsa.pub(mac 在~/.ssh目录下) 把4中生成的密钥文件复制到C:\Documents and Settings\Administrator.ssh\ 目 录下。 用记事本打开id_rsa.pub文件,复制内容,在git的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚才复制的内容。 ^_^ OK了 需要注意步骤2中产生的密钥文件在当前用户的根目录,必须把这两个文件放到当前用户目录的“.ssh”目录下才能生效。 在windows中只能在命令行下输入创建”.”开头的文件夹。命令为 mkdir .ssh 关注公众号获取更多内容和反馈沟通 ...
比如比较字符串、判断文件是否存在及是否可读等,通常用”[]”来表示条件测试。 注意:这里的空格很重要。要确保方括号的空格。笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。 if ….; then …. elif ….; then …. else …. fi [ -f “somefile” ] :判断是否是一个文件 [ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限 [ -n “var” ] :判断var变量是否有值 [ “a” = “b” ] :判断a和b是否相等 -r file 用户可读为真 -w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真 ** 字符串判断** str1 = str2 当两个串有相同内容、长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当串str1为非空时为真 ...
1.下载charles 可以去charles官网下载,下载地址:http://www.charlesproxy.com/download/ 根据自己的操作系统下载对应的版本,然后进行安装,然后打开charles工具 2.设置代理(记住手机跟电脑要在同一个网络,用的同一个路由器) 1).查看默认端口 Proxy->Proxy Settings 在这个页面会看到HTTP Proxy的默认端口是8888 我们不需要修改,只需要知道有这个值就行 2).查看当前电脑的ip 例如我这里的是:192.168.9.129 3).知道了默认端口跟ip地址,我们就可以手机上设置代理了。设置步骤我录制了gif动画。(我用的是genymotion模拟器,真机也是一样的) 完成了以上两个步骤就可以抓到http请求的数据了,效果图如下: 接下来讲解如何抓取https协议的包,如果你没有这个需求,请不要继续浏览下面的内容 3.设置charles ssl代理 Proxy->SSL Proxy Settings 弹出一个ssl代理设置界面 1).Enable SSL Proxying复选框打上勾 2).添加你想要的设置代理的域名,端口默认443 设置过后效果图如下: 4.手机下载ssl证书 1).Help->SSL Proxying ->Install Charles Root Certificate on a Mobile Device or Remote Browser… 会弹出一个提示框,如下显示: 浏览器输入这个地址即可下载证书,记住要用Android自带的浏览器. 地址是:http://charlesproxy.com/getssl 扫一扫二维码安装ssl 2).然后按照他的提示安装证书即可. 做完第三步跟第四步就可以抓包https数据了.如果还有问题请留言。。。下面是我抓包截图。 方法二 HTTP包: 1.安装抓包工具 Charles , 到官网http://www.charlesproxy.com/可下载到最新版本 2.用安装了charles的电脑,代理待抓包anroid手机的网络连接: 首先查看pc的网络IP地址;打开手机设置,进入当前wifi连接,设置代理为手动,将服务器填为上一步中获得的IP,端口默认为8888(在charles的proxy setting中可以改这个端口号)。这时Charles弹出确认框,点击Allow按钮即可 3.中文乱码问题解决 在charles的content/info.plist 中 的vmoption 添加-Dfile.encoding=UTF-8 HTTPS抓包: 下载Charles证书http://www.charlesproxy.com/ssl.zip,解压后导入到手机中,然后设置->安全->凭据存储->从存储设备安装,选中证书。 在Charles的工具栏上点击设置按钮,选择Proxy Settings;切换到SSL选项卡,选中Enable SSL Proxying,选项卡的Locations表单可以填写要抓包的域名和端口,点击Add按钮,在弹出的表单中Host填写域名,比如填api.instagram.com,Port填443。默认的..表示应用于所有地址
*原文* [http://chensd.com/2015-07/websocket-stress-test-and-performance-test.html](http://chensd.com/2015-07/websocket-stress-test-and-performance-test.html?utm_source=tuicool&utm_medium=referral) 主题 [WebSocket](http://www.tuicool.com/topics/11060032)[压力测试](http://www.tuicool.com/topics/11350019) 相对于短连接应用,长连接应用的测试要麻烦得多——尤其是性能和压力测试。此前,甚至从来没有给任何一个上线的 WebSocket 应用做过这方面的测试,前两天,看到有人在 [SegmentFault 上问](http://segmentfault.com/q/1010000003028043) 这方面的问题,刚好又有空,于是想着,还是来查查这方面的资料吧。在 Github 上一搜,还真有现成的工具,名字很简单,直接就叫[websocket-bench](https://github.com/M6Web/websocket-bench) , websocket-bench 是个用 Node.js 编写的命令行工具,可以对使用 Socket.io、[faye](https://github.com/faye/faye) 、 [Primus](https://github.com/primus/primus) 、 [WAMP](https://github.com/tavendo/WAMP) 编写的长连接应用进行性能和压力测试,用法和参数与 ab 差不多,多了一个指定连接成功后进行的操作的定义。 ### websocket-bench 安装 需要使用 npm 以全局的方式来安装 websocket-bench,当然要用阿里提供的 []福利服务器](http://npm.taobao.org/) ,如下: <div> <div> ``` npm install -g websocket-bench –registry=http://registry.npm.taobao.org </div> </div> ### 基本使用 这里以在 CentOS 6.5 上进行测试为便进行说明。首先要修改一下文件打开数,默认是1024,修改为一个比较大的值就行,总共65535个端口,我们测试也不会用太大的并发,websocket-bench 推荐设置的是 60000 ,命令如下: <div> <div> ``` ulimit -n 60000 </div> </div> websocket-bench 的参数与 ab 基本一致,像这样 <div> <div> ``` websocket-bench -a 300 -c 29 http://localhost:8100 -o opt.log ...
1、MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上的时候,MongoDB的数据库访问速度是MySQL的10倍以上。MongoDB的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万~1.5万次读写请求。MongoDB还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。 MongoDB也有一个Ruby的项目MongoMapper,是模仿Merb的DataMapper编写的MongoDB接口,使用起来非常简单,几乎和DataMapper一模一样,功能非常强大。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 所谓“面向集合”(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),为提高效率使用内存映射文件进行管理。 **特性 ** 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。 模式自由。 支持动态查询。 支持完全索引,包含内部对象。 支持查询。 支持复制和故障恢复。 使用高效的二进制数据存储,包括大型对象(如视频等)。 自动处理碎片,以支持云计算层次的扩展性。 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。 文件存储格式为BSON(一种JSON的扩展)。 可通过网络访问。 **官方网站 ** http://www.mongodb.org/ 2、CouchDB 介绍 Apache CouchDB 是一个面向文档的数据库管理系统。它提供以 JSON 作为数据格式的 REST 接口来对其进行操作,并可以通过视图来操纵文档的组织和呈现。 CouchDB 是 Apache 基金会的顶级开源项目。 CouchDB是用Erlang开发的面向文档的数据库系统,其数据存储方式类似Lucene的Index文件格式。CouchDB最大的意义在于它是一个面向Web应用的新一代存储系统,事实上,CouchDB的口号就是:下一代的Web应用存储系统。 **特性 ** 主要功能特性有: CouchDB是分布式的数据库,他可以把存储系统分布到n台物理的节点上面,并且很好的协调和同步节点之间的数据读写一致性。这当然也得以于Erlang无与伦比的并发特性才能做到。对于基于web的大规模应用文档应用,然的分布式可以让它不必像传统的关系数据库那样分库拆表,在应用代码层进行大量的改动。 CouchDB是面向文档的数据库,存储半结构化的数据,比较类似lucene的index结构,特别适合存储文档,因此很适合CMS,电话本,地址本等应用,在这些应用场合,文档数据库要比关系数据库更加方便,性能更好。 CouchDB支持REST API,可以让用户使用JavaScript来操作CouchDB数据库,也可以用JavaScript编写查询语句,我们可以想像一下,用AJAX技术结合CouchDB开发出来的CMS系统会是多么的简单和方便。其实CouchDB只是Erlang应用的冰山一角,在最近几年,基于Erlang的应用也得到的蓬勃的发展,特别是在基于web的大规模,分布式应用领域,几乎都是Erlang的优势项目。 官方网站 http://couchdb.apache.org/ 3、Hbase 介绍 HBase是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式。 HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。 ...