当前位置:数据库 > mongodb >>

在32位系统下使用MongoDB的一点心得

随着互联网的变革,互联网的内容生成方式也逐渐地从网站生成转为用户生成。这种变化不仅仅是内容生成对象的转变那样简单的问题,随之带来的就是互联网数据的大爆炸(big bang)。社交网络的兴起也给互联网相关技术提出了挑战。
 
MongoDB应用广泛,作为一款无关系型数据库产品,它具有伸缩性、高性能、开源、模式开放和基于文档等特性。因此很值得研究。
 
 
 
 
 
通过本文,我将与你分享:
 
1. MongoDB如何申请磁盘空间,采用何种策略申请
 
 
2. 印证网上流传的32位平台下MongoDB数据库不能大于2GB的说法
 
 
 
 
既然MongoDB擅长的是海量数据处理,对它进行研究避免不了使用庞大的数据来做测试。好了,问题来了——上哪找庞大的数据呢?
 
公司里当然有那么多数据了,可是由于保密方面的要求,不能拿来做测试,更不能写出来。因此我想到了一个好东西——CSDN密码库。
 
这个200+M的小家伙在年前闹得沸沸扬扬,弄得人人自危,掀起了一场改密码风暴,反正也被公布出来了,拿它来做测试不是很好么?
 
 
 
 
至于从哪里得到的这个密码库,我就不说了,身为ITer的你一定有办法搞到手的。我的这个版本一共有6428632条数据,每条数据的结构都很简单:
 
用户名# 密码# 邮箱
 
分析的时候只需要一行行地读出来,然后按照“#”分割,最后对每一个字段都trim一下就可以了。
 
我做本次实验使用的平台如下:
 
Windows XP SP3(当然是32位版啦)
 
奔腾E5300 CPU
 
2G内存
 
首先按照上一篇文章建立了本地的MongoDB服务(文章链接:http://blog.csdn.net/chaijunkun/article/details/7227967)
 
然后使用MongoDB-Driver操作MongoDB,使用Morphia做ORM。
 
下面是我写的数据迁移代码(从密码库txt文件存储至MongoDB)
 
CSDNData.java
 
 
package net.csdn.blog.chaijunkun.entities; 
 
import org.bson.types.ObjectId; 
 
import com.google.code.morphia.annotations.Entity; 
import com.google.code.morphia.annotations.Id; 
 
@Entity(value="users", noClassnameStored=true) 
public class CSDNData { 
    @Id 
    private ObjectId id; 
    private Integer idx; 
    private String userName; 
    private String password; 
    private String email; 
    public ObjectId getId() { 
        return id; 
    } 
    public void setId(ObjectId id) { 
        this.id = id; 
    } 
    public Integer getIdx() { 
        return idx; 
    } 
    public void setIdx(Integer idx) { 
        this.idx = idx; 
    } 
    public String getUserName() { 
        return userName; 
    } 
    public void setUserName(String userName) { 
        this.userName = userName; 
    } 
    public String getPassword() { 
        return password; 
    } 
    public void setPassword(String password) { 
        this.password = password; 
    } 
    public String getEmail() { 
        return email; 
    } 
    public void setEmail(String email) { 
        this.email = email; 
    } 

package net.csdn.blog.chaijunkun.entities;
 
import org.bson.types.ObjectId;
 
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
 
@Entity(value="users", noClassnameStored=true)
public class CSDNData {
       @Id
       private ObjectId id;
       private Integer idx;
       private String userName;
       private String password;
       private String email;
       public ObjectId getId() {
              return id;
       }
       public void setId(ObjectId id) {
              this.id = id;
       }
       public Integer getIdx() {
              return idx;
       }
       public void setIdx(Integer idx) {
              this.idx = idx;
       }
       public String getUserName() {
              return userName;
       }
       public void setUserName(String userName) {
              this.userName = userName;
       }
       public String getPassword() {
              return password;
       }
       public void setPassword(String password) {
              this.password = password;
       }
       public String getEmail() {
              return email;
       }
       public void setEmail(String email) {
              this.email = email;
       }
}
在实体中我增加了用于标识文档序号的idx字段。
 
接下来就是数据转储代码了:
 
TransformData.java
 
 
 
package net.csdn.blog.chaijunkun; 
 
import java.net.UnknownHostException; 
 
import net.csdn.blog.chaijunkun.entities.CSDNData; 
import com.google.code.morphia.Datastore; 
import com.google.code.morphia.Key; 
import com.google.code.morphia.Morphia; 
import com.mongodb.Mongo; 
import com.mongodb.MongoException; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader;&nbs
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,