IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能都非常棒,而且IDEA是目前Scala支持最好的IDE。IDEA分ultimate和free edition版,ultimate提供了J2EE等很多非常强力的功能,free edition我觉得已经对于我这样的初学者已经够用了。前面写过一篇配置IntelliJ IDEA 13的SBT和Scala开发环境,本文在这个基础上使用IDEA进行Spark应用的配置和开发。 Continue reading
Category Archives: Dev
Scala Review : Class & Trait
1. 类成员可见性有两种,private,protected和public(和java一样),private需要声明,public无需额外声明。private[this]是更严格的限定,使用这个限定的成员只对被实例可见。private[class_name]和private是一样的,这个成员对这个类的实例可见。而protected[this]允许子类实例访问这个成员。
示例如下:
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 |
package com.debugo.scala package mypack { package Navigator{ //只能在包mypack内部访问 private[mypack] class Navigator { //protected[Navigator]允许Navigator类和其子类访问 protected[Navigator] def useStartChart(): Unit ={ } class LegOfJourney { private[Navigator] val distance = 100 } //private[this]只能被定义它的类对象在内部使用 private[this] var speed = 200 } } package launch { import Navigator._ object Vehicle{ private[launch] val guide = new Navigator //private[mypack],所以可以访问Navigator,但mypack之外的包不可以访问 //这里不能使用Navigator.speed,因为它被定义为private[this] } } } object testPack extends App { import mypack.Navigator._ // val n = new Navigator // class Navigator in package Navigator cannot be accessed in package com.debugo.scala.mypack.Navigator } |
node.js连接Oracle数据库
接触了Node.js大概有一周时间了。异步的非阻塞编程很适合服务器端大量数据库/IO等信息的获取,减少了服务器线程的数量和负载。
第一步是配置Oracle的连接,Oracle的node.js driver基本都依赖于OCCI(Oracle C++ Call Interface),一共有两三个实现。其中node-oracle应该是比较稳定的一个。通过npm编译安装连接Oracle有些麻烦,下面是安装配置的方法。 Continue reading
Percona Server 5.6源码编译
Percona现在没有对el7提供稳定的二进制发行包,所以今天小测一下mysql的源码编译,使用的源码为Percona Server 5.6.19-67,环境为CentOS 7.0。
1. 编译依赖
MySQL的编译依赖下面程序:
g++ MySQL从5.6开始需要使用g++来编译源码。
cmake MySQL从5.5开始,需要使用cmake 2.8+进行工程管理。
bison MySQL的语法解析器用于自动生成语法分析器程序,Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序
ncurses-devel 它提供了API,可以允许程序员编写独立于终端的基于文本的用户界面
libaio libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
zlib MySQL压缩支持
libxml 用于XML输入输出方式的支持,MySQL的可选功能依赖这个包。
openssl 使用openssl 安全socket方式进行通信
使用yum来安装:
1 |
yum install gcc-c++ make cmake bison bison-devel ncurses-devel libaio-devel openssl libxml2 |
MongoDB Two-phase Commit
先恶补一下分布式事务中事务的各类提交机制:(关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究)
NoSQL并没有关系数据库那么严格的事务机制,所以在NoSQL中能否很好的实现事务功能体现了开发人员的功力。两段式提交保证了分布式XA规范的分布式事务的原子性。两段指prepare阶段和commit阶段:
Continue reading
MongoDB Replica Set
一个replica set可以看作一个带故障转移的Master-Slave复制集群,它在primary节点失效后(或者secondaries不能访问primary时)会自动选举secondary节点成为master。replica set需要保证实例之间相互了解生存状态,所以需要n*(n-1)*2条心跳检测链路。在集群有一定规模时增加了网络的负担。如果使用开发语言的Driver指定了replica set中的一些server,那么driver会自动引入replica set中所有的server并自动在primary失效后故障转移到其他节点。
Replica Set Members
Replica set最多可以有12个成员,但是只有7个成员能同时投票。成员的角色分为:
Primary 同master节点,可以执行write操作。
Secondary 同Slave节点,接收并复制Primary节点的操作。可以进行一些其他配置:如设置为Non-Voting或优先级
Arbiter 不进行数据复制,只在primary失效后参与投票。
Continue reading
MongoDB Aggregation
《Seven Database in Seven Weeks》提供了一个较好的数据实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
populatePhones =function(country,area,start,stop) { for(var i=start; i < stop; i++) { var country = 1 + ((Math.random() * 8) << 0); var num = (country * 1e10) + (area * 1e7) + i; db.phones.insert({ _id: num, components:{ country: country, area: area, prefix: (i * 1e-4) << 0, number:i }, display:"+"+ country +" "+ area +"-"+i }); } } populatePhones( 86, 855, 5550000, 5650000) populatePhones( 86, 856, 5550000, 5650000) |
那么最终生成的文档如下:
1 2 |
db.phones.find().limit(1) { "_id" : 78555550000, "components" : { "country" : 7, "area" : 855, "prefix" : 555, "number" : 5550000 }, "display" : "+7 855-5550000" } |
下面使用上面的文档来测试
1 |
count( {} ) |
统计得到的结果的数量
1 2 |
> db.phones.count({'components.number': { $gt : 5599999 } })db.phones.count({'components.number': { $gt : 5599999 } }) 50000 |
MongoDB Cursor
在Oracle这样的关系数据库中,游标是SQL的一个内存工作区,其作用就是用于临时存储从数据库中提取的结果数据块。Oracle的游标在PL/SQL编写存储过程时会经常用到,可以用于一些特殊的控制和曹走。而MongoDB也提供了游标这个定义—当然MongoDB的”存储过程”就是一段javascript的代码块。
Continue reading
Git In IDEA
1. 使用命令行来clone branch
安装git之后,使用下面方式来初始化git本地目录
1 2 3 4 |
git config --global user.name 'debugo' git config --global user.email 'xiaoluffy@gmail.com' cd <your project home> git init |
clone spark源代码
1 |
git clone git://github.com/apache/spark.git |
2. IntelliJ配置git
File – Setting – Version Control – Github,配置github account
分享项目Github上:
选择菜单”VCS — Import into Version Control — Share project on Github”
不必输出library,等到分享结束。
Successfully shared project on Github: sbtFirst..
3. 通过IntelliJ来checkout源代码
输入git URL:
git://github.com/apache/spark.git
完成后会提示你是否打开。
^^
Python Reading List (1)
从接触Python到现在也有四五年时间了,由于平时代码写的少,一直处于打游击的新手状态,缺乏系统的、原理的学习。这段时间陆续收藏了一些干货,借这个时间review一遍。
Python 3 正在毁灭 Python
Python 3打破了对Python 2向后兼容性,“Python 2的字节字符串(str)和Python 3的字节字符串(bytes)之间的根本不同。事实上会很难移植,并且需要一点移植技巧”。但从目前来看许多关键的第三方库都已经成功移植到3.3上。知乎上也对这个问题有着激烈的讨论:http://www.zhihu.com/question/23928496 。Python 3弥补了一些设计上的失误,大部分Python高手还是倾向于转战Python 3的。但是新的语法和规则的引入让我觉得完全在接触一个新的语言,带来的是太多学习的成本。虽然文章有一些危言耸听的成份,但转战Python 3对我来说还有有一些遥远。。
Continue reading