- 浏览: 265838 次
- 性别:
- 来自: 北京
最新评论
-
DragonKiiiiiiiing:
支持楼主,中国互联网太缺这种无私奉献的人了。您的这本书我已拜读 ...
JAVA NIO 全书 译稿 -
sp42:
非常感谢!热部署帮助很大!
Pure JS (2): 热部署 (利用 JDK 7 NIO 监控文件变化) -
sp42:
其实在我的架构中,我更倾向于 JSP 作为前端模板系统~还是写 ...
Pure JS (5.3):pure.render 的实现(构造window对象,实现服务器端 JQuery Template) -
sp42:
非常不错,楼主做的正是鄙人想做的做的,而且比鄙人的来的成熟、健 ...
OMToolkit介绍(5): 总结 -
cfanllm:
楼主辛苦了,,,谢谢分享啊
JAVA NIO 全书 译稿
文章列表
PandaJS: Rhino + MongoDB + Server-side JQuery Template
PandaJS 是基于 Rhino、MongoDB、Server-side jQuery Template 的 JS 编程工具包,目标是使用更一致的方式编写客户端和服务器端的 js 代码。它采用嵌入式的 Jetty 作为 Web Server,依赖于 Java 7。
PandaJS 在服务器端的页面渲染也采用 JQuery Template 的语法,而数据库操作接口的语法与 Mongo Shell 上直接执行的原生语法非常接近。这使得我们可以在服务器端和客户端共用页面渲染代码, ...
JAVA NIO 全书 译稿
前言
本书介绍了Java平台上的高级输入/输出,具体点说,就是使用Java 2标准版(J2SE)软件开发包(SDK)1.4及以后版本进行的输入/输出。J2SE 1.4版代号Merlin,包含可观的I/O新特性,对此我们将作详细论述。这些新的I/O特性主要包含在java.nio软件包及其子包中,并被命名为New I/O(
(以下分析针对的是 nutch 1.4)
Crawl 类是运行抓取程序的入口,代码不多,但关联的其他类不少。
抓取的流程是:
1. 将初始的 URL 地址注入到 crawlDb
2. 从crawldb中生成一个url的子集用于抓取
3. 抓取网页
4. 分析网页
5. 更新 crawlDb ,增加新抓取的 url
6. 循环执行 2-5 步,直到达到指定的抓取深度
之后,还需要进行链接反转,将索引导入到 solr 等。
Crawl 类的声明如下:
public class Crawl extends Configured implem ...
在之前的源代码分析中我们经常遇到神秘的 OutMessage 类的实例,并调用它的 writeInt,query 等方法与 MongoDB 数据库进行交互。
但 OutMessage 继承了 BSONEncoder 类,而 BSONEncoder 的 writeInt 等方法实际上是委托给 OutputBuffer 类的实 ...
GridFSFile 类表示 GridFS 中的文件的信息,它是一个抽象类,分别被 GridFSDBFile (表示从数据库中读取的文件) 和 GridFSInputFile(表示将要保存到数据库中的文件 ) 继承。
GridFSFile 类包含下列属性(相应地有一系列的 get 方法)
Object _id; // 文件的唯一标识
String _filename; // 文件的名称
String _contentType; // 文件内容类型
long _length; ...
GridFS 类在 com.mongodb.gridfs 包中的地位类似于 Mongo 类在 com.mongodb 包的作用,主要是提供对外的接口。
它的各个方法是分别委托给不同的类执行的,尤其是 DBColletion 类的实例 _filesCollection 和 _chunkCollection 。
我们先看看它的构造函数:
/**
* 在数据库中为指定的 bucket 创建 GridFS 实例
* bucket 可以认为是标识符,用于区分不同的 GridFS 的实例,类似于传统数据库中的不同表
* 默认的 bucket 是 ...
com.mongodb 是 MongoDB Driver 核心类所在的包。其中 Mongo 类是整个 Driver 的入口点。
下面列出之前对这个包中的几个主要类的介绍:
Mongo 表示一个数据库实例,可能包含多个 Server 。
http://xxing22657-yahoo-com-cn.iteye.com/blog/1236186
DB 表示一个数据库连接。
http://xxing22657-yahoo-com-cn.iteye.com/blog/1291183
DBApiLayer 继承 DB 类。DB 操作的底层实现,通过 Mongo 对 ...
DBPort 是表示数据库端口的类,分别用 call 和 say 方法实现读取和写入操作。
这两个方法都调用了 go 方法。
// 读取操作
Response call( OutMessage msg , DBCollection coll )
throws IOException {
return go( msg , coll );
}
// 写入操作
void say( OutMessage msg )
throws IOException {
go( ms ...
RelicaSetStatus 用于读取集群中的服务器节点的信息。
getMaster 方法和 getASecondary 方法分别可用于以获取 master 节点和 secondary 节点。
内部类 ReplicaSetStatus.Node 包含了节点的状态信息,内部类 ReplicaSetStatus.Node.Updater 用于实例化一个定时更新节点状态的线程。
getMaster 方法和 getASecondary 方法分析如下:
// 获取 master 服务器地址
ServerAddress getMaster(){
...
DBAPILayer 继承了抽象类 DB ,主要借助内部类 DBApiLayer.MyCollection 实现具体的数据库操作。
DB 类的介绍可以参考:http://xxing22657-yahoo-com-cn.iteye.com/blog/1291183
借助 DBApiLayer.MyCollection 实现增删改查
DBApiLayer.MyCollection 继承了抽象类 DBCollection,具体实现了增删改查操作。
DBCollection 类的介绍可以参考之前的文章:http://xxing22657-yahoo-com-cn.iteye.com/blog ...
DBTCPConnecror 是对 DBPort 类的封装,借助 DBPort 实现读写操作、获取服务器状态等。
say 方法和 call 方法
DBTCPConnecror 类中比较值得分析的是 say 方法和 call 方法的实现:
// 执行写操作
WriteResult say( DB db , OutMessage m , WriteConcern concern , ServerAddress hostNeeded )
// 执行读操作
Response call( DB db , DBCollection coll , OutMessage m , Serve ...
DB 表示数据库连接,是一个抽象类,部分核心功能由子类提供,由 DBApiLayer 继承。
由子类实现的抽象方法
// 开始数据库连接
public abstract void requestStart();
// 结束数据库连接
public abstract void requestDone();
// 保持数据库连接
public abstract void requestEnsureConnection();
// 获取指定名称的数据集
protected abstract DBCollection doGetCollection( String name ); ...
DBCurosr 是 DBCollection 的 find 方法返回的对象,可以设置 skip、limit 等属性之后,执行查询,得到查询结果,
用法如下:
List<DBObject> obj
= collection.find( query ).skip( 1000 ).limit( 100 ).toArray();
DBCursor 类的方法可以可 ...
DBCollection 是表示数据集合的抽象类,它的实现可以简单地分为两类:
一类是抽象方法,由子类(DBApiLayer.MyCollection)实现;
另一类委托给类型为 "DB" 的属性 _db,_db 实际上是 DBApiLayer 类的实例(DBApiLayer 继承抽象类 DB);
因此,DBCollection 类是实现细节与 DBApiLayer 关系密切。
DBApiLyer 的实现细节我们将在后续文章中进行详细的描述,本文主要探讨两者之间的联系。
由子类实现的方法
以下方法是由子类实现的,这些将在介绍 DBApiLayer ...
Mongo 表示一个数据库实例,可能包含多个 ServerAddress 和多个 DB。
本文将介绍 Mongo 类中的三个重要方法:构造方法,获取所有数据库的名称,通过名称获取指定的数据库
构造方法
实现如下:
// 构造方法
// replicaSetSeeds 所有 Server 的地址
// options 默认的查询设置
public Mongo( List<ServerAddress> replicaSetSeeds , MongoOptions options )
throws MongoException {
// 设置 ...